餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

Ubuntu Linux (or Mint)のVS CodeでのGo言語のデバッグの設定

統合開発環境Visual Studio Code(以下VSC)でのGo Team at GoogleによるGo拡張の利用のための設定のメモを残しておきます。5年間ぐらい前に人気のGo用の拡張がMicrosoftのものからGo Team at Googleのものに変わったためか、検索される説明の多くが十分でなかったので。

環境変数の変更

~/.bashrcに以下を追記します。

export GOPATH=~/.go
export PATH=$PATH:$GOPATH/bin

以下のようにすれば、再ログインせずに設定変更が反映されます。

source ~/.bashrc

GoとDelveのインストール

Goは言わずものながコンパイラですが、Delveは標準的なGo言語用のデバッガーです。

コンパイラはroot権限でaptでインストールし、デバッガーdelveはユーザー権限でGitHubからソースコードをダウンロードしてコンパイルしてインストールします。

sudo apt install -y golang
go install github.com/go-delve/delve/cmd/dlv@latest

delveは上の環境変数の設定により~/.go以下に配置されます。

Tarballからのインストール

Ubuntuのリポジトリーのバージョンが古く、問題が起きる場合は、Tarballを引っ張ってきて展開します。

cd ~
wget https://go.dev/dl/go1.26.0.linux-amd64.tar.gz
tar zxf go1.26.0.linux-amd64.tar.gz
export PATH=~/go:$PATH:$GOPATH/bin

exportは.bashrcの最後にも追記してきましょう。

VSC/setting.jsonの設定(必須ではない)

開発チームの方針によっては問題が出ますが、今回はフォーマッタの設定もします。

VSCを起動してCTRL + SHIFT + Pでコマンド入力可能にして、settingsと打ち込むと「基本設定: ユーザー設定を開く(JSON)」*1が出てくるので、

    "[go]": {
        "editor.tabSize": 2,
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "golang.go"
    }

挿入する前の行の最後にカンマを入れ忘れないように注意しましょう。

.vscode/tasks.jsonの作成

拡張をインストールしただけでF5を押してデバッガーを起動しようとすると、

Build Error: go build -o /var/tmp/go/__debug_bin416423073 -gcflags all=-N -l .
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)

と言うようなエラーが出ます。go.modをつくれば解決しそうな雰囲気がありますが、必要なのはtasks.jsonとlaunch.jsonです。

ワークプレース(リポジトリー)をつくる度の操作になりますが、.vscode/tasks.jsonをつくります。

学習用途のワークプレースと言うことで、開いているソースコードをコンパイルするように設定し、また、実行ファイルを bin/ 以下にまとめます。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build Go-lang",
      "type": "shell",
      "command": "go",
      "args": [
        "build",
        "-o",
        "${workspaceFolder}/bin/${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": "$go",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    }
  ]
}

.vscode/launch.jsonの作成

開いているソースコードに対応するbin/以下の実行ファイルを動かすように指定します。また、実行する前にtasks.jsonで定義されるビルドを実行するように書いておきます。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Go-lang",
            "type": "go",
            "request": "launch",
            "mode": "exec",
            "program": "${workspaceFolder}/bin/${fileBasenameNoExtension}.exe",
            "preLaunchTask": "Build Go-lang"
        }
    ]
}

終わりに

VSC以外の統合開発環境だと、tasks.jsonとlaunch.jsonに該当する設定は、ウィザードを使って行えたり、デフォルトの動作が規定されていたりするのですが、VSCだと設定を書かないといけない事がほとんどです。生成AIに聞いても動かない設定を教えてきたりするので、意外に初学者キラーな開発環境かも知れません。

*1:もしくはPreferences: Open User Settings (JSON)