gopkg.in便利ね
gopkg.in便利なんですが、何かのトラブルの種になっている気配があるので起稿。
詳細については未調査につき、何らかの他の要因によるかもしれません
事象1: version違いのimport
A/alpha.go
package A
import "gopkg.in/foo/bar.v2"
B/bravo.go
package B
import "gopkg.in/foo/bar.v1"
みたいなことが起きる。
- 最初は
"gopkg.in/foo/bar.v1"
で開発していた - 開発メンバーはあまり意識せず
go get ./...
で関連パッケージ"gopkg.in/foo/bar.v1"
を手に入れている。 - 途中で
"gopkg.in/foo/bar.v2"
を使うように更新した。 - 誰かが、
A/alpha.go
をコピーして、B/bravo.go
を作ろう!と考える。 - B/bravo.goを保存したタイミングで、goimportが走ってimport先が自動で
"gopkg.in/foo/bar.v1"
になってしまう。
事象2: CIが怒り出す。
「"github.com/hoge/piyo.xXXXX"なんて無いんですけど!」と怒られる。
一見、事象1のパッケージとは関係なさそうなところで起きる。
$GOPATH/src/github.com/hoge/piyo
を見に行くけど、問題なさそう。
go get ./...
とすると、やっぱり「"github.com/hoge/piyo.xXXXX"なんて無いんですけど!」と怒られる。
先述の事象1の状態を解消(B/bravo.go
のimportを"gopkg.in/foo/bar.v2"
に更新)したら、直った。
原因は調査中。
原因の根幹は未解明。
gopkgのバージョン番号がv1,v2という風に昇順な上に、goimportが若い番号のものを自動で割り当ててしまうことに原因がある・・・のかも。
同名のpackageが、違うURLで存在する場合に何らかの問題が起きる???
とりあえず一旦記事に起こしておく。