🥽

【Hello World⑯】gin @ Go

2024/04/18に公開

ginでGoのWebアプリを作ります

Windows11のDocker環境上で
Go言語のginを使い、Hello Worldアプリを作ります。

環境

Windows 11 Pro 23H2
WLS 2.1.5.0(Ubuntu 22.04.1 LTS)
Docker Desktop 4.29.0
Visual Studio Code

①フォルダ・ファイルを作成

以下の構成でフォルダとファイルを作ります。

フォルダ構成
gin
 ├─app
 │  └─main.go
 ├─compose.yaml   # コンテナ作成時の指示を記載したファイル
 └─Dockerfile     # イメージ作成時の指示を記載したファイル
PowerShell
mkdir gin             ;`
cd gin                ;`
mkdir app             ;`
New-Item compose.yaml ;`
New-Item Dockerfile   ;`
New-Item app/main.go  ;`
code compose.yaml     ;`
code Dockerfile       ;`
code app/main.go
compose.yaml
services:
  gin:
    build          : .
    image          : gin
    container_name : gin
    working_dir    : /app
    command        : bash -c "go mod tidy && go run main.go"
    ports:
      - "8080:8080"
    volumes:
      - ./app:/app
Dockerfile
FROM golang:1.22-bullseye
RUN  apt update && apt upgrade && apt -y install git \
 &&  go env -w GOPROXY=direct \
 &&  git config --global http.sslverify false \
 &&  export GOINSECURE=*
main.go
package main
import (
  "net/http"
  "github.com/gin-gonic/gin"
)
func main() {
  r := gin.Default()
  r.GET("/", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "Hello World by Gin of Go on Docker!",
    })
  })
  r.Run()
}

②プロジェクトを作成

以下のコマンドを実行し、プロジェクトを作成します。
※Dockerのイメージ内でプロジェクトの作成と、ginのインストールを行い、作成されたgo.modgo.sumをホストにコピーします。

PowerShell
docker run -it --rm -v .:/host golang:1.22-bullseye `
bash -c "apt update && apt upgrade && apt -y install git && `
         go env -w GOPROXY=direct && `
         git config --global http.sslverify false && `
         export GOINSECURE=* && `
         mkdir /app && cd /app && `
         go mod init sample && `
         go get github.com/gin-gonic/gin && `
         cp /app/* /host/app/"
作成されるフォルダ・ファイルの構成と「go.mod」の内容
フォルダ構成
go
 ├─app
 │  ├─go.mod
 │  ├─go.sum
 │  └─main.go
 ├─compose.yaml   # コンテナ作成時の指示を記載したファイル
 └─Dockerfile     # イメージ作成時の指示を記載したファイル
go.mod
module sample

go 1.22.2

require github.com/gin-gonic/gin v1.9.1

require (
	github.com/bytedance/sonic v1.9.1 // indirect
	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
	github.com/gin-contrib/sse v0.1.0 // indirect
	github.com/go-playground/locales v0.14.1 // indirect
	github.com/go-playground/universal-translator v0.18.1 // indirect
	github.com/go-playground/validator/v10 v10.14.0 // indirect
	github.com/goccy/go-json v0.10.2 // indirect
	github.com/json-iterator/go v1.1.12 // indirect
	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
	github.com/leodido/go-urn v1.2.4 // indirect
	github.com/mattn/go-isatty v0.0.19 // indirect
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
	github.com/modern-go/reflect2 v1.0.2 // indirect
	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
	github.com/ugorji/go/codec v1.2.11 // indirect
	golang.org/x/arch v0.3.0 // indirect
	golang.org/x/crypto v0.9.0 // indirect
	golang.org/x/net v0.10.0 // indirect
	golang.org/x/sys v0.8.0 // indirect
	golang.org/x/text v0.9.0 // indirect
	google.golang.org/protobuf v1.30.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)

③コンテナを起動

以下のコマンドを実行し、Dockerのイメージを作成してコンテナを起動します。

PowerShell
docker compose up -d

④Hello Worldが表示されることを確認

http://localhost:8080に接続して、Hello Worldが表示されることを確認します。

Discussion