文章《A Tour of Go》是官方文档,地址是https://tour.golang.org/welcome/1。
该文档在官方《Go Documentation》系列文档中的位置如图所示。
Go Documentation
以下是我的学习笔记的第二部分。
More types: structs, slices, and maps
- Go有指针,零值是
nil,有&和*操作符,但没有指针算术 -
struct是一些字段/属性(field集合,语法以type开头:type Vertex struct -
struct的field用点号(.)访问 - 通过指针访问也只需使用点号(
.),不用加星号(*),p.X即可 -
struct的属性可以用Name:语法初始化,顺序无关紧要,不关心的属性也可以缺省 - 数组的长度是数组结构的一部分,因此数组不能被
resize;数组可以直接输出; - 切片
slice是动态大小的,可以从数组创建(前闭后开区间) -
slice不存储数据,只是指向了底层数据的某个区间,因此一个切片更改后,真实数据会被更改,其他指向同一数组区间的slice就可能看到改动 - 字面常量切片先构建一个数组,然后指向它构建切片(可能需要去看内存模型The Go Memory Model);现场定义的
struct切片初始化 -
slice的起始和结束位置都是可以省略的,默认值是数据的开始位置(0)和结束位置(length) -
slice有长度(length)和容量(capacity),length是切片拥有的元素个数,capacity是从切片开始位置到数据结束位置的元素个数,可以分别用len(s)和cap(s)获得 -
slice的零值是nil,nil slice长度为0,容量为0,没有实质分配内存 -
slice可以用make创建,可以指定length和capacity -
slice可以指向任何类型,包括slice -
append添加元素,如果超长了,会重新分配内存,并指向新的地址(略坑😱啊),详细参考Go Slices: usage and internals -
range返回位置和元素的副本(copy),用在for循环里遍历slice或者map - 使用下划线扔掉不关心的变量,比如循环中
range返回的index或者value - 关于
slice的一个小练习
slice练习代码
生成的图像如下:
slice练习输出图像
-
map的零值是nil,一个nil的map没有key,也不能添加;可以用make函数构造一个map,它会被初始化并可用 -
map literals(官方翻译是map文法)跟struct类似,不过需要有键值 - 顶级类型只有类型名时,可以省略
未完待续。








网友评论