驚くかもしれまえんが、Go言語(golang)ではenumがありません。
そのため、自前でenumを作る必要があります。
といっても簡単なので、簡単な例をみてみましょう。
package enum
type Weekday int
// enumのように定数を定義
// 変動するためDBに値を保存などはしない
const (
Nothing Weekday = iota
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
// DBに保存するID
// 値を固定する
var WeekdaysID = map[Weekday]int{
Nothing: 1,
Sunday: 2,
Monday: 3,
Tuesday: 4,
Wednesday: 5,
Thursday: 6,
Friday: 7,
Saturday: 8,
}
// 日本語の表記名
var WeekdayJPText = map[Weekday]string{
Nothing: "該当なし",
Sunday: "日曜日",
Monday: "月曜日",
Tuesday: "火曜日",
Wednesday: "水曜日",
Thursday: "木曜日",
Friday: "金曜日",
Saturday: "土曜日",
}
// WeekdaysIDのIDから定数を取得
func NewWeekday(weekID int) Weekday {
for key, value := range WeekdaysID {
if value == weekID {
return key //該当のWeekdayを取得
}
}
return Nothing // 該当しない場合は、該当なしの定数を取得
}
func (w Weekday) JPText() string {
if w == Nothing {
return "-"
}
if v, ok := WeekdayJPText[w]; ok {
return v
}
return "-"
}
まずは定数を定義します
package enum
type Weekday int
// enumのように定数を定義
// 変動するためDBに値を保存などはしない
const (
Nothing Weekday = iota
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
この定数を日本語などのstring型にしたいことがあるはずです。
そのための関数を定義します。
package enum
type Weekday int
// enumのように定数を定義
// 変動するためDBに値を保存などはしない
const (
Nothing Weekday = iota
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
// 日本語の表記名
var WeekdayJPText = map[Weekday]string{
Nothing: "該当なし",
Sunday: "日曜日",
Monday: "月曜日",
Tuesday: "火曜日",
Wednesday: "水曜日",
Thursday: "木曜日",
Friday: "金曜日",
Saturday: "土曜日",
}
func (w Weekday) JPText() string {
if w == Nothing {
return "-"
}
if v, ok := WeekdayJPText[w]; ok {
return v
}
return "-"
}
iotaは0から始まる連番なため、定数が減れば値も変わります。
そのため、DB登録するためのIDのために、変動しない値を定義します
// DBに保存するID
// 値を固定する
var WeekdaysID = map[Weekday]int{
Nothing: 1,
Sunday: 2,
Monday: 3,
Tuesday: 4,
Wednesday: 5,
Thursday: 6,
Friday: 7,
Saturday: 8,
}
// WeekdaysIDのIDから定数を取得
func NewWeekday(weekID int) Weekday {
for key, value := range WeekdaysID {
if value == weekID {
return key //該当のWeekdayを取得
}
}
return Nothing // 該当しない場合は、該当なしの定数を取得
}
これでIDからenumを取得できます。
あとは必要な定数があれば、適宜定義していくだけです。
コメント