Je voudrais créer une carte de container/list.List
instances. Est-ce la bonne façon de procéder?
package main
import (
"fmt"
"container/list"
)
func main() {
x := make(map[string]*list.List)
x["key"] = list.New()
x["key"].PushBack("value")
fmt.Println(x["key"].Front().Value)
}
Chaque fois que j'ai voulu utiliser un List
j'ai trouvé qu'une tranche était le bon choix, par exemple
package main
import "fmt"
func main() {
x := make(map[string][]string)
x["key"] = append(x["key"], "value")
x["key"] = append(x["key"], "value1")
fmt.Println(x["key"][0])
fmt.Println(x["key"][1])
}
Ma syntaxe préférée pour déclarer une carte de tranches:
mapOfSlices := map[string][]string{
"first": {},
"second": []string{"one", "two", "three", "four", "five"},
"third": []string{"quarter", "half"},
}
il n'y a rien de techniquement incorrect dans ce que vous avez écrit, mais vous devez définir votre propre type autour de map[string]*list.List
pour éviter certains écueils, comme essayer d'appeler la méthode .Front()
sur un pointeur nul. Ou faites-en un map[string]list.List
Pour éviter cette situation. Une list.List n'est qu'une paire de pointeurs et une valeur de longueur; en utilisant un pointeur list.List dans votre carte ajoute simplement la casse supplémentaire d'un pointeur nul au-dessus du cas d'une liste vide. Dans les deux cas, vous devez définir une nouvelle structure pour ce cas d'utilisation.
Je serais enclin à l'écrire comme ceci: http://play.golang.org/p/yCTYdGVa5G