概要
基本は普通に開発していればあとは Github などのパブリックリポジトリに push すれば終わりです
少しポイントがあるのでそれを踏まえて紹介します
環境
- macOS 10.14.3
- go 1.11.5
ライブラリとして公開するコードを作成
簡単なライブラリを作成します
$GOPATH
などの環境変数は設定済みとして進めます
また Github で公開することを前提にディレクトリの作成などは進めます
mkdir -p $GOPATH/src/github.com/hawksnowlog/first_lib
vim $GOPATH/src/github.com/hawksnowlog/first_lib/main.go
package first_lib
import "fmt"
type Person struct {
Name string
Age int
}
func (p *Person) Say() {
fmt.Printf("My name is %s, I'm %d\n", p.Name, p.Age)
}
go build github.com/hawksnowlog/first_lib
超簡単なライブラリです
ローカルでテストするので git commit
も必要ないです
go build
はビルドが通るかのチェックをしているだけでローカルで参照する場合は実は build も必要ありません
ライブラリをテストするコードの作成
mkdir -p $GOPATH/src/github.com/hawksnowlog/lib_test
vim $GOPATH/src/github.com/hawksnowlog/lib_test/main.go
package main
import "github.com/hawksnowlog/first_lib"
func main() {
p := first_lib.Person{"hawk", 10}
p.Say()
}
go get github.com/hawksnowlog/lib_test
go build github.com/hawksnowlog/lib_test
go install github.com/hawksnowlog/lib_test
lib_test
形として go get
していますがローカルでテストしているので実は不要です
バイナリを実行すると Say()
メソッドの内容が表示されると思います
ポイント解説
ライブラリとなるコードは package main
を持っていません
package first_lib
で指定したパッケージ名がライブラリを使う側で参照するパッケージ名になります
例えば package first_lib_a
とした場合はテストコードは
p := first_lib_a.Person{"hawk", 10}
としなければなりません
もしライブラリに package main があると
CLI として配布する場合には必須です
以下のようにすると go get
時にバイナリもインストールされます
mkdir -p $GOPATH/src/github.com/hawksnowlog/first_lib/a
mv $GOPATH/src/github.com/hawksnowlog/first_lib/main.go $GOPATH/src/github.com/hawksnowlog/first_lib/a
vim $GOPATH/src/github.com/hawksnowlog/first_lib/main.go
package main
import "fmt"
func main() {
fmt.Println("This library is my first_lib")
}
同一階層に異なる package 名を持つソースコードがあると怒られるので別ディレクトリを作成して、そちらにライブラリ用のコードを移動して package main を持つコードを新たに作成しています
また上記のように変更した場合はテストコードの import 文も import "github.com/hawksnowlog/first_lib/a"
にしなければなりません
公開する
ライブラリとして公開するのであれば、あとは git push するだけで OK です
git add .
git commit -m "first_lib"
git push -u origin master
他の人が使いたい場合は
go get github.com/hawksnowlog/lib_test
でダウンロードすることができます
また公開するのであれば godoc も必要になるので関数や struct には godoc を記載してあげましょう
あとはより多くの開発者に使ってほしいのであれば Go Search というサービスもあるのでこれに登録しておくと良いと思います
あとはレベルは高いですが awesome-go などに p-r を送るのも手だと思います
最後に
golang でライブラリを開発する基本的な方法を紹介しました
golang の場合、特にライブラリ用だからと言って気にすることはないですが package 名などは利用者目線で考えると良いと思います
0 件のコメント:
コメントを投稿