GoLang全然わからん ~インストール編~

2022年4月25日

はじめに

全くGoLangを知らん私が、Windows 11 + WSL2(Ubuntu 21.04) + Visual Studio Codeで勉強していくログです。

記事一覧

やったこと

goのインストール

とりあえずWindows TerminalでWSL2(Ubuntu)を開いて「go」と打つ。

$ go
 Command 'go' not found, but can be installed with:
 sudo apt install golang-go  # version 2:1.13~1ubuntu2, or
 sudo apt install gccgo-go   # version 2:1.13~1ubuntu2

なるほど!apt install goでいいのかー!

と思ってVersionを見ると、1.13とか古そう。Downloadサイトを見ると、1.18.1が本日時点の最新らしい。

Downloads

以下の記事を参考にtarballからインストールを行いましたよ。

ubuntu系Linuxの方へGoのインストールはaptはダメよ

$ wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
$ source .profile
$ go version
$ go version go1.18.1 linux/amd64

よしばっちり。これで私もGopherだ。
Gopherと聞くと、どうしてもこっちを連想してしまう。

早速Hello world

適当なサイトからHello World的なソースを参考にnotepad.exeで作成して実行してみる。

$ cat hello.go
package main

import "fmt"

func main() {
  fmt.Printf("Hello World\n")
}
$ go run hello.go
Hello World

実行ファイルにしてみよう

コンパイルしてみる

$ ls
 hello.go
$ go build hello.go
$ ls -l
 total 1736
 -rwxr-xr-x 1 yotan yotan 1771078 Apr 25 09:49 hello
 -rw-r--r-- 1 yotan yotan      74 Apr 25 09:37 hello.go
$ ./hello
 Hello World

完璧ですね。なんか、実行ファイルのサイズが大きい気もしますが、今は気にしないでおこう。

vscodeで編集

続いてvscodeにGoLangの拡張機能を入れてみよう。

多分これ。

先ほどのhello.goを開くと、「go-outline」「gopls」が無いぞって言われますね。なんだろうこれ。とりあえず今は入れておきましょう。

ホームディレクトリ(今回は /home/yotan)配下にgoディレクトリが作られて、色々と中にファイルやディレクトリが作成されました。
ホームディレクトリ配下に実行ファイルとかインストールされるの嫌いなんですが、まずはこのまま先に進むことにします。

$ ls -l ~/go/*
/home/yotan/go/bin:
total 27944
-rwxr-xr-x 1 yotan yotan  3201227 Apr 25 09:54 go-outline
-rwxr-xr-x 1 yotan yotan 25408808 Apr 25 09:55 gopls

/home/yotan/go/pkg:
total 8
drwxr-xr-x 7 yotan yotan 4096 Apr 25 09:54 mod
drwxr-xr-x 3 yotan yotan 4096 Apr 25 09:54 sumdb

とりあえず、vscode上で私のhello.goが美しく表示され、ターミナルからの実行もできるようになりました。よきかな。

デバッグしてみよう

vscode上で「実行とデバッグ」をやってみると、今度はdlvが無いよ?と言われる。とりあえずinstall allして先に進む。

gccが無いよって叱られる

以下のコマンドでgcc一式をインストールだ。

$ sudo apt install gcc

今度はOKだった。

再度「実行とデバッグ」をクリックすると。。。

今度はビルドエラー。なんでじゃ。

少し調べたところ、モジュールとして公開するための定義「go.mod」を作成する必要があるみたい。とりあえず公開プロジェクトではないので適当に記述してみる。

$ cat go.mod
module myproject/mylibrary

go 1.18

よしよし、今度はデバッガー上でステップ実行もできたぞ。

今回のまとめ

  • C#やPythonでは初期構築(デバッグできるまで)に時間がかかって挫折したが、GoLangは比較的スムーズに構築できたと思う
  • ~/go配下にインストールされるgopls, go-outline, dlvなど良く分かっていないのでこれから調査
  • go.modについてまだ良く判らないので勉強する
  • 今後、基本的な文法を学び、業務でも使える検証用プログラムとかサクっと作れるようになればいいな(httpリクエスト、レスポンス系が中心か)