我有一个导航栏作为地图:
var navbar = map[string]navbarTab{
}
Run Code Online (Sandbox Code Playgroud)
哪里navbarTab有各种属性,儿童用品等.当我尝试渲染导航栏(带for tabKey := range navbar)时,它以随机顺序显示.我知道range它在运行时会随机排序,但似乎无法获得有序的键列表或迭代插入顺序.
游乐场链接在这里:http://play.golang.org/p/nSL1zhadg5虽然它似乎没有表现出相同的行为.
如何在不破坏插入顺序的情况下迭代此地图?
这是我的代码:
func test(v map[string]string) {
v["foo"] = "bar"
}
func main() {
v := make(map[string]string)
test(v)
fmt.Printf("%v\n", v) // prints map[foo:bar]
}
Run Code Online (Sandbox Code Playgroud)
我对 Go 还很陌生,但据我所知,由于我将映射值传递给test()而不是指向映射的指针,因此该test()函数应该修改映射的不同变量,因此不会影响中变量的值main()。我本来希望它能打印出来map[]。我测试了不同的场景:
type myStruct struct {
foo int
}
func test2(v myStruct) {
v.foo = 5
}
func main() {
v := myStruct{1}
test2(v)
fmt.Printf("%v\n", v) // prints {1}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,代码的行为符合我的预期。v函数中的变量不受main()中变量的更改的影响test2()。那么为什么地图不同呢?