【GO】パッケージ管理


GOを触り始めてしばらくすると依存性が気になってきます。

go getはnode.jsでいうと全部npm install -gを使うような感覚がありました。

一人で環境を変えず使う分には問題ないですが、色々と管理を楽にしたいのでパッケージ管理について考えてみます。

※Windows10・Go1.12

 

パッケージ管理ツールを使う

パッケージ管理ツールは基本的にvendoringツールです。

プロジェクト直下にvenderフォルダを作り、そこにパッケージを入れて参照する。

node.jsでいうとnode_modulesのような感覚だと思います。

 

GitHubでスター数を見てみます。

gvtはgbの派生ツール。

また、glideはdepを使うことを推奨していました。

Please consider trying to migrate from Glide to dep

軽く使い方なんかを調べた感じだとdepは他と比べて管理が楽そうです。

特にサンプロコードをコピペして実行などはワンステップで出来そう。

 

Modulesを使う

Go1.11から試験導入された機能で、それ以前はプロトタイプとしてvgo(Versioned GO)として使われていたようです。

https://github.com/golang/go/wiki/Modules

将来的にはこれによる管理になっていきそうなので、今から始めるならこっちの方がよさそう。

 

サンプル用のパッケージを使ったサンプルがあったので試してみます。

これでgo.modというファイルが生成されます。

main.goを書いてgo buildすると自動でダウンロードされます。

go.modにrequire rsc.io/quote v1.5.2が追記され、go.sumが生成されます。

ダウンロードされたファイルはどこに行ったかと思うと、%GOPATH%/pkg/mod 内にありました。これでパッケージが環境依存からプロジェクト依存になりそう。

ただモジュール名(今回だとmod)が被ると同じ場所に入れられる。

気にしなくても問題が起きる可能性は低そうではあるが何かしら工夫は必要かも。

 

go.modがある場所でgo getをするとモジュールとして追加されます。

適当に目のついた使ったことのないパッケージをgetしてみます。

他フォルダでimportしてもcannot findエラーになります。

mod、sumファイルがごちゃつきますがgo mod tidyで必要のないものを消せます。

混乱を避けるために従来の方法と使い分けはしない方がよさそう。


コメントを残す

メールアドレスが公開されることはありません。