Все вопросы

13 Типы и значения

Чем make отличается от new?

new(T) выделяет память под T, обнуляет её и возвращает *T. make нужен только для среза, карты и канала: он не просто выделяет память, а создаёт готовую к работе структуру. Срез после make можно индексировать, в карту — писать, в канал — отправлять.

Пример

Go

make для трёх ссылочных структур и new для int

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)
}