快速了解GO语言7 - 复合类型
系统操作函数
- 对数组,切片,集合均有效
- len : 真实长度
- cap : 最大长度
- range : 用于for遍历
Array 数组
概念
数组操作
创建
var 数组名称 [数组长度] 数组类型 = {值1,值2}
使用
多维数组
var 数组名称 [数组长度][数组长度] 数据类型 ={{数组1值1,数组1值2},{数组2值1,数组2值2}}
slice 切片
概念
- 切片是指向一个底层数组地址从而实现的无固定长度的数据类型,当其获得超出原有长度的扩容则抛弃原有地址,创建一个新的底层数组并指向其地址。
- 无定长
- 引用类型
切片操作
创建
//第一种方式
var 切片名称 [] 数据类型
//第二种方式
var 切片名称 = [] in {值1,值2}
//第三种方式:推荐
var 切片名称 = make([]int,已存储数据长度,最大存储量) //超过容量也不会溢出,会自动扩容
向切片后添加新的值
切片名称 = append(切片名称,值1,值2……);
将切片指向目标数组地址
//已有数组
a := [10] int {1,2,3,4,5,6,7,8,9,10}
//以下方法均可将数组赋值给切片
s1 := a[:5] //将从数组从第一位截取到第5位赋值给切片s1,即1~5
s2 := a[3:7] //将从数组从索引3截取到索引7(不包含末尾的下标)赋值给切片s2,即3~7
s3 := a[8:] //将从数组从索引8截取到最后赋值给切片s3,即9~10
s4 := a[:] //将数组全赋值给切片s4,即1~10
- 备注
- 这个操作非常危险,它并非赋值操作,实际上是将其地址的一部分范围或全部范围赋值给了切片,一旦任意一方发生改变,则对应位置上的另一方也会发生改变。
向切片中拷贝值
copy(目标切片,拷贝对象);
map 集合
概念
- 以键值对的形式存储数据。
- 是无序的,不能通过下标获得数据。
- 无定长
- 引用类型
操作集合
创建
//方法1:会创建一个nil的集合,不能直接使用。
var 集合名 map [键类型]值类型
//方法2
var 集合名 = make(map[键类型]值类型)
//方法3
var 集合名 = map[键类型]值类型{键1:值1,键2:值2……}
使用
变量1,变量2 := 集合名[键名] //变量1会获得键对应的值,变量2会得到该键是否存在的信息
删除键值
delete(集合名[键名])
结构体 Struct
概念
- 结构体实际上就是声明一个数据块的复合结构,是一系列具有相同或不同类型数据构成的集合。
- 结构体的成员是由变量组成的,这些变量被称为字段,字段拥有自己的数据类型和数值,而且字段的名字必须是唯一的。
- 类似其他语言的“类”,但是没有继承等相关方法。
操作结构体
创建
type 结构体名称 struct{
数据名称 类型
}
使用
//第一种方法
var a = 结构体名称{与结构体内一致的赋值}; //如果没有赋值,就使用结构体内部默认赋值
a.数据名称