dongqi9125 2012-12-31 07:25
浏览 45
已采纳

如何使用反射通过名称获取包const值?

It's a package having some constants.

package object

type Languaege int

const (
    Javascript Languaege = iota
    C
    Cpp
    Shell
)

//========================================

how can i get the value of a type Language if I know its name?

package main
func GetConstByName(name String) {
    ....
}
lang := GetConstByName("Shell")
  • 写回答

2条回答 默认 最新

  • dongluzhi5208 2012-12-31 08:39
    关注

    I don't think you can do it except by hand if you want Language to remain a const integer type.

    Here is what I would do - make Language implement Stringer which means you can print it too. You can then invert languageMap to turn language strings into Language

    Playground link

    package main
    
    import "fmt"
    
    type Language int
    
    const (
        Javascript Language = iota
        C
        Cpp
        Shell
    )
    
    var languageMap = map[Language]string{
        Javascript: "Javascript",
        C:          "C",
        Cpp:        "Cpp",
        Shell:      "Shell",
    }
    
    func (l Language) String() string {
        return languageMap[l]
    }
    
    var languageMapReverse map[string]Language
    
    func NewLanguage(languageName string) Language {
        if languageMapReverse == nil {
            languageMapReverse = make(map[string]Language)
            for l, name := range languageMap {
                languageMapReverse[name] = l
            }
        }
        return languageMapReverse[languageName]
    }
    
    func main() {
        fmt.Printf("C is %d: %s: %d
    ", C, C, NewLanguage("C"))
        fmt.Printf("Shell is %d: %s: %d
    ", Shell, Shell, NewLanguage("Shell"))
    }
    

    This outputs

    C is 1: C: 1
    Shell is 3: Shell: 3
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包