GeekFactory

int128.hatenablog.com

Go Modulesに移行した

GitHubで公開しているツールをGo Modulesに移行したので、やったことをメモしておきます。

ソースコード

これまではGOPATHの内側(e.g. ~/go/src/github.com/int128/example)に作業フォルダを置く必要がありましたが、Go Modulesに移行するとGOPATHの外側で作業できるようになります。

# フォルダをGOPATHの外側に移動
mv ~/go/src/github.com/int128/example ~/repo/example
cd ~/repo/example

# go.modの生成
go mod init

# 依存関係をgo.modに追加(go.sumも生成される)
go build -v

新しく生成されたgo.modとgo.sumをコミットしたら完了です。vendoringしていた場合は vendor を削除します。

詳しくは Modules · golang/go Wiki · GitHub を参照してください。

CircleCI

これまではGOPATHに合わせて作業フォルダを配置していましたが、Go Modulesに移行すると適当な場所でOKになります。config.ymlがだいぶ簡潔になります。

version: 2
jobs:
  build:
    docker:
      - image: circleci/golang:1.11.1
    steps:
      - checkout
      - run: go get golang.org/x/lint/golint
      - run: golint -set_exit_status ./...
      - run: go vet
      - run: go test -v ./...

Dockerfile

前項までと同様に、WORKDIRを自由に指定できるようになりました。

FROM golang:1.11.1-alpine AS builder
RUN apk update && apk add --no-cache git gcc musl-dev
WORKDIR /build
COPY . .
RUN go install -v

FROM alpine
RUN apk update && apk add --no-cache ca-certificates
USER daemon
COPY --from=builder /go/bin/example /
CMD ["/example"]

App Engine

app.yamlruntime をGo 1.11に変更します。

runtime: go111
handlers:
- url: /.*
  script: _go_app

他にも main が必須になるなどの変更があります。詳しくは Migrating your App Engine app from Go 1.9 to Go 1.11  |  App Engine standard environment for Go 1.11 docs  |  Google Cloud を参照してください。