質問1
go getはgithubのどのパッケージにも有効ですか?
(go getできるようにあらかじめ作者がしなければならないことなどないですかね)
go get で実行されるという事は、相対 import 出来ない事になります。ローカルで開発する際は
という import を使えますが、go get するには絶対パスで書く必要があります。たとえばこの mylib を github 上で公開したい場合
go
1import "github.com/DDxlk/mylib"
としなければなりません。これはこの mylib の使い手側だけの話ではなく、mylib から import しているサブパッケージにも言える話です。
go
1import "github.com/DDxlk/mylib/subpkg"
またこれはしきたりみたいな物ですが、golang でコマンドを提供する場合には、
https://github.com/DDxlk/mylib/cmd/myapp
の様にディレクトリ構造を作りユーザに
go get github.com/DDxlk/mylib/cmd/myapp
でインストールして貰う様にします。
質問2
-u
go get -u github.com/hoge
これはリポジトリのmasterブランチの最新バージョンをgetしてくるというニュアンスで解釈してるのですが、-uを指定しないと最新版にならないというのもおかしな話なので曲解しているのかなと思いました。
実際具体的な違いは何なんでしょう。
go get は明示的に -u を指定しないと更新されません。go get はそのパッケージがローカルに存在しない場合には git clone (や hg clone など)を実行してくれますが、既にローカルPCに存在する場合には git pull してくれません。これを行うのが -u です。
質問3
go getしたパッケージのアップデートは、どうすればいいですか。
今のところアップデート用のコマンドはなさそうですが、
一度パッケージのディレクトリを削除してから再度go getをするという形しかないんですかね。
先の回答の通り -u を使います。この場合、古いリビジョンの動作に依存したパッケージがあり、更新してしまう事で動かなくなってしまう物もあります。golang ではこういった事が起きない様に、vendor という仕組みを提供していて、パッケージルートに
vendor/github.com/mattn/anotherlib
の様に配置しておくことで GOPATH 配下ではなく vendor 配下のパッケージ(うまく動いていたバージョン)でビルドする事が出来ます。これももちろん新しい方が良いに決まってますので、タイミングを見て新しいバージョンに更新(時には追従の為の修正)すべきです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/20 17:55 編集
2017/08/20 23:57 編集
退会済みユーザー
2017/08/21 02:56