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