¿Por qué Go necesita las funciones make() y new()? ¿Cuál es la diferencia?
¡Hola a todos! Empecé a estudiar Go recientemente y no puedo entender por qué se necesitan dos funciones separadas para asignar memoria: make() y new(). Ambas parecen crear objetos, pero los ejemplos de la documentación solo me confundieron.
Esto es lo que intento hacer. Quiero crear un slice y agregarle elementos inmediatamente:
package main
import "fmt"
func main() {
// Intento crear un slice con new
slice1 := new([]int)
fmt.Println(slice1) // Muestra: &[]
// Pero ¿cómo agregar un elemento? slice1 = append(slice1, 1) no funciona
// Error: first argument to append must be slice; have *[]int
// Intento crear un slice con make
slice2 := make([]int, 5)
fmt.Println(slice2) // Muestra: [0 0 0 0 0]
// Funciona, pero ¿por qué la longitud es 5? ¿Se puede sin longitud?
// Y con map pasa lo mismo
var m1 map[string]int
// m1["key"] = 1 // panic: assignment to entry in nil map
m2 := make(map[string]int)
}