Top▲
マーリンアームズ サポート   翻訳   コンサル   講座   アプリ   コラム

初めてのGo言語 —— 他言語プログラマーのためのイディオマティックGo実践ガイド    Jon Bodner著    武舎広幸訳

目次

章の一覧

賞賛の声
訳者まえがき
まえがき
対象読者
表記上のルール
サンプルコードの使用について
意見と質問
謝辞

1章 Go環境のセットアップ
2章 基本型と宣言
3章 合成型
4章 ブロック、シャドーイング、制御構造
5章 関数
6章 ポインタ
7章 型、メソッド、インタフェース
8章 エラー処理
9章 モジュールとパッケージ
10章 並行処理
11章 標準ライブラリ
12章 コンテキスト
13章 テスト
14章 リフレクション、unsafe、cgo
15章 ジェネリクス

付録A Go言語のまとめ
付録B 実例で学ぶGo言語入門

索引
著者紹介
訳者紹介

↑ 戻る

目次(詳細)

賞賛の声
訳者まえがき
まえがき
対象読者
表記上のルール
サンプルコードの使用について
意見と質問
謝辞

1章 Go環境のセットアップ
 1.1 開発ツールのインストール
 1.2 ディレクトリの指定
 1.3 goコマンド
 1.3.1 go run
 1.3.2 go build
 1.3.3 go mod
 1.3.4 go install
 1.3.5 コードのフォーマット
 コラム セミコロン挿入規則
 1.4 lintとvet
 1.5 ツールの選択
  1.5.1 Visual Studio Code
  1.5.2 GoLand
  1.5.3 Go Playground
 1.6 Makefile
 1.7 開発環境やバイナリファイルの更新
 1.8 まとめ
 
2章 基本型と宣言
 2.1 基本型
  2.1.1 ゼロ値
  2.1.2 リテラル
   2.1.2.1 整数リテラル
   2.1.2.2 浮動小数点数リテラル
   2.1.2.3 runeリテラル
   2.1.2.4 文字列リテラル
   2.1.2.5 リテラルと型
  2.1.3 論理型
  2.1.4 数値型
   2.1.4.1 整数型
   2.1.4.2 特別な整数型
   2.1.4.3 整数型の選択
   2.1.4.4 整数関連の演算子
   2.1.4.5 浮動小数点数型
   コラム IEEE 754
   2.1.4.6 複素数型
  2.1.5 文字列型とrune型
  2.1.6 明示的型変換
 2.2 変数の宣言
 2.3 定数
 2.4 型付きの定数と型のない定数
 2.5 未使用変数
 コラム 未使用の定数
 2.6 変数および定数の名前
 2.7 まとめ
 
3章 合成型
 3.1 配列
 3.2 スライス
  3.2.1 len
  3.2.2 append
  3.2.3 スライスのキャパシティ
  コラム Goのランタイム
  3.2.4 make
  3.2.5 スライスの生成方法の選択
  3.2.6 スライスのスライス
   3.2.6.1 スライスの記憶領域の共有
  3.2.7 配列からスライスへの変換
  3.2.8 メモリを共有しないスライスのコピー
 3.3 文字列、rune、バイト
 コラム UTF-8
 3.4 マップ
 コラム ハッシュマップ
  3.4.1 マップの読み書き
  3.4.2 カンマokイディオム
  3.4.3 マップからの削除
  3.4.4 マップとセット
 3.5 構造体
  3.5.1 無名構造体
  3.5.2 構造体の比較と変換
 3.6 まとめ
 
4章 ブロック、シャドーイング、制御構造
 4.1 ブロック
  4.1.1 変数のシャドーイング
  4.1.2 シャドーイングされた変数の検知
  コラム ユニバースブロック
 4.2 if
 4.3 for
  4.3.1 標準形式のfor文
  4.3.2 条件のみのfor文
  4.3.3 無限ループ
  4.3.4 breakとcontinue
  4.3.5 for-rangeループ
   4.3.5.1 マップのイテレーション
   4.3.5.2 文字列を対象にしたイテレーション
   4.3.5.3 for-rangeの値はコピー
  4.3.6 ラベル
  4.3.7 for文の選択
 4.4 switch
  4.4.1 switchの基本構文
  4.4.2 ブランクswitch
  4.4.3 break
 4.5 ifかswitchか
 4.6 goto
 4.7 まとめ
 
5章 関数
 5.1 関数の宣言と呼び出し
  5.1.1 名前付き引数とオプション引数
  5.1.2 可変長引数とスライス
  5.1.3 複数の戻り値
  5.1.4 戻る複数の値のPythonとの違い
  5.1.5 戻り値の無視
  5.1.6 名前付き戻り値
  5.1.7 ブランクreturn
 5.2 関数は値
  5.2.1 関数型の宣言
  5.2.2 無名関数
 5.3 クロージャ
  5.3.1 関数引数
  5.3.2 関数から関数を返す
 5.4 defer
 5.5 Goは値渡し
 5.6 まとめ
 
