Golang開発環境構築
コンセプト
- ローカル環境に処理系をインストールしない(全てコンテナに集約)
- 開発時はコンテナにボリュームをマウントして
- ホットリロードツールで自動的にビルド
前提条件
- OSSとして公開しないプロジェクト(自社サービスとか)
環境
- Ubuntu 20.04
- Docker
- VS Code
- Remote Containers
ディレクトリ構成
$tree -a -I .git
.
├── .air.toml
├── .env.example
├── .gitignore
├── Dockerfile
├── README.md
├── docker-compose.yaml
├── go.mod
├── go.sum
└── main.go
- ルートディレクトリに
main.go
を配置するスタイル
Dockerfile
FROM golang:1.16.4
# -- Set Working Dir
WORKDIR /app
# -- Set ENV
ENV CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
APP_NAME=XXXXX
# -- install hot reload tool.
RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
# -- Adding Source
ADD . /app
RUN go build -o ${GOPATH}/bin/${APP_NAME}
# -- Build App
CMD air
- 処理系のバージョンは明示的に決めたいのでバージョンタグが付いたものを使用(
latest
は使わない)
- ホットリロードツールとして
air
を利用している
docker-compose.yaml
version: '3.8'
services:
app:
environment:
PORT: ${PORT}
build: .
volumes:
- .:/app
tty: true
ports:
- ${PORT}:${PORT}
モジュールの追加
- ソースコードにimportを追加 && コンテナ内で
go mod tidy
参考資料