这是我参与「第五届青训营 」笔记创作活动的第4天.
前言
本文是参照:go.nsddd.top/ 进行go语言学习的学习笔记。
数组
关于数组,go与以前所学的c++有所不同。 首先在go中数组本身是属于值传递的,要是想修改数组的值,那么需要使用指针,如:
func test(arr *[3]int){
(*arr)[0] = 88 //注意,此时先取值,然后再取地址
}
func main(){
arr := [3]int{11,22,33}
test(&arr) //传递数组 ,, 此时需要使用取地址符
fmt.Println("main arr = ",arr)
}
其次,在go中,长度也是数组类型的一部分,因此不能像c++一样在函数中采用默认参数,而要指定确定的值且保证值统一。
slice切片
事实上,切片是数组的一个引用,那么切片是一个引用类型,这和数组是不一样的,函数中改变的会改变其值。如果只需要复制对应的值,请采用copy()
创建切片的方式
方式一 定义一个切片,然后让切片去引用一个已经创建的数组。
var intArr [5]int = [...]int{11,22,33,44,55} //数组
slice := intArr[1:3]
方式二 通过func make来创建一个切片
var slicename []type = make([],len,[cap])
//也可以简写为
slicename := make([]type, len)
数组内置函数
len()和cap()
len()为计算当前数组长度,而cap()则计算切片的总容量。
append()和copy()
如果需要扩充切片的容量,则需要用到append()。需要注意的是,使用append()时,Go顶层会创建一个新的数组newArr安装扩容后的大小,而这个newArr是在底层维护的,程序员不可见。
var slice []int = []int{100,200,300}
slice3 = append(slice,400,500)
/*slice4则是一个新的空间,slice3被回收,如果是slice3,则在原来的空间扩容*/
fmt.Println("slice",slice)
map集合
简介
Map 是一种无序的键值对的集合。
Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。类似于python中的字典 ——key - value数据结构。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。
定义map
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
map声明是不会分配内存的,初始化需要make,分配内存后才可赋值与使用
增删查改
增改
由于key是唯一的,所以可以直接修改和增加
key_1["a"] = "北京" //增加
key_1["a"] = "上海" //修改
删
使用delete函数
val,ok := key_1["a"]
if ok{
fmt.Printf("有a的值为%v\n",val)
}else{
fmt,Printf("没有a这个数")
}
查
delete(key_1,"a") //删除
双重遍历
//使用for-range遍历一个结构比较复杂的map
studentMap :=make(map[string]map[string]string)
studentMap[ "stuo1"]= make(map[string]string3)
studentMap["stu01"]["name"] ="tom"
studentMap["stuo1"]["sex"] ="男"
studentMap["stue1"]["address"]=“北京长安街~”
studentMap[ "stuo2"] = make(map[string]string, 3)//这句话不能少!!
studentMap[ "stuo2"]["name"] = "mary"
studentMap[ "stuo2"]["sex"]=“女"
studentMap["stue2"]["address"] =“上海黄浦江~”
for k1, v1 := range studentMap {
fmt.Println("k1=", k1)
for k2, v2 := range v1{
fmt.Printf("It k2=%v v2=%vln", k2,v2)
}
fmt.Println()
}
测试结果:
引用
- 数组和slice切片&遍历
go.nsddd.top/markdown/7.… - map集合 go.nsddd.top/markdown/9.…