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