我想创建一个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)
}
每当我想使用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])
}
我最喜欢的声明切片贴图的语法:
mapOfSlices := map[string][]string{
"first": {},
"second": []string{"one", "two", "three", "four", "five"},
"third": []string{"quarter", "half"},
}
关于你写的东西在技术上没有任何不正确,但是你应该在map[string]*list.List
周围定义你自己的类型以避免一些陷阱,比如尝试在nil指针上调用.Front()
方法。或者使它成为map[string]list.List
以避免这种情况。 list.List只是一对指针和一个长度值;在地图中使用list.List指针只是在空列表的情况下添加nil指针的额外情况。在任何一种情况下,您都应该为此用例定义一个新结构。