Pourquoi les fonctions make() et new() sont-elles nécessaires en Go ? Quelle est la différence ?
Bonjour à tous ! J'ai commencé à étudier Go récemment et je n'arrive pas à comprendre pourquoi deux fonctions distinctes sont nécessaires pour allouer de la mémoire : make() et new(). Apparemment, les deux créent des objets, mais les exemples de la documentation m'ont seulement embrouillé.
Voici ce que j'essaie de faire. Je veux créer un slice et y ajouter immédiatement des éléments :
package main
import "fmt"
func main() {
// J'essaie de créer un slice avec new
slice1 := new([]int)
fmt.Println(slice1) // Affiche : &[]
// Mais comment ajouter un élément ? slice1 = append(slice1, 1) ne fonctionne pas
// Erreur : first argument to append must be slice; have *[]int
// J'essaie de créer un slice avec make
slice2 := make([]int, 5)
fmt.Println(slice2) // Affiche : [0 0 0 0 0]
// Ça marche, mais pourquoi la longueur est-elle directement 5 ? Peut-on le faire sans longueur ?
// Et avec une map, c'est la même histoire
var m1 map[string]int
// m1["key"] = 1 // panic: assignment to entry in nil map
m2 := make(map[string]int)
}