Go语言中数组、切片、Map知识点分享

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fmt.Println("map1 的第%d 位的值是%d",i,v)
} 4)map 切片的使用 var slice []map[int]string //定义 map 切片 1 5)map 是引用类型,采用引用传递
bool: 占用 1byte 内存分析图:
如上图所示,定义了一个 int32 的整形数组(int64 的所占字节大小是 8 个字节),可以由图看出 intArr[0]的地址是 0XC04204A0A0(第一个 元素的地址也是数组的地址),所以第二个元素的地址是首地址+8(字 节大小,以 16 进制运算),所以第二个元素的地址是 0XC04204A0A8, 同理可以推出后面元素的地址。 4、数组的注意事项 1)类型:值类型,只能进行值拷贝,如果想在其他函数中改变数组, 需要使用引用传递(指针) 2)Go 语言中数组具有默认值,int 类型是 0,string 是"",Bool 是 false 二、切片 1、定义:var 切片名字 [] 切片类型 eg:var slice []int 定义一个整型 切片 2、类型:切片是引用类型,所以切片是引用传递
Go 语言中数组、切片、Map 知识点分享
数组、切片、Map 知识点分享 一、数组 1、定义: var 数组名 [数组大小] 数组类型 eg:var arr [11]int (定于 一个名字为 arr 的整型数组大小为 11) 2、赋值:以 arr 为例,arr[0]=1; 3、数组的内存布局 &arr 可以获得 arr 的数组地址,数组中第一个元素的地址就是数组的 地址,之后的数组地址根据数组的类型决定,比如假如是 int32 类型 数组,第二个元素地址递增 4 个字节。 顺便说一下类型所占字节数(参考 https:///lucky404/article/details/103717224) int8: 8 位,就是一个字节 int16: 2 个字节 int32: 4 个字节 int64:8 个字节) float32: 4 个字节 float64: 8 个字节 string 英文的 ascii 的 string 1 个英文字符或英文标点占 1byte 中文的 string 一个文字占用 3 byte
添加原理: 使用 Append 添加切片时,会新建一个 Arr 切片(满足扩容后的大小 条件),然后在重新把 slice 拷贝到 Arr,然后再引用到 slice 中,完成 切片扩容。 5)copy(slice1,slice2)将 slice2 拷贝给 slice1,修改 slice1 的值不影响 slice2 6)string 自身就是一个 byte 切片; 三、Map 1、定义 :var 变量名 map [keytype] valuetype eg:var mapTest map[int] string 上述定义了一个 key 为 int 类型,value 为 string 类型 的 map; 2、注意事项: 1)Slice,Map,Function 不能作为 key 来使用; 2)map 的声明不能分配内存,分配内存后才能进行使用; 内存分配示例: var map1 map[int] string map1=make(map1[int]string,4) //给 map1 分配空间 //第二种方式定义 map1:=make(map1[int]string,4) 3)map 的增删改查 增加,修改: map["key"]=&当 key 值存在就修改 1 2 删除: delete(map,"key") //删除 map 中的 key 键值的 value 信息 1 查询: val,ok:=map["查询的键值对"] if ok{
fmt.Println(val) }else{
fmt.Println("没有键值对的 key 值") } 遍历: var map1 map[int]int map1=make(map1[int]int,4) map1[0]=0 map1[1]=1 map1[2]=2 map1[3]=3 for i,v :=range map1{
如图所示,切片本质上是一个 Struct 结构体,第一个元素储存地址,第 二个储存长度,第三个储存容量 type slice struct {
ptr *[2]int len int cap int } 3、切片的使用 1)由于切片是引用类型,需要自己分配内存,所以需要 make 来创 建切片; var 切片名 [] 切片类型 =make([]切片类型,len,cap) //如果分配了 cap 一定比 len 大 var slice []int=make ([]int,4,5) //定义一个切片并且分配内存 2)使用数组直接赋值时候,var slice =arr[startIndex,endIndex]不包含 endIndex; 3)切片可以继续切片,eg:slice:=slice[1:3]; 4) Append 函数 使用方法:slice=append(slice,添加元素)
相关文档
最新文档