外部パッケージを使っていて、ちょっとした修正を試したい時は以下のような方法があります。
- 1. 外部パッケージをForkしてgo.modで置き換える
- 2. 外部パッケージのコピーをリポジトリに追加してgo.modで置き換える
- 3. 変更したファイルをリポジトリに追加してoverlayで書き換える
1. 外部パッケージをForkしてgo.modで置き換える
最も基本的なやり方なので特に理由がなければこちらの方法にするのが良いでしょう。
対象のパッケージのForkに変更を加え、以下のようにしてgo.modで置き換えます。
go mod edit -replace github.com/EXTERNAL_/PACKAGE@v1.0.0=github.com/daisuzu/PACKAGE@development go mod tidy
なお、Forkにコミットを追加する場合はその度にgo mod tidy
で擬似バージョンを更新していく必要があります。
2. 外部パッケージのコピーをリポジトリに追加してgo.modで置き換える
Forkを作りたくなかったり、試行錯誤したい場合などはリポジトリの中に対象の外部パッケージをコピーする方がやりやすいかもしれません。
その場合も同様にgo.modで置き換えます。
go mod edit -replace github.com/EXTERNAL_/PACKAGE@v1.0.0=./PATH_TO_COPY
3. 変更したファイルをリポジトリに追加してoverlayで書き換える
変更が数行程度だと上記の方法が面倒だと感じることがあるかもしれません。
その場合は変更したファイルのみをリポジトリに追加し、goコマンドのoverlayフラグで書き換えることも可能です。
以下のようなoverlay.json
を用意してgo build -overlay=overlay.json
のように指定します。
{ "Replace": { "/GO_MOD_CACHE/PATH_TO_EXTERNAL_PACKAGE/TARGET.go": "/PATH_TO_COPY/TARGET.go" } }
いずれの方法もうまくいったら本家に還元しましょう。