gopkg.in絡みで困ることになる・・・のかもしれない??

gopkg.in便利ね

gopkg.in便利なんですが、何かのトラブルの種になっている気配があるので起稿。

詳細については未調査につき、何らかの他の要因によるかもしれません


事象1: version違いのimport

package A

import "gopkg.in/foo/bar.v2"
package B

import "gopkg.in/foo/bar.v1"

みたいなことが起きる。

  1. 最初は"gopkg.in/foo/bar.v1"で開発していた
  2. 開発メンバーはあまり意識せずgo get ./...で関連パッケージ"gopkg.in/foo/bar.v1"を手に入れている。
  3. 途中で"gopkg.in/foo/bar.v2"を使うように更新した。
  4. 誰かが、A/alpha.go をコピーして、B/bravo.goを作ろう!と考える。
  5. 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で存在する場合に何らかの問題が起きる???

とりあえず一旦記事に起こしておく。