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 协议 ,转载请注明出处!