Go
golang

みんなのGo言語学習メモ

http://gihyo.jp/book/2016/978-4-7741-8392-3
みんなのGo言語を学習した際のメモ
随時更新予定


第1章Goによるチーム開発のはじめ方とコードを書く上での心得

1.1 開発環境の構築

https://github.com/motemen/gore
GoでREPLといえばgoreとのこと
(2018/04/13)
下記に分割しました。

$GOPATH管理
https://github.com/motemen/ghq
リポジトリ間の移動
https://github.com/peco/peco
利用例:
$ cd $(ghq list --full-path | peco)
$ godoc $(ghq list | peco) | less

リリースビルド版のインストール
https://github.com/Songmu/ghg

1.2 エディタと開発環境

goimports
https://godoc.org/golang.org/x/tools/cmd/goimports
goimports高速化
https://github.com/monochromegane/dragon-imports

1.3 Goをはじめる

A Tour of Goを繰り返しやってみる
・以前できなかったExerciseができるようになっていたり、新たな発見があるかも

testdataや_で始まるディレクトリは、Goのパッケージとみなされない

依存管理
https://github.com/Masterminds/glide
利用例:
go test $(glide novendor)

タスクランナーとしてMakefileを使う
・タスクが複雑になりそうな場合は、スクリプトにまとめる
・_toolsディレクトリに配置し、タスクからそのスクリプトを呼び出す

1.4 Goらしいコードを書く

Effective Go
https://golang.org/doc/effective_go.html

stringsパッケージ
https://godoc.org/strings

regexp.Compile
https://godoc.org/regexp#Compile
regexp.MustCompile
https://godoc.org/regexp#MustCompile

可能な限りstructでtypeを宣言する
・typoをコンパイル時に検出できる
・メソッドを追加できる

mapへのアクセス時には排他制御に気をつける
・複数のgoroutineから同時にアクセスした場合など

sync.RWMutex
https://godoc.org/sync#RWMutex

巨大なstructを作らない。継承させようとしない
・再利用可能な小さな部品を組み合わせてデータ構造を定義する

runtime.NumGoroutine
https://godoc.org/runtime#NumGoroutine
runtime.ReadMemStats
https://godoc.org/runtime#ReadMemStats

各種メトリクス取得
https://github.com/fukata/golang-stats-api-handler


第2章マルチプラットフォームで動作する社内ツールのつくり方
2.1 Goで社内ツールをつくる理由
2.2 守るべき暗黙のルール
2.3 TUIもWindowsで動かしたい
2.4 OS固有の処理への対応
2.5 がんばるよりもまわりのツールに頼る
2.6 シングルバイナリにこだわる
2.7 Windowsアプリケーションの作成
2.8 設定ファイルの取り扱い
2.9 社内ツールのその先に

第3章実用的なアプリケーションを作るために
3.1 はじめに
3.2 バージョン管理
3.3 効率的なI/O処理
3.4 乱数を扱う
3.5 人間が扱いやすい形式の数値
3.6 Goから外部コマンドを実行する
3.7 タイムアウトする
3.8 シグナルを扱う
3.9 goroutineの停止

第4章コマンドラインツールを作る
4.1 なぜGoでCLIツールを書くのか?
4.2 デザイン
4.3 flagパッケージ
4.4 サブコマンドを持ったCLIツール
4.5 使いやすく,メンテナンスしやすいツール

第5章The Dark Arts Of Reflection
5.1 動的な型の判別
5.2 reflect パッケージ
5.3 reflect の利用例
5.4 reflect のパフォーマンスとまとめ

第6章Goのテストに関するツールセット
6.1 Goにおけるテストのあり方
6.2 testingパッケージ入門
6.3 ベンチマーク入門
6.4 テストの実践的なテクニック