Go言語プログラミングエッセンス
書籍情報
発売日 : 2023年03月09日
著者/編集 : mattn
出版社 : 技術評論社
発行形態 : 単行本
書籍説明
内容紹介
あなたのGoのコードを「一段階」レベルアップするテクニック集。
目次
第1章 プログラミング言語Goとは
1.1 Goの簡単な歴史
1.2 Goの立ち位置
1.3 Goが利用される場面
標準でUTF-8をサポート
マルチプラットフォーム
並行処理の扱いやすさ
ストリーム指向
シングルバイナリ
1.4 教育用途としてのGo
1.5 なぜGoが使われるのか
コンパイルの速さ
レビューのしやすさ
周辺ツールの充実
パッケージ公開の簡単さ
libc非依存
共同開発でのスキル差
1.6 まとめ
第2章 開発環境の準備3
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 まとめ
1.1 Goの簡単な歴史
1.2 Goの立ち位置
1.3 Goが利用される場面
標準でUTF-8をサポート
マルチプラットフォーム
並行処理の扱いやすさ
ストリーム指向
シングルバイナリ
1.4 教育用途としてのGo
1.5 なぜGoが使われるのか
コンパイルの速さ
レビューのしやすさ
周辺ツールの充実
パッケージ公開の簡単さ
libc非依存
共同開発でのスキル差
1.6 まとめ
第2章 開発環境の準備3
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 まとめ
著者情報
mattn