new简介及使用方式
- new() 用于返回类型指针,这个操作:分两步,第一步:初始化一个变量为零的值,第二步:生成一个指向类型变量的地址。
- &Type 返回类型变量的地址,这个操作:分两步,第一步:初始化一个变量(变量值可以不为零)的值,第二步:生成类型变量的地址并返回。
- 相同点和不同点:
都是返回指向变量的地址
new()不支持初始化变量的值(默认值都是零),&Type支持初始化自定义变量的值 - 使用方式
type SyncedBuffer struct {
str string
num int
sum int
}
m := new(SyncedBuffer)
fmt.Println("new m 变量输出:", m) //new m 变量输出: &{ 0 0}
m1 := SyncedBuffer{}
fmt.Println("普通赋值 m1 变量输出:",m1) // 普通赋值 m1 变量输出: { 0 0}
m2 := &SyncedBuffer{}
fmt.Println("&Type赋值 m2 变量输出:", m2) // &Type赋值 m2 变量输出: &{ 0 0}
m3 := &SyncedBuffer{"123",123, 44}
fmt.Println("&Type赋值 带有初始值的m3 变量输出:", m3)//&Type赋值 带有初始值的m3 变量输出: &{m3Test 123 44}
make简介及使用方式
- make() 只作用于创建slice、map、channel这三种,这三种类型本来就是引用类型。
- 使用方式:
make(Type, size, num) return Type
Slice := make([]int, 3, 5) // 生成一个int类型切片,初始长度:3,容量:5
Map := make(map[string]int,5) // 生成一个键string值int类型的字典,长度:5
Chan := make(chan int, 5) // 生成一个int类型的通道,长度:5
new和make使用场景
new || &Type 场景:
new() 变量类型里面的值,是零值,就可以,不需要动态变化,比如type struct 属性全是锁。&type 可以自定义初始化变量的值,也可以像new()一样,默认生成值(零值),这样做的好处,不用想c语言那样,申请一个变量,在取地址,赋值给指针变量,简化操作,注重实用。
make 使用场景:
使用map、silce、channel三种资源类型,自己通过这三种组合方式,定义的类型。
网友评论