📌

2024/04からGo言語入門したメモ(Mac)

2024/04/15に公開

いまさらながらGolang始めてみた人のメモ
執筆時のバージョンは1.22です

特徴

  • 静的型付けのコンパイル言語
    • コンパイルの後方互換性→Go1.0で書いたコードはGo1.xの間はビルドできる
    • コンパイルと実行が高速
  • 文法がシンプルで冗長な記述が不要、パフォーマンスの良いコードを書きやすい
  • 標準ライブラリや周辺ツールが充実
  • 並行プログラミングが簡単
  • ガベージコレクションなどの自動メモリ管理
  • シングルバイナリ・クロスコンパイル
  • サーバーサイドが得意領域
  • GolangとかGo言語と書かれるが、言語の正式名称は「Go」
  • プログラミング言語として人気は高い
    • TIOBEインデックス2024/04で6位 (Hall of Fame 2回)

https://www.tiobe.com/tiobe-index/

まずは雰囲気をつかむ

A Tour of Go

https://go-tour-jp.appspot.com/welcome/1

最初はここから
p2で言語を選べるが、日本語版は2020頃から更新が止まっている

環境構築は後回しにしてWeb上で進める

なんか難しくてわからない、他の言語を学んだことがない、ポインタって何?
という人はこの辺↓が参考になるかも

https://zenn.dev/ak/articles/1fb628d82ed79b

Go offline(と、環境変数やGOPATHについて)

p3にある「Go offline」はオプションなので飛ばした方が良い
(動かしたい人は↓)

ローカルでGo Tourを動かす方法が書いてあるが、インストールや実行方法が更新されており
英語版と差分がある(そして英語版でも記述がちょっと古い)

go install golang.org/x/website/tour@latest

$GOPATH/binにインストールされるとあるが1.11以降は管理の方法が変更になっている
(さらに1.16以降でデフォルト設定の変更が入っていたりする

  • 1.10以前:標準ライブラリ以外のパッケージは環境変数GOPATH以下で管理
  • 1.11以降:リポジトリのバージョンごとで管理

Goで利用される環境変数は以下で確認できる

$ go env
 :
GOPATH='/Users/$USER/.asdf/installs/golang/1.22.2/packages'

実行

cd /Users/$USER/.asdf/installs/golang/1.22.2/packages/bin
./tour

参考
https://zenn.dev/spiegel/articles/20210223-go-module-aware-mode
https://text.baldanders.info/golang/manage-modules/
https://text.baldanders.info/golang/go-env/

環境構築

公式のインストール方法はこちら
標準でバージョン管理する機能もあるようです
https://go.dev/doc/install

asdfでのインストール

Golangのプラグイン追加

$ asdf plugin add golang
$ asdf install golang latest

インストールされた最新バージョンを確認してglobalに登録

$ asdf list golang
 *1.22.2
$ asdf global golang 1.22.2

設定されているバージョン確認

$ asdf current golang
golang          1.22.2          /Users/<user>/.tool-versions

バージョン確認

$ go version
go version go1.22.2 darwin/arm64

IDE

普通のテキストエディタを使っても良いですが、IDEを使うと警告など出してくれます

GoLand / IntelliJ

有料:30日フリートライアル
https://www.jetbrains.com/ja-jp/go/

VSCode

無料
https://code.visualstudio.com/

Homebrew Caskで入れる場合は↓

brew install visual-studio-code --cask

.goファイルを開くとプラグインのインストール画面が出るので入れます
↑プラグインのページからもインストール可能

View the tools documentation for a complete list of tools the VS Code Go extension depends on. You can install additional tools and update them by using "Go: Install/Update Tools".

必要な拡張機能は都度インストールの案内が出ますが、コマンドパレット(Cmd+Shit+p)の「Go: Install/Update Tools」でまとめてインストールできます

次に読むもの

ビルドと実行方法

  1. ディレクトリを作成したら、↓で必要なファイルを作る
    モジュールパスexample/user/helloの部分は何でも良い
go mod init example/user/hello

モジュールの命名については↓
https://go.dev/doc/modules/managing-dependencies#naming_module

  1. コード作成

  2. 外部パッケージを使う(インポートした)場合、↓でモジュールをダウンロードする

go mod tidy
  1. 実行
go run .

(補足)
コンパイルやインストールするコマンドがあるので↓参照
https://go.dev/doc/tutorial/compile-install

テストの書き方

https://go.dev/doc/tutorial/add-a-test

(参考)

公式チュートリアル
https://go.dev/doc/tutorial

Tutorial: Get started with Goから初めてページ下部右下のリンクから進めないと出てこないページがあったり、リンクに繋がっておらずトップページからしかいけないページがあり若干読みにくいです

以下のような内容も取り扱っています

  • MySQL(DBMS)のアクセス
  • GinによるREST API作成
  • Fuzzing(問題の起きそうなデータをたくさん作ってテスト)
  • 脆弱性診断

さらに理解を深めるために

他の言語から

https://future-architect.github.io/articles/20200311/
https://future-architect.github.io/articles/20201119/
https://future-architect.github.io/articles/20190713/

もうちょっと学ぶ

とほほのGo言語入門
https://www.tohoho-web.com/ex/golang.html
メルカリ公開資料
https://engineering.mercari.com/blog/entry/goforbeginners/
Microsoft公開資料
https://learn.microsoft.com/ja-jp/training/paths/go-first-steps/

公式ドキュメント

TIPS集(ちょっと古い?)
https://go.dev/doc/effective_go
レビューの一般的なコメントのまとめ
https://go.dev/wiki/CodeReviewComments
テストについて
https://go.dev/wiki/TestComments

スタイルガイド

Googleの例
https://google.github.io/styleguide/go/
以下に分かれている

Uberの例(日本語訳)
https://github.com/knsh14/uber-style-guide-ja

逆引き

https://www.how2go.dev/

Discussion