SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

GO言語(golang)1.20をはじめる①:開発環境(VSCode)とワークスペースを用意する

f:id:arakan_no_boku:20210412005751p:plain

目次

GO言語(golang)1.20をはじめる①

最初に、GO言語(golang)をインストールします。

こちらのサイトからWindowsインストーラをダウンロードして実行します。

golang.org

僕は、Windows11(64ビット)なので「go1.20.4.windows-amd64.msi」をダウンロードしました。

1.20.4の部分はバージョンで、2023/06/01時点の最新です。

ウィザードで悩むところはほぼありません。

Next&installで実行していけばOKです。

終了したら、コマンドプロンプト(CMD)で以下を実行して動作確認します。

go version

開発環境(VSCode)を用意する

開発にはVSCodeVisual Studio Code)を使います。

code.visualstudio.com

以後、VSCodeがインストールされている前提です。

VSCodeをGO開発用に設定する方法は以下のページを見てやるのが早いです。

learn.microsoft.com

Goツールを更新する・・までやったら、以下のようにtoolsのインストールが成功のメッセージがでていることを確認します。

ワークスペースを用意する:GOPATHの設定

GO言語でプログラミングをするための作業フォルダを作ります。

この作業フォルダが今後作業する「ワークスペース」になります。

インストールすると「GOPATH」が自動的に設定されていて、以下のように「GOPATH」の設定内容を確認できるので、そこを作業フォルダにするのでもOKです。

go env GOPATH

作業フォルダを別に作る場合は、環境変数「GOPATH」を変更します。

GOPATHの変更は

go env -w GOPATH=<path>

というやり方もあるようですが、Windowsだと

warning: go env -w GOPATH=... does not override conflicting OS environment variable

というエラーになって、変更できませんでした。

なお、GOPATHを正しく設定しておかないと、VSCodeで実行やデバッグをするときにDAP Serverがエラーになって正しく動かないなど、問題が多発します。

ワークスペースを用意する:ワークスペースの設定

ワークスペースの設定を行います。

作業フォルダ(ワークスペース)で以下のコマンドを実行します。

go work init

すると、作業フォルダ(ワークスペース)に「go.work」ファイルができます。

中身は以下のようにバージョンだけが書いてあるテキストファイルです。

なぜ、これが必要かの説明は以下に書いてあります。

github.com

ポイントを訳します。

モジュールというGO言語の用語が使われています。

ここではその意味とか説明はしませんので「ソースコードを置いたフォルダ」くらいに脳内変換してみといてください。

Go 1.18 以降、go コマンドは go.work ファイルによる複数モジュールのワークスペースをネイティブにサポートするようになりました。これらのファイルは gopls@v0.8.0 以降の gopls で認識されます。

Go 1.18 以降で複数のモジュールで作業する最も簡単な方法は、作業したいモジュールを含む go.work ファイルを作成し、ワークスペースのルートを go.work ファイルがあるディレクトリに設定することです。

今回はバージョン1.20なのでこの対象です。

この「go.work」ファイルを作成しないで、例えば、helloフォルダなどを作って、そこでソースを書いたりすると、以下のようなエラーになって進みません。

gopls was not able to find modules in your workspace.
When outside of GOPATH, gopls needs to know which modules you are working on.

goplsはワークスペースにあるモジュールを見つけることができませんでした。
GOPATHの外では、goplsはあなたがどのモジュールで作業しているかを知る必要があります。

作業フォルダ(ワークスペース)のフォルダ構成

GO言語のワークスペースの基本フォルダ構成は以下です。

binとpkgは、GOのコマンド(go mod tidy とか)を実行すると勝手に作られます。

そのようなコマンドを使わないので、現時点では「src」フォルダと「go.work」ファイルのみがある感じで問題ありません。

でも、意識することなく「bin」「pkg」フォルダが作成・更新されるので、それと同レベルで「hello」などソースを置くフォルダをきるとごちゃごちゃします。

なので「src」をフォルダを作って、その下にソースコードを置くフォルダを切っていくのが一般的です。

go.workができたので、作業フォルダの「src」の下に「hello」フォルダを作成し、そこをカレントにして、以下のコマンドを実行します。

go mod init boku/hello

上記の「boku/hello」の部分は適当に変更してください。

公開を前提とする場合は「boku」の部分にGitのリポジトリ識別で「hello」がプロジェクト名みたいに、GO言語が探せるように正確に書く必要があります。

例えば、GitHubリポジトリに置くのであれば、

github.com/boku/study-golang/module/hello

みたいにするのですが、今回はお試しなので、適当に「boku」とかしてます。

ワークスペースを用意する:go.workの編集

ワークスペースのルートに戻り、作成した「go.work」ファイルに以下を追記します。

.\src\hello

ソースコードを置いたフォルダを、ワークスペース(作業フォルダ)のルートからの相対パスで指定しているだけです。

これを「go mod init」する前にやると、以下のようなエラーになります。

directory .\src\hello does not contain a module

The system cannot find the file specified.

設定が正しいかを「Hello World」で確認する

helloフォルダをカレントにしてVSCodeで以下のソースを入力します。

package main
import "fmt" func main() { fmt.Println("hello world") fmt.Println("byebye world") }

上記を、Helloフォルダ以下に「hello.go」で保存します。

ターミナルでHelloフォルダをカレントにして、以下を実行します。

go run hello.go

または

go run .

うまく動けば、以下のように表示されます。

「go run hello.go」 だと動くけど「go run .」だとエラーになる場合は、GOPATHの設定が間違ってるので、修正しといてください。

VSCodeで実行

今度はVSCodeで動かしてみます。

hello.goを開いた状態にして、まずは、デバッグなしのほうで。

うまく設定できてれば、こんな感じになるはずです。

ここでエラーになるようなら、前の設定手順を見直します。

VSCodeデバッグブレークポイントで止める

「fmt.Println("hello world") 」の行にブレークポイントを設定します。

赤丸のあたりをクリックするか、行を選択して、右クリックメニューで「Add BreakPoint」すればいけます。

Runメニューで「Start Debugging」します。

このボタンを押して開始します。

うまく設定できていれば、以下のようにブレークポイントで停止します。

あとは。

  • 続行:F5
  • ステップオーバー:F10
  • ステップイン:F11
  • ステップアウト:Shift+F11
  • リスタート:Ctrl+Shift+F5
  • ストップ:Shift+F5

ですすめていけばいいです。

とりあえず、今回は「F5」で終わらせます。

ちゃんと実行して、結果も出力されてます。

最初の一歩としては、こんなもんだと思います。

おまけ:EXEも作れる

GO言語はコンパイル言語なので、「EXEファイル」も作れます。

go build hello.go

すると、Helloフォルダに「hello.exe」ができます。

このEXEを実行しても、同じ結果が表示されます。

今回はこんなところで。

ではでは。