Golang +VSCode環境構築(Mac編)

今回は、GolangをVSCodeを使った開発環境の構築手順を書きます。

私は、地図データ形式を変換するプログラムを主にPythonで作成していますが、”CやC++を置き換える言語を目指す”というGo言語を使えば処理性能の向上が期待できるのかと思い使ってみることにしました。

Goの環境構築については、様々なサイトに情報がありますが、情報が古かったりVSCodeに開発環境を構築するまでの手順が示されていなかったりしたので、本記事にまとめようと思います。

今回は以下の環境にGoの開発環境を構築します。

  • MacMini(M1)+BigSur11.4
  • VSCode May 2021 (version 1.57)

Goのインストール

Goは、以下のサイトからインストール物件をダウンロードしてインストールします。

https://golang.org

https://golang.org からダウンロードページへ

"Download Go"をクリックします。

Macの場合、Intel版とArm版の2種類のインストーラがあり、"Featured downloads"(注目のダウンロード)にはIntel版が表示されています。
M1-Macの場合は、"Stable versions"からarm64版のインストーラ(go1.16.5)をダウンロードします。

Stable versionsからマシンに合わせたインストーラをダウンロード

今回はデフォルトのままインストールしたので、画面キャプチャや説明は割愛します。

Goのインストール画面
インストール完了画面

Goが正常にインストールできたか確認するためには、以下のコマンドを実行します。

% which go
/usr/local/go/bin/go
% go version
go version go1.16.5 darwin/arm64

なお、Macであれば、homebrewでもインストールできます。
実行イメージは以下の通りです。

% brew install go
Updating Homebrew…
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
ciphey envoy@1.17 multi-git-status sqsmover
==> Updated Formulae
Updated 124 formulae.
==> New Casks
final-fantasy-xiv-online tabby
midiview vial
==> Updated Casks
Updated 81 casks.
==> Deleted Casks
terminus
==> Downloading https://ghcr.io/v2/homebrew/core/go/manifests/1.16.5
################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/go/blobs/sha256:416c5e2b7247c78
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
################################################################## 100.0%
==> Pouring go--1.16.5.big_sur.bottle.tar.gz
🍺 /usr/local/Cellar/go/1.16.5: 9,957 files, 503.6MB
takamotokeiji@Savoie ~ % go version
go version go1.16.5 darwin/amd64

環境設定

goインストール後の環境設定は、以下の2つを行います。

  • 環境変数の設定
  • ディレクトリの作成

環境変数の設定

環境変数の設定は、PATH環境変数へのパス追加とGOPATHの設定を行います。
私は、.zshrcに以下の2行を追加しました。

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

環境変数GOPATHには、goコマンドを使用してインストールした拡張モジュールなどがインストールされます。
また、ネット上の情報では$HOME/goを指定するケースが多いですが、任意のディレクトリで構いません。

ディレクトリの作成

先ほど決めた環境変数GOPATH配下に、以下のように3つのディレクトリを作成します。

$GOPATH
 ├── bin
 ├── pkg
 └── src

コマンド的には以下のようになります。

% cd
% mkdir -p go/bin
% mkdir -p go/pkg
% mkdir -p go/src  <- おそらく不要

srcは、推奨の開発ディレクトリですので、作成しなくても問題ないと思われます。

VSCodeの開発環境の構築

VSCodeの開発環境は、以下の手順で構築します。

  • Goの拡張機能のインストール
  • ソースコードの作成
  • go modコマンドの実行

Goの拡張機能とツールのインストール

VSCodeの拡張機能を”go”で検索し、"Rich Go language support for Visual Studio Code"をインストールします。

次に、goのコードアシストなどのツール類をインストールします。
コマンドパレット(表示 -> コマンドパレット)に、"Go:Install/Update Tools"と入力し、goのツール類をインストールします。

追加の拡張モジュールをすべてインストール

この操作により、goコマンド(go install)を使って$GOHOMEのbinやpkgに開発に必要なツール類がインストールされます。

$GOHOMEにインストールされたツール類

ソースコードの作成

ここまでの作業で、VSCodeおよびgoの開発環境の設定が終了しました。
次に、"$GOHOME/src"に任意のディレクトリを作成し、ソースコードを作成します。("$GOHOME/src"以外のディレクトリでも問題ありません。)

私は、ディレクトリhelloを作成し、goのホームページに表示されている以下のコードをコピーして、hello.goを作成しました。

// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

この時点で、コードアシストが可能となっています。

VSCodeによるコードアシスト

go modコマンドの実行

ここまでの作業でコード作成までは可能となりましたが、VSCode上でデバッグ実行はできません。
デバッグ実行をするためには、ソースディレクトリにファイルgo.modを作成し、作成したモジュールをgoに認識させなければなりません。

ファイルgo.modは、goコマンドにて作成します。
具体的には、ソースコードが存在するディレクトリで以下のコマンドを発行します。

% go mod init hello

ファイルgo.modの内容は以下のようなテキストファイルです。

module hello

go 1.16


VSCodeによるデバッグ実行

ここまでで、環境構築作業が終了しましたので、先ほどのhello.goを使ってVSCode上でデバッグ実行を行います。

他の言語の開発と同様に、VSCodeにてF5キー押下により、ビルドおよびデバッグ実行が行われます。
初回のビルド時には、以下の実行許可確認画面が表示されます。

実行許可確認画面

実行が成功すると、以下のようにコンソールにPrintln関数で指定した文字が表示されます。

実行結果

また、以下のようにブレークポイントの設定もできるようになります。

ブレークポイント中の画面

まとめ

ここまで、VSCode+Goの環境構築を行いました。
私もネット上で調べながら作業しましたが、Pythonのようにサクッと環境構築できるわけではなく、多少手がかかる印象を受けました。
このあたりは、Goの普及に伴って改善されていくように思います。

一つ未解決の問題がありまして、私の自宅の環境では、go install時に以下のエラー(golang.org/x/tools/cmd/goimports@latestが取得できずにタイムアウト)が発生ました。

自宅で使用しているプロバイダー(Asahinet)が原因と判断し、PCを事務所(プロバイダーはJCOM)に持ち込んで同じ作業を実施したところ、問題なくインストールできました。。

% go install golang.org/x/tools/cmd/goimports@latest
go: downloading golang.org/x/tools v0.1.4
go install golang.org/x/tools/cmd/goimports@latest: golang.org/x/tools@v0.1.4: read tcp [2405:6582:2760:4200:c94f:5100:11c8:1845]:49572->[2404:6800:4004:80c::2011]:443: read: operation timed out

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

thirteen − thirteen =