转载请注明出处:https://blog.youkuaiyun.com/sublio/article/details/106478300
全系列目录:https://blog.youkuaiyun.com/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版)》——郝林

本文深入探讨了Go语言中的高级类型概念,包括数组、切片、map、函数、接口和结构体的特点与应用。详细解释了每种类型的基本属性,如数组的固定长度,切片的灵活扩容机制,以及结构体的零值初始化等,为开发者提供了全面的Go语言类型系统指南。
3768

被折叠的 条评论
为什么被折叠?



