我目前的golang项目有麻烦。
我要去的另一个包中有一个带有预定键的数组,例如:
package updaters
var CustomSql map[string]string
func InitSqlUpdater() {
CustomSql = map[string]string{
"ShouldBeFirst": "Text Should Be First",
"ShouldBeSecond": "Text Should Be Second",
"ShouldBeThird": "Text Should Be Third",
"ShouldBeFourth": "Text Should Be Fourth"
}
}
并将其发送到main.go,以迭代每个索引和值,但是结果是随机的(在我的情况下,我需要按顺序进行操作)。
真实案例:https://play.golang.org/p/ONXEiAj-Q4v
我搜索了为什么golangs会以随机方式进行迭代,并且该示例使用了sort,但是我的数组键是预先确定的,并且sort仅针对asc desc字母和数字。
那么,我该如何实现数组不会在迭代中随机化的方式?
ShouldBeFirst = Text Should Be First
ShouldBeSecond = Text Should Be Second
ShouldBeThird = Text Should Be Third
ShouldBeFourth = Text Should Be Fourth
感谢任何人,谢谢。
答案 0 :(得分:2)
未指定地图上的迭代顺序,并且不能保证每次迭代之间都相同。
要以已知顺序遍历固定的一组键,请将这些键存储在切片中并遍历slice元素。
var orderdKeys = []string{
"ShouldBeFirst",
"ShouldBeSecond",
"ShouldBeThird",
"ShouldBeFourth",
}
for _, k := range orderdKeys {
fmt.Println(k+" = "+CustomSql[k])
}
另一种选择是使用值的切片:
type nameSQL struct {
name string
sql string
}
CustomSql := []nameSQL{
{"ShouldBeFirst", "Text Should Be First"},
{"ShouldBeSecond", "Text Should Be Second"},
{"ShouldBeThird", "Text Should Be Third"},
{"ShouldBeFourth", "Text Should Be Fourth"},
}
for _, ns := range CustomSql {
fmt.Println(ns.name+" = "+ns.sql)
}