72

container/list.List文字列からインスタンスへのマップを作成したいと思います。これは正しい方法ですか?

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)
}
4

3 に答える 3

166

を使用したいときはいつでもList、スライスが正しい選択であることがわかりました。

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])
}
于 2012-10-01T18:19:43.650 に答える
9

あなたが書いたものについて技術的に間違っていることは何もありませんが、nil ポインターでメソッドmap[string]*list.Listを呼び出そうとするなどの落とし穴を避けるために、独自の型を定義する必要があります。.Front()または、map[string]list.Listその状況を回避するためにそれを作ります。list.List は、ポインターと長さの値のペアです。マップで list.List ポインターを使用すると、空のリストのケースの上に nil ポインターの特別なケースが追加されるだけです。いずれの場合も、このユース ケース用に新しい構造体を定義する必要があります。

次のように書きたいと思います: http://play.golang.org/p/yCTYdGVa5G

于 2012-10-01T19:49:01.180 に答える