Go - var & make & new 在复杂类型上的使用区别
Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。
这里主要讲解 var & make & new 在声明变量关于 array、slice、map、struct 这些类型上的区别。
预备知识
var 声明变量
var 变量名字 类型 = 表达式
,如果省略了表达式
,就使用类型的零值初始化变量
make 和 new 的知识
可以查看 GoDoc - builtin 的相关内容
- new
func new(Type) *Type
- 创建一个 Type 类型的匿名变量,初始为 Type 类型的零值,返回变量地址,返回的指针类型为
*Type
- make
func make(t Type, size ...IntegerType) Type
- 分配并初始化一个类型为 slice 、map 、或 channel 的对象,返回类型与 Type 相同,而非指向它的指针
零值
- array、struct,每个元素或字段都是对应该类型的零值
- slice、map,对于零值 nil
使用区别
array
数组是值类型,数组变量代表的就是值
1 | var a1 [3]int // 使用 int 零值初始化 a1,a1 就是 [3]int 类型 |
slice
切片是引用类型,slice 变量是指针
1 | var s1 []int // 使用 slice 零值就是 nil 初始化 s1 |
map
map 是引用类型
1 | var m1 map[string]int // 初始化为 map 的零值,nil |
struct
struct 是值类型,零值是各个成员的零值
struct 通常使用指针操作
1 | type Point struct { |
总结
通过代码验证,直观。
原文作者: dryyun
原文链接: https://dryyun.com/2019/05/30/go-new-make-use/
发布日期: 2019-05-30 12:22
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议