Goのライブラリに対する再現コードを置く場所

Goのライブラリのメンテナをしていると、再現コード付きのIssue報告をもらうことがあります。

さて、そのサンプルコードをどうやって動かせばいいでしょうか?ディレクトリを作って go mod init して、、、というのは面倒ですよね。 ライブラリのコードにデバッグ用のトレースを入れたり、バグ修正コードで再現しなくなることを確認する方法も考えないといけません。

その場合、そのライブラリの中に _issue みたいなディレクトリを作って、その中に issue1234.go のようなファイルを作るのが楽です。 go build issue1234.go のようにすると、ちゃんと親ディレクトリのmodを使ってくれるので、ローカルの修正が可能です。

再現コードに外部依存が入っている場合は、仕方ないので go mod init が必要です。その場合も再現コードを置くディレクトリはライブラリのディレクトリのサブディレクトリにするか、隣のディレクトリにすると、 replace を使ってライブラリのリポジトリのコードを使うのが楽になります。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。