Go中的变量 | 青训营

84 阅读2分钟

变量

变量声明

  1. 用var声明定义变量以及它的类型和初值:var name type = expression
  2. 类型或者= expression部分可以省略,但不能两者同时省略。
  3. 如果类型省略,则编译器根据expression推断类型。
  4. 如果省略= expression,则该变量初始为0值:
  • 数字初始为0
  • 布尔值初始为false
  • 字符串初始为空
  • 接口和引用初始为nil
  • 数组和结构体将其中的元素或字段初始为0值
  1. 一次声明多个变量:

var i, j, k int // int, int, int

var b, f, s = true, 2.3, "four" // bool float64 strin

  1. 多个变量声明为函数的返回值:

var f, err = os.Open(name) // os.Open returns a file and an error

  1. 如果声明了一个变量,却没有使用它,则会报错。

简短的变量声明

  1. 在函数里可以使用简短的变量声明:name := expression,name的类型根据expression推断。
  2. 初始化多个变量:i, j := 0, 1
  3. 多个变量声明为函数返回值:

f, err := os.Open(name)

  1. 多变量声明时不必所有变量都是新创建的变量,但必须至少有一个是新创建的变量。多变量声明中已经创建过的变量视为赋值:

// 假设in,err和out都没有被声明过

in, err := os.Open(infile) // ok, 声明in和err

//...

out, err := os.Create(outfile) // ok, 声明out,给err赋值

// 假设f,err没有被声明过

f, err := os.Open(infile)

//...

f, err := os.Create(outfile) // 编译错误,没有新变量被创建

变量赋值

  1. 赋值运算符:=
  2. 任何算数运算符或者位运算符后面接=则组成复合赋值运算符,例如:+=,*=
  3. 数值变量可以使用自增和自减运算符是自身的值加1或减1。没有前置自增。

v := 1

v++ // same as v = v + 1; v becomes 2

v-- // same as v = v - 1; v becomes 1 again

多重赋值

  1. 多重赋值允许一次赋值多个变量:

i, j, k = 2, 3, 5

x, y = y, x // 交换两个变量的值

  1. 若函数或操作符返回多个值,则在赋值左侧必须用多个变量,个数必须与返回值的个数一致:

f, err = os.Open("foo.txt") // function call return two values

  1. 如果不想用多个函数返回值中的某个或某几个,则可以用_代替:

_, err = io.Copy(dst, src)

隐式赋值

  1. 隐式赋值发生在函数参数传递,函数返回值等情况。