1.1 名称
Go中函数,变量,常量,类型,语句标签和包的名称遵循一个简单的命名规则:名称的开头是一个字母或下划线,并且区分大小写
注:实体的第一个字母的大小写决定了其可见性是否可以跨包。如果名字是大写字母的开头,它是导出的,意味着它对包外可见和可访问的,可以被包外的其他程序所引用(拷贝),像 fmt 包中的 Printf.包名总是由小写字母组成。
1.2 声明
声明给一个实体命名,并且设定其全部属性。
有四个主要的声明:变量(var),常量(const),类型(type)和函数(type)。
1.3 变量
短变量声明
var flo int = 100
flo := 100
上面这两个式子等价多个变量可以以短变量声明的方式声明和初始化
i, j := 0, 1
i, j := os.Open(name) //os.Open()函数有两个返回值短变量至少要声明一个一个新变量,否则,代码无法编译通过
f, err := os.Open(infile) //编译通过
f, err := os.Create(outfile) //编译错误,没有新变量
指针
指针的值是变量的地址。不是所有的值都有指针,但是所有的变量都有指针。
注:Go语言中的指针,指针本身不可作计算,不能使用 ++,– 等操作
new 函数
一种创建变量的方式就是使用内置的 new 函数。
new(T) 创建一个未知名的 T 类型变量,初始化为 T 类型的零值,并返回其地址(地址类型为 *T)
变量的生命周期
生命周期是指在程序执行过程中变量存在的时间段。
编译器可以选择使用堆或栈的空间来分配内存,但是这个选择不是基于使用的 var,new 关键字来声明变量。
var global *int
func f(){
var x int
x = 1
global = &x //这里,x 一定使用的是 堆 上的空间,因为他的 f()函数返回后,还可以从 global 变量访问,尽管他被声明成一个局部变量
}
1.4 赋值
多重赋值
x, y = y, x
a[i], a[j] = a[j],a[i]
i, j, k = 1, 2, 3
函数有多个返回值也可以
f, err = os.Open(“foo.txt”) //函数调用返回两个值
_, err = os Open(“foo.txt”) //可以丢弃第一个返回值,接收第二个返回值