#Golangでenum
golang初心者なのと、初登校なので温かく見て下さい
そう聞くと、下記のような実装を思い浮かべる方が多いのではないでしょうか?
せっかくなら、もう少し柔軟に扱えるようにしたいなと思っていて、思いついた記事をメモがてら残します。
沢山ご意見ください。
※気出でしたらすみません。
##よくあるenum
type Fruits int
const (
Apple Fruits = iota
Banana
Lemon
)
func (c Fruits) String() string {
switch c {
case Apple :
return "りんご"
case Banana:
return "ばなな"
case Lemon:
return "れもん"
}
return ""
}
この実装の場合、共通的な処理を実装する場合に少し扱いずらいなと感じていました。
なので、こんな形にしてはどうだろうかと思いました。
##よくあるenum + α
type fruits int
const (
None fruits = iota
Apple
Banana
Lemon
)
func (c fruits) String() string {
switch c {
case Apple :
return "りんご"
case Banana:
return "ばなな"
case Lemon:
return "れもん"
}
return ""
}
var FruitsEnum fruitsEnum
type fruitsEnum struct{}
func init() {
FruitsEnum = fruitsEnum {}
}
func (f fruitsEnum) ValueOf(fruits string) fruits {
switch strings.ToLower(fruits) {
case "apple":
return Apple
case "banana":
return Banana
case "lemon":
return Lemon
}
return None
}
---使う側
func main() {
fruits := FruitsEnum.ValueOf("lemon")
println(fruits.String())
}
こうしておくと、共通的な処理を実装する場合に、実態を意識せずに使えて結構便利だなと思っています。
#さいごに
こんな実装べんりかなと思い、書いてみました。ぜひぜひ色々と意見交換できればと思っています。
意見を頂き少しづつ磨き上げていきたいです!
また何か思いついたら書きますので、きになったらどんどんご意見ください!
よろしくお願いいたします!