-
我们声明的变量是一个易于阅读的名字,用来表示这段内存。实际上,编译后的机器码不使用变量名,而是直接通过内存地址来访问目标数据。
-
函数外声明变量,不能使用简短模式(
go a:=10
)。 -
简短模式并不总是重新定义变量,也可能部分退化成赋值操作,前提是最少有一个变量被定义,且必须是同一作用域。在处理函数返回值时,退化赋值允许我们重复使用err变量
-
go有个名"_"的特殊成员,通常作为忽略占位符使用
-
定义常量时,在常量组如不指定类型和初始值,则与上一行非空常量右值(表达式文本)相同
func main() {
const (
x uint16 = 120
y
s = "abc"
z
)
fmt.Printf("%T,%v\n", y, y)//uint16,120
fmt.Printf("%T,%v\n", z, z)//sting,abc
}
- go没有明确意义上的eumn定义,可借助iota标识实现一组自增常量值来实现枚举类型
const (
x = iota //0
y //1
z //2
)
const (
_ = iota //0
KB = 1 << (10 * iota) // 1 << (10 * 1)
MB // 1 << (10 * 2)
GB // 1 << (10 * 3)
)
println(x, y, z, KB, MB, GB)
- 常量通常会被编译器在预处理阶段直接展开,最为指令数据使用,所以不能取常量的内存地址(会报错:cannot take the address of 变量)
-基本类型
-
别名
byte alias for uint8
rune alias for int32 -
引用类型
- 引用类型特指slice/map/channel
-
new和make却别
new 为指针分配空间,并且返回值为指针类型(分配0值空间)
make为chan/slice/map 这三种类型分配空间并初始化值Go语言中的 new 和 make 主要区别如下:
make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
new 分配的空间被清零。make 分配空间后,会进行初始化;