这是一个包含一些常量的包。
package object
type Languaege int
const (
Javascript Languaege = iota
C
Cpp
Shell
)
// ========================================
如果我知道它的名字,我怎么能得到一种类型的语言?
package main
func GetConstByName(name String) {
....
}
lang := GetConstByName("Shell")
答案 0 :(得分:3)
如果您希望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
答案 1 :(得分:1)
你试图滥用反思。在这种情况下,幸运的是,它将无法正常工作。如果您想映射字符串键到某些关联值,请改用map[string]someValueType
。