Golangで実行可能なパッケージ(main)とライブラリ(main以外)を混在させる方法

ちゃんと理解できていない可能性もありますが、備忘録としてメモ。

Goでeasy_ntpdateという時刻を合わせるだけのちょっとしたプログラムを作ったのですが、これを別のプログラムからも使いたくなったのが発端です。

もともとバイナリにして実行するだけの想定だったので、main関数に処理を書いていました。

package main

func main() {
  (処理など)
}

これを、バイナリとしてコンパイルできるようにしつつ、ライブラリとしても使えるようにするのが目的です。

そのままだと利用先でmainパッケージが重複してしまいますので、main関数を残しつつプログラムの内容だけを別パッケージに移します。

goは同一ディレクトリに複数のパッケージは置けないので、ディレクトリを分けて配置します。

今回はeasy_ntpdateというパッケージ名で作成しました。

rootdir
│  main.go(mainパッケージ)
│
└─easy_ntpdate
        easy_ntpdate.go(easy_ntpdateパッケージ)

main.goではライブラリをimportして叩く処理のみを記述します。

package main

import "./easy_ntpdate"

func main() {
    easy_ntpdate.SetDate()
}
package easy_ntpdate

func SetDate() {
  (処理など)
}

これでimportすればeasy_ntpdateとして利用できます。

最初は戸惑いましたが、goのパッケージ管理はgithubとの相性も良く作りやすいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です