golang中的new()到底是什么意思?

1.var xxx type 会直接申请内存会有内存地址 可直接使用 默认都是零值

2.var xxx *type 只是存在当前变量内存地址,且是指针类型变量,但是此时没有指向的内存地址 需要通过new才能申请内存地址给该变量去指向,new之前调用会导致空指针错误

 测试代码片段

func main(){

    type huiStruct struct {
		name string
		age  int64
	}
	println("==========huiP==============")
	var huiP *huiStruct           //如果申明的是指针变量 那么指针变量指针地址是有的,但是指针变量指向的地址是空的,必须new才能为该指针变量申请指向的内存空间
	println("初始化前变量指针地址", &huiP)  //0xc000095e78
	println("初始化前变量指针指向", *&huiP) //0x0 //这里未分配内存空间也没有地址 所以new之前使用一定会报错空指针
	if empty.IsEmpty(huiP) {
		println("指针-初始化前是空的") //空的
	} else {
		println("指针-初始化前不是空的")
	}
	huiP = new(huiStruct)
	println("初始化后变量指针地址", &huiP)  //0xc000095e78
	println("初始化后变量指针指向", *&huiP) //0xc000095ec8

	if empty.IsEmpty(huiP) {
		println("指针-初始化后是空的")
	} else {
		println("指针-初始化后不是空的") //不是空的
	}


}

输出结果 

初始化前变量指针地址 0xc000115ec0
初始化前变量指针指向 0x0
指针-初始化前是空的
初始化后变量指针地址 0xc000115ec0
初始化后变量指针指向 0xc000004078
指针-初始化后不是空的

你可能感兴趣的:(后端,笔记,golang,开发语言,后端)