2

这是一个有一些常量的包。

package object

type Languaege int

const (
    Javascript Languaege = iota
    C
    Cpp
    Shell
)

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

如果我知道它的名称,如何获取类型 Language 的值?

package main
func GetConstByName(name String) {
    ....
}
lang := GetConstByName("Shell")
4

2 回答 2

5

Language如果您想保持const整数类型,我认为您只能手动完成。

这就是我要做的——让 Language 实现Stringer,这意味着你也可以打印它。然后您可以反转languageMap以将语言字符串转换为Language

游乐场链接

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\n", C, C, NewLanguage("C"))
    fmt.Printf("Shell is %d: %s: %d\n", Shell, Shell, NewLanguage("Shell"))
}

这输出

C is 1: C: 1
Shell is 3: Shell: 3
于 2012-12-31T08:39:40.817 回答
-2

你试图滥用反射。在这种情况下,幸运的是,它不会起作用。如果要将字符串键映射map[string]someValueType到某些关联值,请改用 a 。

于 2012-12-31T08:04:15.070 回答