声明方式
var name type
和C/C++中
type name;
extern type name;
在go语言中所有形式变量名称都在类型的前面,这点和C/C++是反过来的。注意如果局部变量C/C++会是一个随机值,而go语言会初始化为0
定义方式
var n int = 10
n := 10
这两行是等价的。第一行指定了n为int型并赋值为10。第二行用了:=表示定义一个新的变量n,并根据右边的表达式自动推定n的类型并赋值。注意 := 在这里只能定义一个新的变量,如果n之前被定义过,那么就会报错。
和C++ 11中
int n = 10;
auto n = 10;
相对应。
另外go语言支持多了不同类型的变量同时定义或赋值如下
str, n, f := "ok", 10, 11.10
str, n = "no", 20
编译器会依次对变量进行定义或赋值。注意第一行的写法中三个变量中必须有一个在此之前没有被定义过。
go语言是有package的概念,有点类似C++的namespace。不同的是,go语言的包是强制的,C++的namespace并不是。所以直接的影响是全局变量。例如在go语言中
package test
var(
i int
I int
)
定义了两个全局变量小写的i和大写的I。之所以这么做的原因是在go语言中所有大写字母开头的都可以被其他的包访问,但是小写字母开头的就认为是这个包内可见。所以在另一个包中只能访问到I但是无法访问到i。访问方式是test.I。类似C/C++中
namesapce test
{
int i;
int I;
}
访问方式 test::i 和 test::I。但是这两个变量的有效范围是一致的。
未完待续。。。