相关疑难解决方法(0)

为什么Go不能按插入顺序迭代地图?

我有一个导航栏作为地图:

var navbar = map[string]navbarTab{
}
Run Code Online (Sandbox Code Playgroud)

哪里navbarTab有各种属性,儿童用品等.当我尝试渲染导航栏(带for tabKey := range navbar)时,它以随机顺序显示.我知道range它在运行时会随机排序,但似乎无法获得有序的键列表或迭代插入顺序.

游乐场链接在这里:http://play.golang.org/p/nSL1zhadg5虽然它似乎没有表现出相同的行为.

如何在不破坏插入顺序的情况下迭代此地图?

dictionary go

10
推荐指数
2
解决办法
5734
查看次数

为什么一个函数中的映射值会受到另一函数中映射条目的影响?

这是我的代码:

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()。那么为什么地图不同呢?

struct dictionary go

3
推荐指数
1
解决办法
348
查看次数

标签 统计

dictionary ×2

go ×2

struct ×1