make и new?make только для slice, map и channel: создаёт и инициализирует значение, возвращает его (не указатель). new(T) выделяет память под zero value типа T и возвращает *T.
s := make([]int, 0, 10) // слайс, готов к использованию
m := make(map[string]int) // пустая map
p := new(int) // *int, значение 0
Для slice, map и channel new вернёт nil-указатель на дескриптор; для использования нужен make.