golang编程 - new 和make的异同点

A. new 

new 和 make 都是实例化一个 类型,开辟一片内存,生成一个具有物理内存的变量

new (type) *type

new 返回的是一个指针 - 并且实例化的变量默认给予零值,比如int 类型初始值为 0 string的类型初始值为“”

如果 new 一个结构体的话,结构体的成员变量值均为零值

new使用范围无限制 (基本数据类型 + 派生数据类型)

 

 

B. make 

make 的话 ,仅仅可以用于  map slice channel  这3种

make 返回的是变量值

func make(t Type,size IntegerType) Type

make可以定义变量长度

make([]int, 1) 返回的是  [0] 即 make给变量分配的依然是零值

查看 变量类型 -

reflect.TypeOf
 
下面可以看出 var e * int 和 new(int)的区别
 
var e *int

    fmt.Println(e) //输出一个nil 解释:定义了一个int指针,此刻是一个零值得存在,那么这个地址是nik

    // fmt.Println(*e) //对这个指针取值 - 指针都是nil自然找不到这个指针指向的值,所以输出  invalid memory address or nil pointer 

    e = new(int)

    fmt.Println(*e) //这个时候输出0,这个时候没报错,是因为new初始化一个int类型指针的时候,同时这个指针指向的值存储得,也会初始化
                    // new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址

 

对于结构体的实例化 另一种方式 -  &human{ } ,那么返回的也是 一个 * human 指针 
 
golang之中 & 是对变量取地址,而*是对指针取值
posted @ 2021-03-10 14:08  许伟强  阅读(154)  评论(0)    收藏  举报