Posted at

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

More than 3 years have passed since last update.


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"


みたいなことが起きる。


  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で存在する場合に何らかの問題が起きる???

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