type EnglishText string
const (
EnglishTextHello EnglishText = "hello"
EnglishTextGoodbye EnglishText = "goodbye"
EnglishTextGreeting EnglishText = "greeting"
)
I have enum list constant sample
My question is how to dynamic get all enum in EnglishText
Ex: use for loop
Thanks
You can’t directly. You can do it with code generation (eg: using go generate
).
or you can do it manually:
var AllEnglishText = []EnglishText{EnglishTextHello, EnglishTextGoodbye, EnglishTextGreeting}
or you can register the enum values as you assign them (requiring var
rather than const
):
type EnglishText string
var (
EnglishTextHello = newEnglishText("hello")
EnglishTextGoodbye = newEnglishText("goodbye")
EnglishTextGreeting = newEnglishText("greeting")
)
var AllEnglishText []EnglishText
func newEnglishText(s string) EnglishText {
r := EnglishText(s)
AllEnglishText = append(AllEnglishText, r)
return r
}
func main() {
for _, et := range AllEnglishText {
fmt.Println(et)
}
}
Or you can use an integer type for your enum:
type EnglishText int
const (
EnglishTextHello EnglishText = iota
EnglishTextGoodbye
EnglishTextGreeting
EnglishTextLimit
)
func (et EnglishText) String() string {
switch et {
case EnglishTextHello:
return "hello"
case EnglishTextGoodbye:
return "goodbye"
case EnglishTextGreeting:
return "greeting"
default:
return fmt.Sprintf("EnglishText(%d)", et)
}
}
func main() {
for et := range EnglishTextLimit {
fmt.Println(et)
}
}