【Go言語】【book】「みんなのGo言語」の学習記録

下記の「みんなのGo言語」を使った学習記録のページです。
 
以前、Vimテクニックバイブル ?作業効率をカイゼンする150の技 を購入して読んだときに、Kaoriya さまのサイトで「みんなのGo言語」を薦めておられた記憶があったので、改めて書評を拝見し購入しました。
 

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

上記の書評ページに記されていますが、1章全体を通しての感想は、各章の連携の取れていなさみたいな不備はあるものの、とても実践的な内容で、最初から 2冊めのgolang参考書 として、とても面白い、オススメしたい本でした。
また読み進める順番としては 1章 → 4章 → 6章 → 3章 → 2章 → 5章 が適切だと思われます。読む際には参考にしてみてください。

https://www.kaoriya.net/blog/2016/09/03/:title:Kaoriyaさまによる「みんなのGo言語」の書評

私は上記の書評に書かれている順(1章 → 4章 → 6章 → 3章 → 2章 )で学習しようかと思います。



第1章 Goによるチーム開発のはじめ方とコードを書く上での心得(松木雅幸)
 1.1 開発環境の構築 
 1.2 エディタと開発環境 
 1.3 Goをはじめる 
 1.4 Goらしいコードを書く 

第2章 マルチプラットフォームで動作する社内ツールのつくり方Windows(mattn)
 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 テストの実践的なテクニック

 
 

1.1

 
$GOPATH の設定

$HOME/.config/fish/config.fish

# Golang
if test ! -d $HOME/go
  mkdir $HOME/go
end
set GOPATH $HOME/go

if test ! -d $GOPATH/bin
  mkdir $GOPATH/bin
end
set PATH $PATH $GOPATH/bin

 
go get による外部パッケージのインストール

対話式実行ツール gore のインストールと関連パッケージのインストール

% go get github.com/motemen/gore
% go get github.com/nsf/gocode
% go get github.com/k0kubun/pp
% go get golang.org/x/tools/cmd/godoc

gore は以下のようにして使用するらしい。(戻りが 12, nil の2つ)

% gore -autoimport
gore version 0.3.0  :help for help
gore> fmt.Println("Hello World")
Hello World
12
<nil>

gore> (Ctrl-d で終了する)

 
 

1.2

 

gofmt

フォーマッタ gofmt が同梱されている。
「-w オプション」を付与することで上書きモードでフォーマットしてくる。
個人的にソフトタブは使いたくないが、ルールのようなので導入することにした。

% which gofmt
/snap/bin/gofmt

% gofmt -w sample.go

 

goimport

使用するパッケージを import に追加し、使用しないパッケージを import から除外してくれるツール。

% go get golang.org/x/tools/cmd/goimports

 

go vet

以下のようにすれば現在地以下すべてのファイルのチェックができる模様。
【Go言語】【book】「WEB+DB PRESS Vol.82」を使った学習記録 - 4f938672-cb1c-4c5a-8233-192c4ec901df で作成したコードに対して実行したところ、次のように警告を受けた。

% go vet ./...
1.3/myproject/src/main/main.go:6:2: cannot find package "gosample" in any of:
	/snap/go/2635/src/gosample (from $GOROOT)
	/home/neko/work/book_golang_minna_no_Go/src/gosample (from $GOPATH)

 

golint

lint の Go言語版であり、go vet 同様使う方が良いらしい。
デフォルトでは golint は存在しなかったので、sudo apt install -y golint で別途導入した。

% golint ./...

 
 

1.3

 
新規プロジェクト myproj を作成する場合

GitHub 上に https://github.com/nekochango が存在しているものとする。

ローカル上では次のように展開すること。

$GOPATH/src/github.com/nekochango/myproj

コード内の package は myproj が良い。