目次
第1章 プログラミング言語Goとは
- 1.1 Goの簡単な歴史
 - 1.2 Goの立ち位置
 - 1.3 Goが利用される場面
- 標準でUTF-8をサポート
 - マルチプラットフォーム
 - 並行処理の扱いやすさ
 - ストリーム指向
 - シングルバイナリ
 
 - 1.4 教育用途としてのGo
 - 1.5 なぜGoが使われるのか
- コンパイルの速さ
 - レビューのしやすさ
 - 周辺ツールの充実
 - パッケージ公開の簡単さ
 - libc非依存
 - 共同開発でのスキル差
 
 - 1.6 まとめ
 
第2章 開発環境の準備
- 2.1 Goコンパイラのインストール
- [COLUMN]GOROOT? GOPATH?
 
 - 2.2 開発環境のセットアップ
- Visual Studio Code
 - Vim
 - Goland
 
 - 2.3 まとめ
 
第3章 基本的な文法
- 3.1 プロジェクトフォルダ
 - 3.2 Go言語の特徴
 - 3.3 静的な型
 - 3.4 基本的な構文
- 変数宣言
 - const(定数宣言)
 - iota(列挙)
 - 命名規則
 - 関数呼び出し
 - 条件分岐
 - ループ
 - 配列とスライス
 - 文字列
 - map
 - type(型宣言)
 - struct(構造体)
 - メソッド
 - ポインタ
 - interface{}またはany
 - コンストラクタ
 - インターフェース
 - defer
 
 - 3.5 goroutine(ゴルーチン)
- channel(チャネル)
 - 制御構文(select)
 
 - 3.6 Goモジュールとは
- go.modの配置
 - replace
 - go install
 
 - 3.7 プロジェクトレイアウト
 - 3.8 lint文化
- go vet
 - revive
 - golangci-lint
 
 - 3.9 go fmt
 - 3.10 まとめ
- [COLUMN]おまじない
 
 
第4章 基本テクニックとベストプラクティス
- 4.1 ビルトイン関数
- printとprintln
 - panicとrecover
 - [COLUMN]Explicit is better than implicit, Simple is better than complex
 - init関数
 
 - 4.2 パッケージ
- fmtパッケージ
 - logパッケージ
 - encoding/jsonパッケージ
 - netパッケージ
 - timeパッケージ
 - pathパッケージとpath/filepathパッケージ
 - osパッケージ
 - ioパッケージ
 - contextパッケージ
 
 - 4.3 build constraints
- ファイル名による指定
 - +build(またはgo:build)コメントによる指定
 - [COLUMN]マルチプラットフォーム向けアプリケーションの開発テクニック
 
 - 4.4 cgo
- pkg-configを使って複雑なコンパイルオプションに対処
 
 - 4.5 go:embed
 - 4.6 Functional Options Pattern
 - 4.7 Builder Pattern
 - 4.8 internalパッケージ
 - 4.9 Embedded struct
 - 4.10 go run
 - 4.11 まとめ
 
第5章 Webアプリケーションの開発に必要な要素
- 5.1 net/http
- 基本の使い方
 - ルーティング
 - [COLUMN]Method Value
 - ファイルのサーブ
 
 - 5.2 html/template
- struct
 - range/end
 - if/else/end
 - with/else/end
 - template.HTML
 - FuncMap
 - template.Parse
 - define/template
 
 - 5.3 net/smtp
 - 5.4 まとめ
 
第6章 速いプログラムのためのテクニック
- 6.1 並行と並列
 - 6.2 goroutine
 - 6.3 channel
 - 6.4 非同期パターン
- ジェネレータ
 - 合流処理
 - 先着処理
 - タイムアウト処理
 - 停止処理
 - スロットリング(throttling)
 
 - 6.5 まとめ
 
第7章 テストにおけるテクニック
- 7.1 テストの考え方
 - 7.2 Goのテストの基本
- Table Driven Tests
 - t.Skip/t.Skipf
 - setup/teardown
 - t.Short
 - t.Parallel
 - テストデータ
 - カバレッジ
 
 - 7.3 便利なテクニック
- テンポラリディレクトリ
 - 環境変数
 
 - 7.4 Fuzzingテスト
 - 7.5 まとめ
 
第8章 ベンチマークにおけるテクニック
- 8.1 「推測するな、計測せよ」
 - 8.2 ベンチマークの基本
 - 8.3 ベンチマークの比較
- 改善の前と後の比較
 - 異なる実装の比較
 
 - 8.4 プロファイリング
 - 8.5 まとめ
 
第9章 GoによるCLIアプリケーション開発
- 9.1 システムのコンセプト
 - 9.2 データベース登録プログラム
- [COLUMN]プログラムを作る手順
 - ZIPファイルのURL一覧を得る
 - ZIPファイルを展開する
 - データベースに登録する
 
 - 9.3 データベース照会プログラム
 - 9.4 テストの実装
 - 9.5 CLI開発に役立つライブラリ
 - 9.6 フラグライブラリ
- flagパッケージ
 - urfave/cli
 - alecthomas/kingpin
 - spf13/cobra
 
 - 9.7 端末制御ライブラリ
- olekukonko/tablewriter
 - mattn/go-runewidth
 - jroimartin/gocui
 
 - 9.8 まとめ
 
第10章 GoによるWebアプリケーション開発
- 10.1 システムのコンセプト
 - 10.2 TODOアプリケーション
- Webサーバ
 - リクエストハンドラ
 - テンプレート処理
 - 静的ファイルのサーブ
 
 - 10.3 リマインダメール送信
 - 10.4 Goにおけるフレームワーク
- Gin
 - Echo
 - Micro
 - Beego
 - フレームワークの選定について
 
 - 10.5 まとめ
 
第11章 GitHubでの開発における勘所
- 11.1 ライブラリの仕様
 - 11.2 プロジェクトの作成
 - 11.3 パッケージ名
 - 11.4 実装
 - 11.5 バージョニング
- [COLUMN]GitHubのワンポイントTips
 
 - 11.6 テスト
 - 11.7 ドキュメント
- go docの使い方
 - godocの使い方
 - https://pkg.go.dev/で閲覧する
 
 - 11.8 ディレクトリ構造
 - 11.9 自動テスト
 - 11.10 自動リリース
 - 11.11 まとめ
 
第12章 データベースの扱い方
- 12.1 database/sql
- サードパーティドライバ
 - Query/QueryRow
 - Exec
 - Prepare
 - Begin/Commit/Rollback
 
 - 12.2 ent/ent
- OpenAPI連携
 - entgen
 
 - 12.3 ORMベンチマーク
 - 12.4 まとめ
 
第13章 Goとクラウドサービス
- 13.1 Goがなぜ使われるのか
 - 13.2 Google Cloud
 - 13.3 AWS Lambda
 - 13.4 Oracle Cloud
- [COLUMN]バイナリサイズを小さくする
 
 - 13.5 まとめ