標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Go modules を使っている時、自モジュールの最新コミットの機能を自分の他のGo パッケージから参照するだけで第三者に使ってもらう必要がないのであれば、無駄に新たな git tag をつけなくてもよいかもしれない

みんな普通にやってるかもしないし、やっていないかもしれない。どうなんだろ

(追記) 前にも同じようなテキスト書いてた。おれはもうだめだ

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 レポジトリ名@ブランチ名 は有効