为什么地图不会返回其值?

hey*_*hey 1 go

我有一个函数,它只返回一个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)

Den*_*ret 9

您没有使用正确的功能,即使用其键是名称的地图的功能.你可能想要

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)