new函数用来分配内存,主要分配值类型,比如int、float32、struct等,返回的是指针
package main
import (
"fmt"
)
func main(){
num1 := 100
fmt.Printf("num1的类型是%T,num1的值为%v,num1的地址是%v\n", num1, num1, &num1)
//结果---num1的类型是int,num1的值为100,num1的地址是0xc042052058
//内存分配说明:
//内存里会开辟一个空间,num1指向这个空间,这个空间了里放了值100,那么num1的地址就是这块空间的地址
num2 := new(int)
//*num2 = 100
fmt.Printf("num2的类型是%T,num2的值为%v,num2的地址是%v\n", num2, num2, &num2)
//结果---num2的类型是*int,num2的值为0xc0420520a0,num2的地址是0xc042072020
//内存分配说明:
//num2本身是指针类型,num2会指向一个空间,但是这个空间里的值是一个地址,就是0xc0420520a0,但是这个
//空间本身也有一个地址,地址就是0xc042072020,而0xc042072020这个地址默认情况的值是个0,因为没有赋值
//进一步说明
fmt.Printf("num2的类型是%T,num2的值为%v,num2的地址是%v,num2这个指针指向的值是%v", num2, num2, &num2, *num2)
//结果---num2的类型是*int,num2的值为0xc0420520a0,num2的地址是0xc042072020,num2这个指针指向的值是0
}
待补充:
make:用来分配内存,只要分配引用类型,比如chan、map、slice