Golang教程:(三)变量

前端之家收集整理的这篇文章主要介绍了Golang教程:(三)变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文:https://golangbot.com/variables/

这是本Golang系列教程的第三篇。本篇介绍Golang中的变量。

你可以阅读 Golang教程:(二)Hello World 来学习如何建立 Go 工作空间以及编写和运行 hello world 程序。

什么是变量

变量(Variable)是给某个内存地址起的一个名字。我们用变量来存储某个特定类型的值。在 Go 中有多种声明变量的语法。

声明单一变量

声明一个变量的语法为:var name type,例如:

package main

import "fmt"

func main() {  
    var age int // variable declaration
    fmt.Println("my age is",age)
}

语句 var age int 声明了一个类型为 int名称age 的变量。在这里我们没有给它赋任何值。如果一个变量没有被赋予任何值,Go 会自动将这个变量初始化为其类型的 0值,比如这里的 age 将被赋值为 0译者注:int的0值为0)。运行这个程序,将得到如下输出

my age is 0

一个变量可以被赋予其类型的任何值。例如,在上例中,age 可以被赋予任何整型值:

package main

import "fmt"

func main() {  
    var age int // variable declaration
    fmt.Println("my age is ",age)
    age = 29 //assignment
    fmt.Println("my age is",age)
    age = 54 //assignment
    fmt.Println("my new age is",age)
}

上面的程序输出如下:

my age is  0  
my age is 29  
my new age is 54

声明一个带初值的变量

在声明变量时可以指定其初始值。

声明一个带初值的变量的语法为:var name type = initialvalue,例如:

package main

import "fmt"

func main() {  
    var age int = 29 // variable declaration with initial value

    fmt.Println("my age is",age)
}

在上面的程序中, age 是一个 int 型的变量,初始值为 29运行上面的程序,输出如下。可以看到 age 的初始值确实为 29

my age is 29

类型推导

如果声明一个变量时提供了初始值,Go可以根据该初始值来自动推导变量的类型。因此如果声明变量时提供了初始值,就可以不必指定其类型。

也就是说,如果声明变量的形式为:var name = initialvalue,Go将根据 initialvalue 自动推导变量 name 的类型。

在下面的例子中,你可以看到声明变量 age 时并没有指定其类型。因为 age 的初值为 29,Go 自动推断其类型为 int

package main

import "fmt"

func main() {  
    var age = 29 // type will be inferred

    fmt.Println("my age is",age)
}

多变量声明

多个变量可以在一条语句中声明。

多变量声明的语法为:var name1,name2 type = initialvalue1,initialvalue2,例如:

package main

import "fmt"

func main() {  
    var width,height int = 100, 50 //declaring multiple variables

    fmt.Println("width is",width,"height is",height)
}

如果指定了初始值,则 type 可以省略。下面的程序利用类型推导声明了多个变量:

package main

import "fmt"

func main() {  
    var width,height = 100, 50 //"int" is dropped

    fmt.Println("width is",height)
}

运行上面的程序,可以看到输出结果为:

width is 100 height is 50

正如你猜想的那样,如果不指定 widthheight 的初值,它们将自动被赋值为 0,也就是说它们将以 0 作为初值:

package main

import "fmt"

func main() {  
    var width,height int
    fmt.Println("width is",height)
    width = 100
    height = 50
    fmt.Println("new width is","new height is ",height)
}

上面的程序将会输出

width is 0 height is 0  
new width is 100 new height is  50

有些时候我们需要在一条语句中声明多个不同类型的变量。我们可以使用下面的语法达到此目的:

var ( name1 = initialvalue1,name2 = initialvalue2 )

下面的程序就用上面的语法声明了多个不同类型的变量:

package main

import "fmt"

func main() {  
    var (
        name   = "naveen"
        age    = 29
        height int
    )
    fmt.Println("my name is",name,",age is",age,"and height is",height)
}

这里我们声明了一个字符串类型的变量 name,以及两个整型的变量 ageheight。(我们将在下一篇教程中讨论 Golang 中可用的类型)。运行上面的程序将会产生如下输出

my name is naveen,age is 29 and height is 0

速记声明

Go 提供了另一种简洁的声明变量的方式。这种方式称为速记声明(shorthand declaratiion)。速记声明使用 := 操作符来声明变量。

速记声明的语法为:name := initialvalue,例如:

package main

import "fmt"

func main() {  
    name,age := "naveen", 29 //short hand declaration

    fmt.Println("my name is","age is",age)
}

运行上面的程序,输出如下:

my name is naveen age is 29

速记声明要求必须给声明的每一个变量都提供初始值。下面的 程序 将会报错:assignment count mismatch: 2 = 1。这是因为 没有给 age 提供初始值

package main

import "fmt"

func main() {  
    name,age := "naveen" //error

    fmt.Println("my name is",age)
}

速记声明要求在 := 的左边必须至少有一个变量是新声明的。考虑如下程序

package main

import "fmt"

func main() {  
    a,b := 20, 30 // declare variables a and b
    fmt.Println("a is",a,"b is",b)
    b,c := 40, 50 // b is already declared but c is new
    fmt.Println("b is",b,"c is",c)
    b,c = 80, 90 // assign new values to already declared variables b and c
    fmt.Println("changed b is",c)
}

上面的程序中,在 b,c := 40,50 这一行,虽然变量 b 在之前已经被声明了,但是 c 却是新声明的变量,因此这是合法的。该程序的输出为:

a is 20 b is 30  
b is 40 c is 50  
changed b is 80 c is 90

但是当我们运行下面的程序:

package main

import "fmt"

func main() {  
    a, 30 //a and b declared
    fmt.Println("a is",b)
    a,b := 40, 50 //error,no new variables
}

将会报错:8: no new variables on left side of := 。这是因为变量 a 和变量 b 都是已经声明过的变量,在 := 左侧并没有新的变量被声明。

译者注:速记声明只能用在函数中。

变量可以被赋予运行时产生的值。考虑下面的程序

package main

import (  
    "fmt"
    "math"
)

func main() {  
    a,b := 145.8, 543.8
    c := math.Min(a,b)
    fmt.Println("minimum value is ",c)
}

在上面的程序中, c 的值为 ab 的最小值,该值是在运行时计算的。

一个变量不能被赋予与其类型不同的值。下面的程序将报错:cannot use "naveen" (type string) as type int in assignment。这是因为 age 被声明为 int 类型,但是我们试图将 string 类型的值赋给它。

package main

func main() {  
    age := 29      // age is int
    age = "naveen" // error since we are trying to assign a string to a variable of type int
}

感谢阅读。下一篇教程 Golang教程:(四)类型 将介绍 Golang 中的类型。


目录
上一篇Golang教程:(二)Hello World
下一篇Golang教程:(四)类型

原文链接:https://www.f2er.com/go/188243.html

猜你在找的Go相关文章