Go语言(二):程序结构(变量)

一、开始

var声明语句可以创建一个特定类型的变量, 然后给变量附加一个名字, 并且设置变量的初始值。 变量声明的一般语法如下:
                                                                  var 变量名字 类型 = 表达式                  (定义的名字和类型刚好与C/C++相反)

解释:

         其中“类型”或“= 表达式”两个部分可以省略其中的一个。 如果省略的是类型信息, 那么将根据初始化表达式来推导变量的类型信息。 如果初始化表达式被省略, 那么将用零值初始化该变量。 数值类型变量对应的零值是0, 布尔类型变量对应的零值是false, 字符串类型对应的零值是空字符串, 接口或引用类型( 包括slice、 map、 chan和函数) 变量对应的零值是nil。 数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。
  1、零值初始化机制可以确保每个声明的变量总是有一个良好定义的值, 因此在Go语言中不存在未初始化的变量。
如:

var str string
fmt.Printf("str : %v\n", str)

         这段代码将打印一个空字符串, 而不是导致错误或产生不可预知的行为。

2、也可以在一个声明语句中同时声明一组变量, 或用一组初始化表达式声明并初始化一组变量。 如果省略每个变量的类型, 将可以声明多个类型不同的变量( 类型由初始化表达式推导):

如:

var i, j, k int // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string

3、初始化表达式可以是字面量或任意的表达式。 在包级别声明的变量会在main入口函数执行前完成初始化, 局部变量将在声明语句被执行到的时候完成初始化。一组变量也可以通过调用一个函数, 由函数返回的多个返回值初始化:

如:

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

二、简短变量声明(项目中经常使用---简洁)

1、函数内部,简短变量声明语句可用于声明和初始化局部变量,以“名字 := 表达式”形式声明变量, 变量的类型根据表达式来自动推导。
如:

anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
t := 0.0

应用场景:简短变量声明被广泛用于大部分的局部变量的声明和初始化。 var形式的声明语句往往是用于需要显式指定变量类型地方, 或者因为变量稍后会被重新赋值而初始值无关紧要的地方。

如:

i := 100 // an int
var boiling float64 = 100 // a float64
var names []string
var err error
var p Point

和var形式声明语句一样, 简短变量声明语句也可以用来声明和初始化一组变量:

如:

i, j := 0, 1

 

2、一定要记住“ := ”是一个变量声明语句, 而“ = ‘是一个变量赋值操作。 也不要混淆多个变量的声明和元组的多重赋值, 后者是将右边各个的表达式值赋值给左边对应位置的各个变量:

如:

i, j = j, i // 交换 i 和 j 的值

和普通var形式的变量声明语句一样, 简短变量声明语句也可以用函数的返回值来声明和初始化变量, 像下面的os.Open函数调用将返回两个值:
如:

f, err := os.Open(name)
if err != nil {
    return err
} 
// ...use f...
f.Close()

3、简短变量声明左边的变量可能并不是全部都是刚刚声明的。 如果有一些已经在相同的词法域声明过了( §2.7) , 那么简短变量声明语句对这些已经声明过的变量就只有赋值行为了。

如:

in, err := os.Open(infile)
// ...
out, err := os.Create(outfile)

解释:

        在上面的代码中, 第一个语句声明了in和err两个变量。 在第二个语句只声明了out一个变量,然后对已经声明的err进行了赋值操作。
4、简短变量声明语句中必须至少要声明一个新的变量, 下面的代码将不能编译通过:

a, err := os.Open("infile")
// ...
a, err := os.Create("outfile") // compile error: no new variables

报错为:

go语言aes256ecb实现 go语言 2.0_go语言aes256ecb实现

处理方式:是第二个简短变量声明语句改用普通的多重赋值语言。

解决后代码:

a, err := os.Open("infile")

a, err = os.Create("outfile")