1.变量的简介
声明变量的一般形式是使用 var 关键字:var identifier type
可以写成
var (
a int
b bool
str string
)
Go 编译器的智商已经高到可以根据变量的值来自动推断其类型,
var a = 15
var b = false
var str = "Go says hello to the world!"
var (
a = 15
b = false
str = "Go says hello to the world!"
numShips = 50
city string
)
在函数体内声明局部变量时,应使用简短声明语法 :=a := 1
同一类型的多个变量可以声明在同一行
var a, b, c int
多变量可以在同一行进行赋值,如:
a, b, c = 5, 7, "abc"
上面这行假设了变量 a,b 和 c 都已经被声明,否则的话应该这样使用:
a, b, c := 5, 7, "abc"
这被称为 并行 或 同时 赋值
交换两个变量的值,则可以简单地使用 a, b = b, a
空白标识符 也被用于抛弃值,如值 5 在:, b = 5, 7 中被抛弃。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
并行赋值也被用于当一个函数返回多个返回值时,比如这里的 val 和错误 err 是通过调用 Func1 函数同时得到:val, err = Func1(var1)。
2.值类型与引用类型
所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,另外,像数组和结构这些复合类型也是值类型
更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。
一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
Go 语言中,指针属于引用类型,其它的引用类型还包括 slices,maps和 channel。被引用的变量会存储在堆中,以便进行垃圾回收,且比栈拥有更大的内存空间。
3.init函数
变量除了可以在全局声明中初始化,也可以在 init 函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。
每一个源文件都可以包含一个或多个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。
一个可能的用途是在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性。
4.遇到的bug
cannot find package “.” in