创建列表的Golang地图

时间:2012-10-01 17:18:23

标签: go

我想创建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)
}

3 个答案:

答案 0 :(得分:82)

每当我想使用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])
}

答案 1 :(得分:13)

我最喜欢的声明切片贴图的语法:

mapOfSlices := map[string][]string{
    "first": {},
    "second": []string{"one", "two", "three", "four", "five"},
    "third": []string{"quarter", "half"},
}

答案 2 :(得分:9)

对于您撰写的内容,技术上没有任何不正确之处,但您应该在map[string]*list.List周围定义自己的类型以避免一些陷阱,例如尝试调用.Front()方法一个零指针。或者将其设为map[string]list.List以避免这种情况。 list.List只是一对指针和一个长度值;在地图中使用list.List指针只是在空列表的情况下添加nil指针的额外情况。在任何一种情况下,都应该为这个用例定义一个新结构。

我倾向于这样写: http://play.golang.org/p/yCTYdGVa5G