Por que as funções make() e new() são necessárias em Go? Qual é a diferença?
Olá a todos! Comecei a estudar Go recentemente e não consigo entender por que são necessárias duas funções separadas para alocar memória: make() e new(). Ambas parecem criar objetos, mas os exemplos da documentação só me confundiram.
Aqui está o que estou tentando fazer. Quero criar um slice e adicionar elementos imediatamente:
package main
import "fmt"
func main() {
// Tentando criar um slice com new
slice1 := new([]int)
fmt.Println(slice1) // Exibe: &[]
// Mas como adicionar um elemento? slice1 = append(slice1, 1) não funciona
// Erro: first argument to append must be slice; have *[]int
// Tentando criar um slice com make
slice2 := make([]int, 5)
fmt.Println(slice2) // Exibe: [0 0 0 0 0]
// Funciona, mas por que o comprimento é 5? Pode ser sem comprimento?
// E com map é a mesma história
var m1 map[string]int
// m1["key"] = 1 // panic: assignment to entry in nil map
m2 := make(map[string]int)
}