Golang-Day2
基础语法
defer关键字
defer关键字类似于C#的final关键字,可用于在程序退出前进行操作
知识点一 defer的执行顺序
可以看到加入defer关键字后,defer的执行顺序类似于一个栈
所以执行顺序是fun3() -> func2()-> func1()
知识点二 defer和return的先后
执行结果:
return func called...
defer func called...
结论:return之后的语句先执行,defer之后的语句后执行
切片 slice
定长数组
- 数组的长度都是固定的
- 固定长度的数组在传参时,是严格匹配数组类型的
运行结果如下,说明只是值拷贝,并非能够修改其中的值
index = 0 value = 11
index = 1 value = 22
index = 2 value = 33
index = 3 value = 44
------
index = 0 value = 11
index = 1 value = 22
index = 2 value = 33
index = 3 value = 44
动态数组
// 数组类型--->动态数组
myArray type is []int
/*
Go语言中只存在值传递(值的副本,或者指针的副本),不存在引用传递(和C++不一样)
type slice struct {
array unsafe.Pointer // 这里的指针是第一个元素的指针
len int
cap int
}
之所以对slice的传递可以修改原slice数据,是因为使用了slice这个引用类型的指针进行的传递,但依旧是值传递
*/
value = 1
value = 2
value = 3
value = 4
======
value = 100 <-----
value = 2
value = 3
value = 4
声明方式
使用方式
切片容量的追加
需要注意的点
slice里的len表示的是数组空间里存在有效值的数组长度,cap表示这个数组空间的大小
slice如果调用append后需要扩容,会重新开辟一块内存分配给新的切片,而不是在原来的基础上扩容
扩容时如果原容量小于1000,新的切片大小是原来的两倍 ,否则是原来的1.25倍
切片的截取
map
map的三种声明方式
map的使用方式
结构体
第二天就先学习到Go基础语法特性,第三题继续面向对象特征
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!