あるgoパッケージがgitリポジトリで公開されていて、かつsshでしかアクセスできない状況。

先のエントリで書いたようにパッケージ名からメタ情報を取得できなくてgo getできない。

# 必要に応じてexport GO111MODULE=on
$ go get source.developers.google.com/p/mypj-xxxxx/r/check
go get source.developers.google.com/p/mypj-xxxxx/r/check: unrecognized import path "source.developers.google.com/p/mypj-xxxxx/r/check" (parse https://source.developers.google.com/p/mypj-xxxxx/r/check?go-get=1: no go-import meta tags ())

URLにVCS(git)を示す修飾子を付けることでgo getできるようになるが、

$ go get source.developers.google.com/p/mypj-xxxxx/r/check.git

go getされる側もgo getする側もパッケージ名として「source.developers.google.com/p/mypj-xxxxx/r/check.git」を使う必要がある。

これをgo getする側のgo.modにreplaceを書くことで「.git」の付かないパッケージ名のままアクセスできるようになる。

// go.mod
module source.developers.google.com/p/mypj-xxxxx/r/sample

replace source.developers.google.com/p/mypj-xxxxx/r/check => source.developers.google.com/p/mypj-xxxxx/r/check.git v0.1.0
  
require source.developers.google.com/p/mypj-xxxxx/r/check v0.1.0

記述が二倍になるので数が多いと困るけど、既存のパッケージ名を変更したくない時の回避に。

環境

  • macOS Mojave
  • go 1.12.6