6章 ポインタ
 6.1 ポインタ入門
 6.2 ポインタを恐れる必要はない
 6.3 ポインタはミュータブル(変更可能)の印
 6.4 ポインタは最後の手段
 6.5 ポインタ渡しのパフォーマンス
 6.6 「ゼロ値」と「値なし」
 6.7 マップとスライスの違い
 6.8 バッファとして使うスライス
 6.9 ガベージコレクタの負荷軽減策
 6.10 まとめ
 
7章 型、メソッド、インタフェース
 7.1 Goの型
  7.1.1 抽象型と具象型
  7.1.2 基底型
  7.1.3 型の定義
 7.2 メソッド
  7.2.1 ポインタ型レシーバと値型レシーバ
  7.2.2 nilへの対応
  7.2.3 メソッドは関数
  7.2.4 関数とメソッドの使い分け
  7.2.5 型宣言と継承の違い
  7.2.6 型は実行可能なドキュメント
  7.2.7 iotaと列挙型
 7.3 埋め込みによる合成
 7.4 埋め込みと継承の違い
 7.5 インタフェースとは
 インタフェースは型安全なダックタイピング
 7.6 埋め込みとインタフェース
 7.7 インタフェースを受け取り構造体を返す
 7.8 インタフェースとnil
 7.9 空くうインタフェース
 7.10 型アサーションと型switch
  7.10.1 型アサーション
  7.10.2 型switch
 7.11 型アサーションと型switchの使用は控えめに
 7.12 関数型とインタフェース
 7.13 暗黙のインタフェースによる依存性注入
 7.14 依存性注入コードの生成
 7.15 Goはさほどオブジェクト指向ではない
 7.16 まとめ
 
8章 エラー処理
 8.1 エラー処理の基本
 8.2 単純なエラーの際の文字列の利用
 8.3 センチネルエラー
 コラム センチネルエラーのための定数の利用
 8.4 エラーと値
 8.5 エラーのラップ
 8.6 IsとAs
 8.7 deferを使ったエラーのラップ
 8.8 パニックとリカバー
 8.9 エラー時のスタックトレースの取得
 8.10 まとめ
 
9章 モジュールとパッケージ
 9.1 リポジトリ、モジュール、パッケージ
 9.2 モジュールとgo.modファイル
 9.3 パッケージの構築
  9.3.1 インポートとエクスポート
  9.3.2 パッケージの作成とアクセス
  9.3.3 パッケージの命名法
  9.3.4 モジュールの構成方法
  9.3.5 パッケージ名のオーバーライド
  9.3.6 パッケージのコメントとgodoc
  9.3.7 内部パッケージ
  9.3.8 init関数
  9.3.9 循環参照
  9.3.10 名称変更や再構成
 9.4 モジュール関連の操作
  9.4.1 サードパーティーのコードのインポート
  9.4.2 モジュールのバージョン
  コラム セマンティックバージョニング
  9.4.3 ミニマルバージョン選択
  9.4.4 互換性をもつバージョンへのアップデート
  9.4.5 非互換のバージョンへのアップデート
  9.4.6 ベンダリング
  9.4.7 pkg.go.devサイト
 9.5 モジュールの公開
 9.6 モジュールのバージョンの決定
 9.7 モジュールプロキシサーバ
  9.7.1 プロキシサーバの指定
  9.7.2 プライベートなリポジトリ
 9.8 まとめ
 
10章 並行処理
 10.1 並行性をいつ利用するべきか
 10.2 ゴルーチン
 10.3 チャネル
  10.3.1 読み込み、書き込み、バッファリング
  10.3.2 for-rangeとチャネル
  10.3.3 チャネルのクローズ
  10.3.4 チャネルの動作
 10.4 select
 10.5 並行処理のベストプラクティスとパターン
  10.5.1 APIに並行性は含めない
  10.5.2 ゴルーチンとforループ
  10.5.3 ゴルーチンの終了チェック
  10.5.4 doneチャネルパターン
  10.5.5 キャンセレーション関数を用いたゴルーチンの終了
  10.5.6 いつバッファ付きのチャネルを使うべきか
  10.5.7 バックプレッシャ
  10.5.8 selectにおけるcaseの無効化
  10.5.9 タイムアウト
  10.5.10 WaitGroupの利用
  コラム golang.org/xとerrgroup
  10.5.11 コードを一度だけ実行
  10.5.12 並行処理ツールの協調
 10.6 チャネルの代わりにミューテックスを使うべきとき
 コラム sync.Map
 10.7 sync/atomic
 10.8 まとめ
 
11章 標準ライブラリ
 11.1 入出力
 11.2 time
  11.2.1 時間
  11.2.2 時刻
  11.2.3 モノトニックタイム
  11.2.4 タイマーとタイムアウト
 11.3 encoding/json
  11.3.1 構造体タグを使ったメタデータの付加
  11.3.2 アンマーシャリングとマーシャリング
  11.3.3 JSONのリーダーとライター
  11.3.4 JSONストリーミングのエンコードとデコード
  11.3.5 JSON解析のカスタマイズ
 11.4 net/http
  11.4.1 クライアント
  11.4.2 サーバ
   11.4.2.1 ミドルウェア
   11.4.2.2 サーバ強化のためのイディオム的なサードパーティーモジュールの追加
 11.5 まとめ
 
