转载请注明出处:https://blog.csdn.net/sublio/article/details/106478300
全系列目录:https://blog.csdn.net/sublio/article/details/106480267
高级类型
目录
数组
-
长度不可变。
-
[...]int{1,2,3}不用指定长度,为3。
切片
-
内部结构三个元素:指向底层数组某个元素的指针;切片的长度;切片的容量。
-
容量cap:从指针指向的元素到底层最后一个元素的元素个数。
-
当底层数组不足以完成append的操作,会换一个更长的底层数组(一开始两倍长度?)。
-
零值为nil,长度为0,可以直接append操作。
map
-
散列表,关联数组。
-
零值为nil,长度为0,不可以进行取值等操作。
函数
-
指针类型和非指针类型旗下的函数都属于指针类型;指针类型旗下的函数不属于非指针类型(但是能调用)。
-
指针类型(包含引用)旗下的函数能改变原值(不管是指针类型调用还是非指针类型调用);非指针类型旗下的函数不能改变原值(不管是指针类型调用还是非指针类型调用)。
-
函数返回参数要么全起名,要么全不起名。
接口(interface)
-
一种类型对接口的实现和其指针对对接口的实现是分开的,因此上述函数的第1.点就很重要。
-
一个接口可以嵌入另一个接口。
结构体
-
结构体类型不是引用类型,是值类型
-
引用类型的零值是nil,结构体是A{}
-
结构体字面量要么全忽略(按顺序),要么全不忽略
-
嵌入字段:无名称,用来额外集成字段和方法
-
空结构体类型struct{}的变量不占用内存变量,且该类型的所有变量都拥有相同的内存地址,建议用于传递信号(比如在goroutine中使用channel),除非需要传递更多的信息
参考文档
《Go并发编程实战(第2版)》——郝林