LoginSignup
4
2

More than 3 years have passed since last update.

#golang 列挙定数のコメントからNameメソッドを自動生成する

Last updated at Posted at 2019-02-12

はじめに

type HogeType int

const (
    HogeTypeA HogeType = 0 // A
    HogeTypeB HogeType = 1 // B
    HogeTypeC HogeType = 2 // C
)

みたいな列挙定数があったときに、各定数のコメントを元に

func (src HogeType) Name() string {
    switch src {
    case HogeTypeA:
        return "A"
    case HogeTypeB:
        return "B"
    case HogeTypeC:
        return "C"
    default:
        return fmt.Sprintf("%v", src)
    }
}

の様なメソッドを生成するツールを作りました。
(正確にいうとメインで書いたのは自分ではなく会社の別メンバーですが、許可を得て自分が記事にしますm(_ _)m)

定数追加時の修正漏れが防げます。

インストール

$ go get github.com/knightso/enameg/cmd/enameg

使い方

type定義の前に // +enameg というコメントを書きます。

// +enameg
type HogeType int

そしてコマンド実行します。

$ enameg <ファイルまたはディレクトリ名>

<ファイル名>_ename.go というファイルにNameメソッドが出力されます。

go generate利用例↓

//go:generate enameg $GOFILE

// +enameg
type HogeType int

const (
    HogeTypeA HogeType = 0 // A
    HogeTypeB HogeType = 1 // B
    HogeTypeC HogeType = 2 // C
)

その他

自動生成部分に gowrtr というライブラリを利用させてもらいましたm(_ _)m

https://github.com/moznion/gowrtr
https://moznion.hatenadiary.com/entry/2019/01/14/111719

import文の要不要を考えなくてよくなったり、生成部品の再利用がしやすかったりととても便利なツールでしたが、正直今回の様な小規模生成ツールだとtext/templateでもよかったかな、と思いました(^_^;
もっと大規模で複雑な生成だと威力を発揮しそう。

4
2
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
4
2