LoginSignup
0
2

More than 1 year has passed since last update.

【Go(Gin)✕Docker✕delve✕vsCodeでデバッグできるようにする最小構成】

Posted at

ディレクトリ構成

Goアプリケーションはapplicationディレクトリ以下にある。
*(アスタリスク)で囲んでいるファイルがポイント。

.
├── .vscode
│   └── **launch.json**
├── README.md
├── application
│   ├── **Dockerfile**
│   ├── controllers
│   ├── db
│   ├── go.mod
│   ├── go.sum
│   ├── main.go
│   ├── models
│   ├── server
│   ├── services
│   ├── **start.sh**
│   ├── tests
│   ├── tmp
│   └── vendor
├── **docker-compose.yml**
└── tmp

docker-compose

  • 8080:8080はもともとあったアプリケーション用のport。

  • 2345:2345をデバッガ用のportとして追記。

version: '3'
services:
  api:
    ports:
      - 8080:8080
      - 2345:2345

Dockerfile

FROM golang:1.16

WORKDIR /go/src/app/application

COPY go.mod ./
COPY go.sum ./

RUN go mod download

COPY . .

EXPOSE 8080

COPY start.sh /usr/local/bin/start.sh
RUN chmod 775 /usr/local/bin/start.sh
CMD ["start.sh"]

start.sh

DEBUG=dap DEBUG_PORT=2345 docker compose up -d
このコマンドでデバッグのためのコマンドを実行してくれる。
(環境変数によって処理を分岐)
コマンドの詳しい意味は参考記事を閲覧してください。

#!/bin/bash

# DEBUG=dap DEBUG_PORT=2345 docker compose up -d  でリモート接続用コマンドを実行できる
if [ "${DEBUG}" = "dap" ];then
  go build -gcflags='all=-N -l' -o app
  dlv dap -l 0.0.0.0:${DEBUG_PORT} --log --check-go-version=false
elif [ "${DEBUG}" = "rpc" ]; then
  dlv debug --continue --check-go-version=false --accept-multiclient --headless -l 0.0.0.0:${DEBUG_PORT} main.go
else
  go run main.go
fi

launch.json

参考にした記事ほど複雑な設定をせずともデバッグを開始できました。

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Launch Package",
        "type": "go",
        "request": "launch",
        "mode": "auto",
        "program": "${fileDirname}"
    }
    ]
}

コンテナがしっかり立ち上がるまで待たないとビルドエラーみたいなのがでて混乱するので、コンテナ立ち上がり後はしっかり待つようにしたほうがいいです。(せっかちなので困惑しました)

参考記事

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2