我有一个只返回地图值的函数。但是由于某些原因,它并没有这样做。 知道为什么吗?我在这里贴了代码。您也可以使用
播放它package main
import "fmt"
func main() {
a := CountryCode("Australia")
fmt.Println(a)
}
func CountryCode(s string) string {
m := make(map[string]string)
// [snip]
m["AU"] = "Australia"
// [snip]
return m[s]
}
func CodeByCountry(s string) string {
m := make(map[string]string)
// [snip]
m["Australia"] = "AU"
// [snip]
return m[s]
}
答案 0 :(得分:9)
您没有使用正确的功能,即使用其键是名称的地图的功能。你可能想要
a := CodeByCountry("Australia")
这很有效。
但是每次需要时创建地图都没有意义。从函数中创建地图创建,并将其放在init:
中package main
import "fmt"
var byCode = make(map[string]string)
var byName = make(map[string]string)
func init() {
m := byCode
m["AF"] = "Afghanistan"
m["AL"] = "Albania"
m["DZ"] = "Algeria"
m["AS"] = "American Samoa"
m = byName
m["Austria"] = "AT"
m["Mozambique"] = "MZ"
m["Solomon Islands"] = "SB"
m["United States"] = "US"
m["Anguilla"] = "AI"
m["Australia"] = "AU"
}
func CountryCode(s string) string {
return byCode[s]
}
func CodeByCountry(s string) string {
return byName[s]
}
func main() {
a := CodeByCountry("Australia")
fmt.Println(a)
}
初始化的另一个解决方案,因为它似乎是双射的,将有一个函数添加一对并填充两个映射:
func addInMaps(code,name string) {
byCode[code] = name
byName[name] = code
}