Go Module 介紹

通常我們撰寫Go時,會把原始碼放在$GOPATH/src目錄下,但這常常與許多程式設計師的習慣不同,大多數人都習慣將會用到的模組仿在專案目錄下。

範例

- sherrydb
    -- mysql
    example.go
    README.md
    makefile

初始化 go mod

go mod init github.com/asccclass/sherrydb

執行完後,會在目錄下多出:go.mod 檔案,內容只有短短行:

module github.com/asccclass/sherrydb

go 1.12

接下來執行 go build ./.. ,此指令會將所有用到的模組都寫入到 go.mod 中,並產生 go.sum檔案。可以使用下列指令列出所有使用到的模組級版本號:

go list -m all

開發階段

  • 先將程式碼 git clone 下來後,進入專案目錄
  • 執行 go mod download 就可以自動將該專案對應的版本下載下來使用

若使用自性開發的模組

通常自訂套件import時會使用 ./packagename,這時候在 go run xxx.go 時go mod 就會出現類似的錯誤:

build github.com/asccclass/musicserver: cannot find module for path _/home/pi/development/golang/musicserver/libs/soundcontrol

解決方式就是把 ./xxx 改為 github.com/accname/projectname/packageName 就可以了。

部屬階段

FROM golang:1.11-alpine as build_base
RUN apk add bash ca-certificates git gcc g++ libc-dev
WORKDIR /app
# Force the go compiler to use modules
ENV GO111MODULE=on
# We want to populate the module cache based on the go.{mod,sum} files.
COPY go.mod .
COPY go.sum .
RUN go mod download

FROM build_base AS server_builder
COPY . .
ENV GOOS=linux
ENV GOARCH=amd64
RUN go build -o /facebook-account-kit -tags netgo -ldflags '-w -extldflags "-static"' .