6.20 GO学习记录

86 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,

点击查看活动详情

本文是6.20的GO学习记录 主要内容为关于切片 map 结构体 函数 指针的基础语法

切片

数组和切片的区别:

数组的长度固定不能修改 [ ]里是一个定值

切片的长度和容量可以不固定 [ ]里为空或者…

 

切片对数组的引用

1.png

例如数组 array :=[...]int[10,20,30,40,50]

切片slice :=array[0:3:5]

切片引用了array,起点是array[0],终点是array3 最大范围对应值为array[5] 长度为3-0 容量为5-0

  2.png

切片的创建

1.     自动推导类型 同时初始化 这种创建 长度和容量一致

s1 :=[ ]int {1,2,3,4}

fmt.Println(“s1 “,s1)

2.     借助make函数 格式:s :=make([ ]切片类型,切片长度,切片容量)

S2 :=make([ ]int, 3,5)

注意:若没有指定容量,则容量和长度一致 s :=make([ ]切片类型,切片长度)

切片截取

注意:Println自带换行功能

3.png  

切片和底层数组的关系:对切片的1操作会影响底层数组 在切片中改变值,底层数组中对应位置的值会相应改变

 

append函数

作用:每使用一次,在原切片的末尾新增一个元素 并返回操作后的切片 可扩大切片的长度和容量

使用格式:s=append(s,1)//在切片s末尾新增元素1

1)未超过容量

4.png

 结果如下:长度扩充了 由于未超过容量 故容量不扩充

6.png 2)超过切片容量

5.png 结果如下:超过容量将双倍扩充容量(当然长度也扩充了)

注意:GO对于大括号的格式也有要求 前半个大括号必须和条件在同一行 而不能另起一行 否则会报错

  7.png

copy函数

作用:把一个切片的内容对应复制更新到另一个切片中 最终会返回目的切片

操作格式:copy(b,a)//b:目的切片 a:源切片

8.png 切片做函数参数:不会像数组一样 他只是一个引用传递

 

map( 映射,字典)

一种内置的数据结构 无序的key-value对应集合 如身份证用于唯一表示一个人

map的格式 map[keyType]valueType

注意:

1.所有的键值都是唯一的

2.keyType必须支持==和!= 故不支持函数,切片等作为map的键类型

3.keyType 和valueType可以不同,但键和值的类型要分别相同

4.map是无序的,故每次打印的顺序可能不同 但一一对应的一组映射是相同的

 

1)    map的创建

在创建过程中,若随着赋值长度超过了预先设定值会自动扩充 就如append

1.1创建方法

a.通过创建变量

9.png b.通过make函数创建

  10.png

  11.png

12.png 打印结果为:

13.png  

map 赋值

14.png 先创建一个map 然后逐个赋值:

15.png map 遍历并判断某个key值是否存在

16.png

详说一下如何判断:

value,ok :=m[2]//2为想要判断的key值 value为关键字对应的值,ok为想要判断的key值是否存在的条件 若存在则为true,不存在即为false 如果为true对应的m[ ]中的数字为想要判断的key值

从map中删除某个key

m:=map[int]string{1:”mike”,2:”yoyo”,3:”lala”}

delete(m,1)//把关键字1删除

 

map 做函数参数(引用传递)

func test(m map[int]string){

delete(m,1)

}

//被调用的函数要定义在调用函数的前面

func main(){

m:=map[int]string{1:”mike”,2:”yoyo”,3:”lala”}

test(m)

}

range 语言范围 (客队数组和slice快速遍历)

对于数组,返回的是索引index(下标)和数组对应位置的值

若不需要索引 可在for循环那儿用下划线代替i

17.png 将输出 0 2 \n(换行 写不下了) 9

对于map(上面有提及)

先创建并初始化一个map

18.png

函数:

需要注意的是go语言中,变量类型要后置

返回值通常有多个:真正的返回值,是否存在(0/1)

有些功能不需要返回值 故返回值不是必须的

函数定义格式:

func 函数名(参数列表)(返回值列表) {

函数体

}

例如:func swap(x, y string) (string,string){

return y,x

}

指针

取址符为&

地址用16进制数表示 输出为%x

var ip *int

ip=&a

指针变量通常缩写为ptr 空指针:ptr==nil