みんな普通にやってるかもしないし、やっていないかもしれない。どうなんだろ
(追記) 前にも同じようなテキスト書いてた。おれはもうだめだ
TL;DR
go get -u するだけでは、最新のタグのついたバージョンまでしか参照されないが、パッケージ名にブランチ名を添えると、そのブランチの最新コミットを参照させることができる。
例: go get -u github.com/hymkor/csvi@master
go work はローカルでしか有効でないので、GitHub へコードを反映させる際、有効。
git tag でタグを打てばいいのだが、タグをpushした時点で第三者も参照可能になってしまうため、まだパッケージの仕様が流動的な時は新たなタグは打たない方がよい。
( 1,2日のうちに無駄にタグを4,5個つけたりしてしまうという、恥ずかしいことをしないために )
事例
たとえば、パッケージ sqlbless から csvi を参照しているものとする。
| ローカル | リモート | |
|---|---|---|
| 参照される側のパッケージ | ~/src/csvi | github.com/hymkor/csvi |
| 参照する側のパッケージ | ~/src/sqlbless | github.com/hymkor/sqlbless |
github.com/hymkor/sqlbless から、github.com/hymkor/csvi を参照している場合
(1)まだ、どちらも GitHub へ push せず、ローカルで開発しているうちは、双方の親ディレクトリで
cd ~/src/ go work init go work use sqlbless csvi
を実行すると、~/src/go.work に sqlbless と csvi が記録される
(2)GitHub へ push する段になったら、参照される側のパッケージを push する
cd ~/src/csvi git push
(3) go work 関連のファイルを削除する
cd ~/src rm go.work go.work.sum
sqlbless 側のビルドを試みる。失敗するようになった正解
cd ~/src/sqlbless go build
(4)参照する側のパッケージで go get する
cd ~/src/sqlbless go get -u github.com/hymkor/csvi@master
go.mod には github.com/hymkor/csvi v1.10.1-0.20240604164453-8f590d32fdc3 という感じのハッシュつきのリビジョンが記録される。
これでビルドが成功するようになれば Ok 。ただし、たまにちょっと待たなくてはいけない場合もあるので、その時は時間をおいてしつこくやろう。
あと、この go.mod, go.mod.sum の変更「だけ」をコミットした後、可能であれば、go.work を付け始めた時点のところに、go.mod , go.mod.sum のコミットを rebase で「移動」させた方がよいかもしれない。 ( そうする意味がわからない人は、事故をおこしてはいけないので、無理にやる必要はない )
余談
せっかく、プルリクエストをマージしてもらえたのに、新たにタグを打ってくれないもんだから、せっかくのマージしてもらったコードをこっちが利用できない…という場合も、go get -u レポジトリ名@ブランチ名 は有効