目次
第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 まとめ