go_tutorial_3

变量是为存储特定类型的值的内存位置指定的名称。在 go 中声明变量有各种语法。

声明一个变量

比如声明一个 name 的变量

1
2
3
4
5
6
7
8
package main

import fmt

func main() {
  var name int
  fmt.Println("My age is", name)
}

该语句 var age int 声明了一个变量类型为 int 的变量。我们没有为变量分配任何值。一般情况下没有为变量赋值,那么改变量的初始值默认为0。运行上面程序会输出如下结果。

1
My ago is 0

当然实际应用中也可以给变量赋其他类型的值,就上面的例子而言, 我们可以给变量 name 赋予任何整数值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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)
}

声明具有初始值的变量

变量在声明的时候也可以赋予初始值,基本语法是 var name type = initialvalue

1
2
3
4
5
6
7
8
9
package main

import "fmt"

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

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

类型推断

如果变量在声明的时候已经赋予了初始值,Go 将自动根据该初始值推断该变量的类型。因此,如果变量具有初始值,则可以*省略*变量声明中的类型。基本语法是 var name = initialvalue

1
2
3
4
5
6
7
8
9
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

1
2
3
4
5
6
7
8
9
package main

import fmt

func main() {
  var width,height = 100, 200, //declaring multiple variables, "int" is dropped

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

在某些情况下,我们可能希望在单个语句中声明属于不同类型的变量。基本语法如下

1
2
3
4
var (  
      name1 = initialvalue1,
      name2 = initialvalue2
)

再看看下面的例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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)
    // output my name is naveen, age is 29 and height is 0
}

简短的声明

Go还提供了另一种简洁的方式来声明变量。这称为简写声明,它使用 := 运算符。基本语法是 name:= initialvalue

1
2
3
4
5
6
7
8
9
package main

import "fmt"

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

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

由于 Go 是强类型的,因此声明属于一种类型的变量不能分配另一种类型的值。以下程序将抛出一个错误,cannot use "naveen" (type string) as type int in assignment 因为 age 被声明为 int 类型,不能赋予其他类型的值。

1
2
3
4
5
6
package main

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