前置き
事前にWSL2のインストールとその環境下でDocker-composeが動くようにしてください。
フォルダ構成
テストするうえで、以下のフォルダ構成を行います。
./
├── Dockerfile
├── docker-compose.yml
└── golang
└── main.go
各ファイルの中身について
Dockerfile
FROM golang
RUN go get github.com/derekparker/delve/cmd/dlv
WORKDIR /go/src/app
docker-compose.yml
version: '3'
services:
app:
build: .
ports:
- "5050:5050" #delve用のポート
volumes:
- "./golang:/go/src/app"
privileged: true
command: dlv debug --headless --listen=:5050 --log --api-version=2
main.go
package main
import "fmt"
func main() {
i := 0
fmt.Println("hello world")
fmt.Println("hello world")
fmt.Println("hello world", i)
}
VScode設定
launch.jsonファイルを以下のように修正します。
launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch", //ローカル使用
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {},
"args": []
},
{
"name": "Remote", //リモート使用
"type": "go",
"request": "launch",
"mode": "remote",
"remotePath": "/go/src/app", //コンテナ内のパス
"port": 5050, // dlv debugのポートを指定変更可能
"host": "karosu-main", //wslを立ち上げたときに表示されるhost名を指定
"program": "${fileDirname}",
"env": {},
"args": [],
"showLog": true
}
]
}
今回、wsl2のホスト名がkarosu-mainのためそのようにしていますが、人によって違うかもしれませんので、
実際にWslを起動して、hostname
コマンドで調べてみてください。
あと通信が確立しているかの確認はコマンドプロントやpowershellを起動して、ping karosu-main
が通るか確認してください。
作業実行
以下の作業手順に沿って作業を行えば、確認できます。
- wslを起動
- docker-composeを起動
- 実行の構成で
Remote
を選択 - main.goでブレイクポイント指定
- デバッグの開始
デバックのPrint文の出力は、ターミナル上に出力されます。