12章 コンテキスト
 12.1 コンテキストとは
 12.2 キャンセレーション
 12.3 タイマー
 12.4 独自コードにおけるキャンセレーションの処理
 12.5 コンテキストによる値の伝搬
 12.6 まとめ
 
13章 テスト
 13.1 テストの基礎
  13.1.1 テスト失敗のレポート
  13.1.2 設定の適用と解除
  13.1.3 テスト用サンプルデータの保存
  13.1.4 テスト結果のキャッシング
  13.1.5 公開APIのテスト
  13.1.6 go-cmpによるテスト結果の比較
 13.2 テーブルテスト
 13.3 コードカバレッジのチェック
 13.4 ベンチマーク
 Goコードのプロファイリング
 13.5 スタブ
 コラム モックとスタブ
 13.6 httptest
 13.7 統合テストとビルドタグ
 コラム フラグ-shortの使用
 13.8 並行実行に関する問題とレースチェッカー
 13.9 まとめ
 
14章 リフレクション、unsafe、cgo
 14.1 リフレクション
  14.1.1 型(type)、型情報(kind)、値(value)
   14.1.1.1 型(type)と型情報(kind)
   14.1.1.2 値(value)
  14.1.2 新しい値の生成
  14.1.3 インタフェースの値のnilチェック
  14.1.4 データのマーシャリングのためのリフレクション
  14.1.5 リフレクションで作った関数による繰り返し処理の自動化
  14.1.6 構造体とリフレクション
  14.1.7 リフレクションとメソッド
  14.1.8 リフレクションを利用するべきとき
 14.2 unsafe
  14.2.1 unsafeを使ったバイナリデータの変換
  14.2.2 unsafeな文字列とスライス
  14.2.3 unsafe関連ツール
 14.3 cgo
 14.4 まとめ
 
15章 ジェネリクス
 15.1 ジェネリクスによる繰り返しの削減と型安全性の向上
 15.2 Go言語のジェネリクスの概要
 15.3 ジェネリック関数によるアルゴリズムの抽象化
  15.3.1 ジェネリクスとインタフェース
 15.4 型タームを使った演算子の指定
  15.4.1 型推論とジェネリクス
  15.4.2 型要素による定数の制約
  15.4.3 ジェネリック関数とジェネリックなデータ構造の利用
 15.5 今後追加される可能性のある機能
 15.6 イディオム的Goとジェネリクス
 15.7 タグ付き共用体の可能性
 15.8 まとめ

付録A Go言語のまとめ
 A.1 ほかの言語で(あまり)見られない点
 A.2 型とゼロ値
  A.2.1 基本型(組み込み型)
  A.2.2 合成型(複合データ型、コンテナ型)、その他
 A.3 変数と定数の宣言
  A.3.1 基本型の変数の宣言
  A.3.2 配列とスライスの宣言
  A.3.3 スライスへの要素の追加
  A.3.4 サブスライス(スライスの要素の削除)
  A.3.5 マップの宣言とリテラル
  A.3.6 makeを使ったスライスやマップの生成
  A.3.7 定数の宣言
 A.4 構造体の宣言とリテラル
 A.5 型のエイリアス
 A.6 iota
 A.7 制御構造
  A.7.1 ifとforの基本形
  A.7.2 for-rangeの例
  A.7.3 switch
 A.8 演算子
 A.9 関数
 A.10 メソッド
 A.11 継承
 A.12 インタフェース
 A.13 ゴルーチン
  A.13.1 チャネルからの読み込みのパターン
   A.13.1.1 変数への代入
   A.13.1.2 無視する
   A.13.1.3 select文のcaseでの代入
   A.13.1.4 for-rangeループ
 A.14 Goの「イディオム」
  A.14.1 イディオム的なもの
  A.14.2 「イディオム的」でない例
  A.14.3 その他、Goの「哲学」が感じられる選択
  A.14.4 備忘録

付録B 実例で学ぶGo言語入門
 B.1 予備知識
  B.1.1 Go言語のコードの留意点
 B.2 fmtパッケージの動詞(verb)
  B.2.1 例題ディレクトリの構成
  B.2.2 プログラムの実行
  B.2.3 実行結果
 B.3 基本構文と標準入出力
  B.3.1 例外処理
  B.3.2 関数とループ
  B.3.3 switch文
  B.3.4 日本語の識別子
 B.4 コマンド行計算機——コマンド行引数、文字列の置換と正規表現、外部コマンド
 B.5 ファイルの入出力
  B.5.1 ファイルの内容を一度に読み込み
  B.5.2 ファイルを1行ずつ処理
  B.5.3 練習問題
 B.6 ゴルーチン、チャネル、WaitGroup
  B.6.1 チャネルを使った単純な例
  B.6.2 ウェブサイトのチェック——WaitGroup版
  B.6.3 ウェブサイトのチェック——チャネル版
 B.7 まとめ

索引
著者紹介
訳者紹介