GO语言学习-复杂类型(1)
phlong999 · · 2284 次点击 · · 开始浏览指针
GO的指针用法与C语言中指针用法类似,&用于取址, *用于取值。唯一区别:没有指针运算
结构体
例:
type struct_example struct {
a int
b int
}
结构体字段的访问与C语言相同,用点号来访问。
当用结构体指针来访问字段时,也使用点号来访问。
数组
定义方法: var a[666] int
使用方法与C类似,但GO中数组名是一个值,而C中数组名是一个指针。另外GO中数组长度不能改变。
如果长度写成 [...],GO编译器会根据定义的元素来推导长度
例: a := [...]int{1,2,3,4,5}
数组切片 slice
slice就像是一种动态数组,可以改变长度。
slice是对底层数组的抽象和控制,包含三种元数据。
1.指向数组的指针
2.slice的长度
3.slice的容量,即最大长度
定义方法例 a := [ ]int{1,2,3,4,5,6}
给定一个array或者其他slice,一个新的slice通过a[I:J]的方式创建。
这会创建一个新的slice,指向变量a,从序号I开始,结束在序号J之前,长度为J-I
例:
q := a[1:3] //即 q 为 { 2,3 }的slice
可以使用make函数来构造slice
例;
a := make([]int,2,5) //定义成功的slice的长度为2,容量为5.
slice的零值是nil
可以使用append函数向slice添加元素,使slice变长。slice会自动调整容量,即调整数组长度,如果追加的内容长度超过当前的容量时,slice会自动在分配一块足够大的内存。
可以使用range格式对slice进行迭代循环。(使用range时可以通过赋值给 _ 来忽略序号或值)
可以使用copy函数对两个slice进行复制。如果这两个slice长度不同时,会按照长度小slice中的元素个数进行复制。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
指针
GO的指针用法与C语言中指针用法类似,&用于取址, *用于取值。唯一区别:没有指针运算
结构体
例:
type struct_example struct {
a int
b int
}
结构体字段的访问与C语言相同,用点号来访问。
当用结构体指针来访问字段时,也使用点号来访问。
数组
定义方法: var a[666] int
使用方法与C类似,但GO中数组名是一个值,而C中数组名是一个指针。另外GO中数组长度不能改变。
如果长度写成 [...],GO编译器会根据定义的元素来推导长度
例: a := [...]int{1,2,3,4,5}
数组切片 slice
slice就像是一种动态数组,可以改变长度。
slice是对底层数组的抽象和控制,包含三种元数据。
1.指向数组的指针
2.slice的长度
3.slice的容量,即最大长度
定义方法例 a := [ ]int{1,2,3,4,5,6}
给定一个array或者其他slice,一个新的slice通过a[I:J]的方式创建。
这会创建一个新的slice,指向变量a,从序号I开始,结束在序号J之前,长度为J-I
例:
q := a[1:3] //即 q 为 { 2,3 }的slice
可以使用make函数来构造slice
例;
a := make([]int,2,5) //定义成功的slice的长度为2,容量为5.
slice的零值是nil
可以使用append函数向slice添加元素,使slice变长。slice会自动调整容量,即调整数组长度,如果追加的内容长度超过当前的容量时,slice会自动在分配一块足够大的内存。
可以使用range格式对slice进行迭代循环。(使用range时可以通过赋值给 _ 来忽略序号或值)
可以使用copy函数对两个slice进行复制。如果这两个slice长度不同时,会按照长度小slice中的元素个数进行复制。