创建字符串到 List 的映射

我想创建一个字符串到 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)
}
138558 次浏览

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

您所编写的内容在技术上没有什么不正确的地方,但是您应该围绕 map[string]*list.List定义自己的类型,以避免一些陷阱,比如试图在 nil 指针上调用 .Front()方法。或者使它成为 map[string]list.List来避免这种情况。名单。List 只是一对指针和一个长度值; 使用 List。列表指针在映射中只是在空列表的大小写之上添加了一个空指针的额外大小写。在这两种情况下,您都应该为这个用例定义一个新的结构。

我倾向于这样写: Http://play.golang.org/p/yctydgva5g

我最喜欢的声明字符串映射到字符串片的语法:

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