概要
Goの文法とか進める前に、先にパッケージの公開の仕方と利用方法についてメモメモ。。
Goは最近の言語なので、ライブラリ(モジュール)の公開の仕方がとても楽です。
外部パッケージの取得は、go get
コマンドを使って行うのですが
go get
は、githubやbitbucketなどに置かれているリポジトリにデフォルトで対応しています。
なので、自分でライブラリを公開したいと思ったら、githubとかにリポジトリ作って、そこにPUSHしておいたらオッケイということになります。これは楽ですねー。
公開用のライブラリ作る
例として公開用のパッケージ作ってみます。こんなの。
package helloworld import ( "fmt" "time" ) func yyyyMMddHHmmss(t time.Time) string { const layout = "2006-01-02 15:04:05" return t.Format(layout) } // Hello は、挨拶を返します. // // 引数 t が指定されている場合、メッセージの後ろに指定された日付を付与します. (yyyy-MM-dd HH:mm:ss) // t が nil の場合、現在時刻を付与します. func Hello(t *time.Time) (string, error) { now := time.Now() if t != nil { now = *t } return fmt.Sprintf("Hello World at %s", yyyyMMddHHmmss(now)), nil }
何の役にも立ちませんね。こんなクソライブラリw
まあ、サンプルってことで。
プロジェクトの作り方は、前回書いた内容と同じで
以下のように、どこかにディレクトリ作って、その中に入って
go mod 有効にして、ソース書きます。作ったらgithubにアップするのでgitもinit。
$ mkdir helloworldgo $ cd helloworldgo $ go mod init github.com/devlights/helloworldgo $ git init
で、あとはPUSHするだけです。これで終わりです。
モジュールのバージョン管理する場合は、バージョンタグ振ったりするのですが今回は割愛。
Goではセマンティックバージョニング (semver) という規約を適用します。
モジュールのバージョンについては、以下に書かれています。
公開されているライブラリを利用する
次は、上で公開したライブラリを利用する側です。
同じようにして、サンプル用のプロジェクト作ります。
ついでに、これもgithubにあげておきました。
package main import ( "fmt" "github.com/devlights/helloworldgo/pkg/helloworld" ) func main() { message, _ := helloworld.Hello(nil) fmt.Println(message) }
先程と同じく、何の役にも立ちませんw
プロジェクト作るやり方は先ほどと同じです。
$ mkdir helloworldclient $ cd helloworldclient $ go mod init github.com/devlights/helloworldclient $ git init
go module を利用している場合、依存ライブラリを先に go get
しておく必要はなくて、いきなりソースに
import "hogehoge"
って形で書いてしまっても問題ないです。ビルド時にgoコマンドがダウンロードしてくれます。
VSCodeやGolandとかで作業している場合は、その場でダウンロードしてくれたりしますね。
もちろん、先に
go get -u github.com/devlights/helloworldgo
ってやっておいても問題ありません。
依存ライブラリを追加すると、go.modファイルに依存関係が追加され、go.sumファイルが生成されます。
go.mod
module github.com/devlights/helloworldclient go 1.13 require github.com/devlights/helloworldgo v0.0.0-20191002081345-b5094b068f3b
バージョンが、v0.0.0なのは、バージョンタグを設定していないからですね。
go.modとgo.sumは手で編集しちゃ駄目
このファイルは手で編集しちゃ駄目です。go mod
コマンドで自動で調整されるものです。
Goのランタイムバージョンを編集する場合とかは
のようにして行います。
取得した外部モジュールはどこに置かれるの?
$GOPATH/pkg/mod
の下にダウンロードされます。
コマンドの場合は、$GOPATH/bin
にダウンロードされますね。
便利なライブラリを探すには?
Awesome XXX シリーズがGoもあります。とりあえずここ見たら大抵見つかります。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場