0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Golang】javaのenumっぽい実装よくある記事から + α(ぜひご意見下さい)

Last updated at Posted at 2019-07-12

#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())
}

こうしておくと、共通的な処理を実装する場合に、実態を意識せずに使えて結構便利だなと思っています。

#さいごに
こんな実装べんりかなと思い、書いてみました。ぜひぜひ色々と意見交換できればと思っています。
意見を頂き少しづつ磨き上げていきたいです!
また何か思いついたら書きますので、きになったらどんどんご意見ください!
よろしくお願いいたします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?