前提
M1 Macbook
この記事で示す手法は2通りです。
HomeBrewを用いた環境構築
Dockerを用いた環境構築
HomeBrewもしくはDockerの環境構築が済んでいることを前提とします。
参考記事が山のようにあると思うので検索してみたください
Home Brew
brew i go
以上です。
Goenvの利用やGOPATHの設定は必要ないです。
Goは後方互換性が確保されているので、Versionはガンガン上げて良いです。
GOPATHに関して昔はいろいろやる必要があったみたいですが、現在(go 1.19)では必要無くなったらしい
シンプルで良いですね。むしろシンプルすぎ。
余談ですが、Goの実行は下記コマンドです
go run main.go
Docker
docker-compose.ymlを使います。
Dockerfileだけを使う方法もありますが、serviseが1つでもyml使った方が色々便利ですよね。
構成は下記
backend
- Dockerfile
- main.go
docker-compose.yml
Dockerfile
# ベースイメージをDockerHubを見て決める alpineがお気に入り軽くて良い
FROM golang:1.19.3-alpine
# alpineはapkを使う goはgitが必要なので入れておく
RUN apk updata && apk add git
# 作業ディレクトリを作成 & 設定 (execの実行場所)
WORKDIR /app
# Build時に既存のコードをコピーする
COPY ./backend /app
docker-compose.yml
version: "3"
services:
web:
build:
context: ./backend
dockerfile: ./backend/Dockerfile
container_name: "web"
tty: true
volumes:
- ./backend:/app
main.go
package main
import "fmt"
func main() {
fmt.Println("コンテナ起動してるよ!!")
}
ファイルが準備できたら下記でコンテナを立ち上げましょう。
docker compose builddocker compose up -d
この時点でコンテナが立ち上がったのでmain.goを実行してみましょう
docker compose exec web go run main.go
APIサーバーを作る時は??
Dockerfileの最後に CMD ["go", "run", "main.go"]を加えてください。
ymlにポートを指定してください
コンテナ立ち上げ時に-d オプションをつけないでください
終わりに
最近Goに興味があってちょっと触ってみたんですが、自分は結構気に入りました。
なんと言ってもシンプルですね。 API開発時もFWやライブラリありきで開発する言語がある中Goはそんなこともないですし
勉強していたら総合的な力が上がっていきそう
Dockerに関して
WORDKRの前に RUN mkdir /appをしていませんが、なかったら自動で作成してくれるので必要ないです。
contextってなんだろ?と悩んだ時に下記記事が解決してくれました。 ありがとうございます。