1.主要是分配内存差异
package main
import "fmt"
type Person struct {
Name string
Age uint32
Ptr *uint32
}
func main(){
// var a *int
// *a = 1 // 发生panic,invalid memory address or nil pointer dereference
// array
array := new([5]int)
array[0] = 1
// slice
// slice := new([]int)
// (*slice)[0] = 1 // 发生panic,因为未能分配内存,runtime error: index out of range [0] with length 0
// fmt.Println(slice)
// map
// mm := new(map[string]interface{}) // 仅仅是初始化了类型,里面成员尚未初始化
// mm["1"] = 1
mm := make(map[string]interface{}) // 使用make进行初始化
mm["1"] = 1
fmt.Println(mm)
// channel
// ch := new(chan string)
// ch <- "hell0" // invalid operation: cannot send to non-channel ch (variable of type *chan string)
st := new(Person)
// new 仅仅是初始化了类型,里面成员尚未初始化
// *st.Ptr = 12 // panic: runtime error: invalid memory address or nil pointer dereference
st.Name = "lx"
st.Age = 11
fmt.Println("st = ",st)
ss := &Person{
Ptr:new(uint32), // 初始化为其分配内存
}
*ss.Ptr = 10
fmt.Println(ss)
}