知识点梳理
- 结构体可以使用
new
关键字对结构体进行实例化,得到的是结构体的地址。 - 结构体可使用
&
对结构体进行取地址操作相当于对该结构体类型进行了一次new
实例化操作。 - 没有初始化的结构体,其成员变量都是对应其类型的零值。
- 结构体的方法中值类型的接收者时,Go语言会在代码运行时将接收者的值复制一份。在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身。
- 结构体占用一块连续的内存。
-
Go语言中支持对结构体指针直接使用
.
来访问结构体的成员。 -
在定义一些临时数据结构等场景下还可以使用匿名结构体。
rune
和byte
类型就是int32、uint8类型别名- 自定义类型关键字
type
- go 值类型包括 : 所有
整型
,所有浮点型
,bool型
,string型
,数组
和struct类型
值类型的特点是变量直接存储值,内存通常在 栈(stack) 中分配 -
go 引用类型包括:
指针
,slice
,map
,chan
,interface
引用类型的特点,变量存储的是一个地址,这个地址对应的空间才真正存储的数据,内存分配通常在 堆(heap) 上分配,当没有任何变量引用这个地址的时候,该地址对应的数据空间会被GC回收 -
Go语言提倡面向接口编程。实现接口中的所有方法,就实现了这个接口。
-
切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。
-
要检查切片是否为空,请始终使用
len(s) == 0
来判断,而不应该使用s == nil
来判断。 -
切片之间是不能比较的,我们不能使用
==
操作符来判断两个切片是否含有全部相等元素。