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.yamlの runtime
を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 を参照してください。