概要
タイトルがクソ長いですが、忘れないうちにメモメモ。
go mod をオンにしている状態(Go1.13だとデフォルトがオン)で
他で使われているライブラリを変更したとします。その変更によって
このライブラリを使っている別のモジュールに当たりがあるかどうかをPUSHする前に確かめたいというお話です。
Go Modulesが出る前までは、この作業に別に何の問題もありませんでした。全部GOPATHの下にあるので。
Go Modulesをオンにしている状態だと、ライブラリに依存している方で、試そうと思うと一旦ライブラリ自体をコミットしてPUSHして
その後、使っている側で go get -u しないといけないんですよね。自分で作っているライブラリの場合、若干面倒くさい。
ちょっと、情報探してみると、やり方あるみたいなので、ここに自分用のメモです。
サンプル
んで、以下のクソみたいなライブラリがあるとします。このライブラリの名前は「m1」とします。
package m1 func Hello() string { return "hello" }
このライブラリの go.mod は以下のような感じです。
module github.com/devlights/m1 go 1.13
で、上のライブラリを使っている 「m2」というライブラリがいるとします。
そのライブラリは、以下のようなクソコードになってるとします。
package m2 import ( "fmt" "github.com/devlights/m1" ) func World() string { return fmt.Sprintf("%s world", m1.Hello()) }
このライブラリの go.mod は以下のような感じです。
module github.com/devlights/m2 go 1.13 require github.com/devlights/m1 v0.0.0-20191218081345-b794eb66e83d
ライブラリ「m2」のテストコードは以下。
package m2 import "testing" func TestM2(t *testing.T) { expected := "hello world" got := World() if expected != got { t.Errorf("expected: %v\tgot %v\n", expected, got) } }
m1の方のコードに変更が入った
m1のコードの方に変更が入ったとします。
package m1 func Hello() string { return "Hello" }
先頭が大文字になっただけですがw
この状態で m1 をPUSHしないまま、 m2を go test しても当然 Success となります。依存してるライブラリ m1 は、まだPUSHしていないので変わらないから。
m1 側をコミットしてPUSHしてから、m2 を テストすると当然 Fail となります。自分で作っているものなので、面倒だからコミットする前に当たりをテストしたい。
go.mod に replace 設定を追加する
こんなときは、以下のようにするといいみたいです。
m2 側の go.mod に replace 設定を入れます。
$ go mod edit -replace github.com/devlights/m1=/path/to/m1
今回の場合、ディレクトリを兄弟みたいな位置においているので
go mod edit -replace github.com/devlights/m1=../m1
としました。すると、 m2 の go.mod が以下のようになります。
module github.com/devlights/m2 go 1.13 require github.com/devlights/m1 v0.0.0-20191218081345-b794eb66e83d replace github.com/devlights/m1 => ../m1
これで、m2 の下で go test とすると、まだ m1 をPUSHしていない状態で、 テストが Fail してくれます。
go.mod の replace 設定を削除する
上で設定した replace 設定を削除するには、以下のようにします。
$ go mod edit -dropreplace pkg-name
今回だと
$ go mod edit -dropreplace github.com/devlights/m1
ってします。そうすると、go.mod が
module github.com/devlights/m2 go 1.13 require github.com/devlights/m1 v0.0.0-20191218081345-b794eb66e83d
って感じで元に戻ります。
今回のサンプルで作った m1とm2っていうクソコードたち。githubにアップしてあります。
ご自身でリポジトリ作って試してみるの面倒だったら、よかったらお使いください。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場