13 Типы и значения
Чем make отличается от new?
Ответ
new(T) выделяет память под T, обнуляет её и возвращает *T. make нужен только для среза, карты и канала: он не просто выделяет память, а создаёт готовую к работе структуру. Срез после make можно индексировать, в карту — писать, в канал — отправлять.
package main
import "fmt"
func main() {
nums := make([]int, 2, 4)
fmt.Println(len(nums), cap(nums), nums)
ages := make(map[string]int)
ages["Аня"] = 30
ch := make(chan string, 1)
ch <- "ok"
fmt.Println(<-ch)
p := new(int)
fmt.Println(*p)
*p = 5
fmt.Println(*p)
}