depからgo modへ移行する

昔作ったツールを整理しようと思ったので、ついでにパッケージ管理をgo modにした。

予習

Go Modulesについてふわっとしか知らないので、改めて確認しておく。

以下を参考にした。

とりあえず、

  • 今まで通りGOPATH配下で
  • GO111MODULE=onにする

と良さそうなので、そうした。

作業

ひとまずgo mod initする。

% go mod init
go: creating new go.mod: module github.com/kawaken/funi
go: copying requirements from Gopkg.lock

% cat go.mod
module github.com/kawaken/funi

go 1.12

require gopkg.in/yaml.v2 v2.2.2

go.modが作成された。

不要になるファイルを削除する。

% rm Gopkg.*
rm: remove regular file 'Gopkg.lock'? y
rm: remove regular file 'Gopkg.toml'? y

% rm -fr vendor/

この状態でビルドしてみる。

% go build
go: finding gopkg.in/yaml.v2 v2.2.2
go: finding gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
go: downloading gopkg.in/yaml.v2 v2.2.2
go: extracting gopkg.in/yaml.v2 v2.2.2

 % cat go.sum
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

問題なさそうなので、コミットする。

% git status -s
 D Gopkg.lock
 D Gopkg.toml
?? go.mod
?? go.sum

% git add go.mod go.sum

 % git rm Gopkg.lock Gopkg.toml
rm 'Gopkg.lock'
rm 'Gopkg.toml'

% git commit -m "dep to go mod"
[master e300c2d] dep to go mod
 4 files changed, 8 insertions(+), 51 deletions(-)
 delete mode 100644 Gopkg.lock
 delete mode 100644 Gopkg.toml
 create mode 100644 go.mod
 create mode 100644 go.sum

もともとvendorディレクトリは管理してないんだった。

gopkg.inはどうする?

公式のWikiに以下のように記述されているので問題なさそう。

  1. gopkg.in

Existing code that uses import paths starting with gopkg.in(such as gopkg.in/yaml.v1 and gopkg.in/yaml.v2) can continue to use those forms for their module paths and import paths even after opting in to modules.

おしまい