Go make and new

スポンサーリンク

make

Only slice, channel, map

Let’s see sample code

// Make
// slice
v := make([]int, 5)
v2 := make([]int, 0)
fmt.Println(reflect.TypeOf(v))  // []int
fmt.Println(reflect.TypeOf(v2)) // []int
fmt.Println(v)                  // [0 0 0 0 0]
fmt.Println(v2)                 // []
// channel
chm := make(chan int)
fmt.Println(chm)
fmt.Println(reflect.TypeOf(chm))
// map
m := make(map[string]int)
fmt.Println(m)                 // map[]
fmt.Println(reflect.TypeOf(m)) // map[string]int

Make slice with cap? and get slice name using Kind

b := make([]int, 0, 5)
fmt.Printf("%s len=%d cap=%d %v\n", b, len(b), cap(b), b) // [] len=0 cap=5 []
fmt.Println(reflect.TypeOf(b))         // []int
fmt.Println(reflect.ValueOf(b).Kind()) // slice

new

Return pointer, use struct pointer, channel pointer

Can create value, struct

// Value(pointer)
p1 := new(int)
// NO p2 := make(int)
fmt.Println(reflect.TypeOf(p1)) // *int

// Struct
c1 := new(Stlike)
// NO c3 := make(Stlike)
fmt.Println(reflect.TypeOf(c1)) // *main.Stlike

// New
p2 := new([]int)
fmt.Println(reflect.TypeOf(p2)) // *[]int
pmap := new(map[string]int)
fmt.Println(pmap)                 // &map[]
fmt.Println(reflect.TypeOf(pmap)) // *map[string]int

// Array
a1 := new([3]int)
fmt.Println(reflect.TypeOf(a1)) // [3]int

// Channel
pch := new(chan int)
fmt.Println(reflect.TypeOf(pch)) // *chan int
golang
スポンサーリンク
Professional Programmer2

コメント