2019年4月4日木曜日

golang で独自ライブラリを作る方法

概要

基本は普通に開発していればあとは 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 件のコメント:

コメントを投稿