我有一个函数,它只返回一个map的值.但由于某些原因,它不会这样做.知道为什么吗?我在这里贴了代码.你也可以用它来玩
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]
}
Run Code Online (Sandbox Code Playgroud)
您没有使用正确的功能,即使用其键是名称的地图的功能.你可能想要
a := CodeByCountry("Australia")
Run Code Online (Sandbox Code Playgroud)
这有效.
但是每次需要时创建地图都没有意义.从函数中创建地图,并将其放在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)
}
Run Code Online (Sandbox Code Playgroud)
初始化的另一个解决方案,因为它似乎是双射的,将有一个函数添加一对并填充两个映射:
func addInMaps(code,name string) {
byCode[code] = name
byName[name] = code
}
Run Code Online (Sandbox Code Playgroud)