2

いくつかの定数を持つパッケージです。

package object

type Languaege int

const (
    Javascript Languaege = iota
    C
    Cpp
    Shell
)

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

名前がわかっている場合、言語型の値を取得するにはどうすればよいですか?

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

2 に答える 2

5

整数型Languageのままにしておきたいのなら、手作業以外ではできないと思います。const

これが私がすることです-言語に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 に答える