以上三种用法的结果是完全一样的。与第一种用法相比,第三种用法必要输入的字符数大大减少,是懒程序员和智慧程序员的最佳选择。这里 Go 语言也引入了另一个 C 和 C++ 中没有的符号(冒号和等号的组合:=),用于明白表达同时举行变量声明和初始化的工作。
指定范例已不再是必需的,Go 编译器可以从初始化表达式的右值推导出该变量应该声明为哪种范例,这让 Go 语言看起来有点像动态范例语言,尽管 Go 语言实际上是不折不扣的强范例语言。
固然,出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误,好比下面这个写法:
var i int
i := 2
复制代码
会导致类似如下的编译错误:
no new variables on left side of :=
复制代码
变量赋值:
在 Go 语法中,变量初始化和变量赋值是两个不同的概念。下面为声明一个变量之后的赋值过程:
var v10 int //声明
v10 = 123 //赋值 没有使用,没有引用
复制代码
Go 语言的变量赋值与多数语言一致,但 Go 语言中提供了 C/C++ 程序员期盼多年的多重赋值功能,好比下面这个互换i和j变量的语句:
i, j = j, i
复制代码
C 语言中:在不支持多重赋值的语言中,交互两个变量的内容必要引入一个中心变量:
t = i; i = j; j = t;
复制代码
多重赋值的特性在 Go 语言库的实现中也被使用得相当充分,在介绍函数的多重返回值时,将对其举行更加深入的介绍。总而言之,多重赋值功能让 Go 语言与 C/C++ 语言相比可以非常明显地减少代码行数。
匿名变量:
我们在使用传统的强范例语言编程时,经常会出现这种情况,即在调用函数时为了获取一个值,却因为该函数返回多个值而不得不界说一堆没用的变量。在 Go 中这种情况可以通过联合使用多重返回和匿名变量来克制这种丑陋的写法,让代码看起来更加优雅。
假设GetName()函数的界说如下,它返回 3 个值,分别为firstName、lastName和nickName: