メニュー

現場のGoプログラミング 実プロジェクトで役立つイディオムとテスト

発売日: 2026/9/9 想定ページ数: 464ページ ISBN: 9784295025733 全文検索: 非対応
★★★★★ ★★★★★ 0件
※本書はEPUB(固定レイアウト型)で作成されております。検索機能や文字列のコピーがご利用できません。

保守やテストを容易にするGoの手法を学ぶ!

複雑な抽象化を捨て去り、
単純で堅牢なGoプログラムを構築できる!

なじみのある他言語のクセから脱却


本書では、過度な抽象化を避け、保守やテストが容易になる慣用的(イディオム的)なGoコードの書き方を実践的に学ぶことができます。CLIツールやHTTPクライアント・サーバーの構築など、現実的なプロジェクトをサンプルとして取り上げます。

主な対象読者は、他言語を習得済みのプログラマーやGo言語への深い理解を求めるプログラマーですが、巻末の付録ではGo言語の基礎から並行処理までを解説しており、基本事項の速習&復習コースとして利用できます。

本書ではまず、Goの基本原則とイディオムを押さえつつ、実践的なテスト技法や最適化、CLIツールの構築方法を解説。続いて、依存性注入によるテスト容易性の向上、並行パイプラインを用いた同期APIの設計、HTTP処理の効率化へとステップアップします。終盤にかけては、パッケージとサービスの構成、ミドルウェアなどのコンポジションパターン、多態的なストレージ実装を明らかにしていきます。

本書は、基礎の確認から、段階的に高度な実践へと進むことで、単なる構文の習得にとどまらず、現場で真に役立つ「Goらしい」思考法と確かな設計力が自然と身につく一冊となっています。

※本書は、『Go by Example: Programmer's guide to idiomatic and testable code』(Manning Publications)の翻訳書です。

■本書の構成
第1章 Goの特徴と本書の目標
第2章 イディオムとテスト
第3章 テストカバレッジと最適化
第4章 コマンドラインインタフェース
第5章 依存性注入
第6章 並行処理のための同期API
第7章 応答性と効率の高いプログラム
第8章 パッケージとサービスの構成
第9章 コンポジションパターン
第10章 ポリモーフィックなストレージ
付録A モジュールとパッケージ
付録B 変数とポインタ
付録C 配列、スライス、マップ
付録D オブジェクト指向プログラミング
付録E 並行処理プログラミング
付録F 自己参照オプション
付録G Goプログラムのクロスコンパイル
目次プレビュー
  • サンプルコード・正誤表・免責など
  • 2つの道:複雑さと単純さ
  • 献辞
サンプルコード・正誤表・免責など
2つの道:複雑さと単純さ
献辞
推薦の言葉
目次
まえがき
謝辞
本書について
著者紹介
  • 1.2 なぜGoなのか
  • 1.3 Hello,gophers!
  • 1.4 並行処理
  • 1.5 型システム
  • 1.6 標準ライブラリ
  • 1.7 ツール群
  • 1.8 次章に向けて
  • 1.9 ソースコードとGoモジュール
  • 2.1 基礎
  • 2.2 イディオム
  • 2.3 テスト
  • 2.4 テーブル駆動テスト
  • 2.5 サブテスト
  • 2.6 Exampleテスト
  • 2.7 他のテスト用ツール
  • 3.2 ベンチマークと最適化
  • 3.3 コンパイラ最適化
  • 3.4 並列テスト
  • 3.5 練習問題
  • 4.1 基盤作り
  • 4.2 フラグの解析
  • 4.3 flagパッケージ
  • 4.4 値パーサー
  • 4.5 位置引数
  • 4.6 検証
  • 4.7 練習問題
  • 5.1 テスト容易性に対する課題
  • 5.2 テストしやすいプログラム
  • 5.3 分離
  • 5.4 CLIのテスト
  • 5.5 単体テスト
  • 6.1 概要
  • 6.2 基盤
  • 6.3 イテレータ
  • 6.4 Options
  • 6.5 統合
  • 6.6 並行パイプラインパターン
  • 6.7 プロデューサステージ
  • 6.8 スロットラステージ
  • 6.9 ディスパッチャステージ
  • 6.10 練習問題
  • 7.2 キャンセルの伝播
  • 7.3 HTTPと効率的なI/O操作
  • 7.4 最適化
  • 7.5 テスト
  • 7.6 HTTPテスト
  • 7.7 練習問題
  • 8.1 パッケージの構成
  • 8.2 中核のロジック
  • 8.3 HTTP
  • 8.4 HTTPハンドラ
  • 8.5 ルーティング
  • 8.6 タイムアウト
  • 8.7 テスト
  • 8.8 シンプルさ
  • 8.9 練習問題
  • 9.1 ミドルウェアパターン
  • 9.2 レスポンスのログ記録
  • 9.3 インターセプタパターン
  • 9.4 オプショナル・インタフェース・パターン
  • 9.5 コンテキスト値の伝播パターン
  • 9.6 ハンドラ連鎖パターン
  • 9.7 エンコードとデコード
  • 9.8 包み込みと取り出し
  • 9.9 振り返り
  • 9.10 練習問題
  • 10.1 SQLデータベースとのやり取り
  • 10.2 データベースを基盤とするサービス
  • 10.3 driver.Valuerインタフェースとsql.Scannerインタフェース
  • 10.4 暗黙的なインタフェース
  • 10.5 練習問題
  • A.1.1 例
  • A.2 mainパッケージ/A.3 モジュール
  • A.4 ビルドと実行/A.5 練習問題
  • B.2 ポインタ
  • B.2.1 ポインタとは何か/B.2.2 nilポインタと型安全性
  • B.2.3 アドレス演算子
  • B.2.4 値渡しの仕組み
  • B.2.5 スタックとヒープメモリ/B.3 練習問題
  • C.1.1 配列操作
  • C.1.2 配列の受け渡し
  • C.1.3 ポインタの受け渡し
  • C.1.4 練習問題/C.2 スライス/C.2.1 使い方
  • C.2.2 基底配列
  • C.2.3 スライスの受け渡し
  • C.2.4 スライス式と容量
  • C.2.5 要素の追加
  • C.2.6 make()関数でスライスを作成
  • C.2.7 文字列とバイトスライス/C.2.8 エイリアスの影響
  • C.2.9 スライスのコピー
  • C.2.10 練習問題/C.3 マップ
  • C.3.1 練習問題
  • D.1.1 新たな型の宣言
  • D.1.2 新たな値の作成/D.1.3 無名型
  • D.1.4 名前付き型
  • D.2 メソッドとレシーバ
  • D.2.1 レシーバの型
  • D.2.2 値レシーバ
  • D.2.3 ポインタレシーバ
  • D.2.4 レシーバ型混在の回避
  • D.2.5 レシーバ型の選択/D.2.6 練習問題
  • D.3 暗黙的なインタフェース/D.3.1 具象型からの開始
  • D.3.2 インタフェースの発見
  • D.3.3 つなぎ合わせ
  • D.3.4 インタフェースの活用
  • D.3.5 インタフェース値とメソッドの集まり
  • D.3.6 練習問題/D.4 ジェネリクス
  • E.1.1 逐次実行
  • E.1.2 並行実行
  • E.2 WaitGroupの活用
  • E.2.1 syncx.SafeGroupの活用
  • E.2.2 練習問題/E.3 バッファなしチャネル
  • E.3.1 使い方/E.3.2 同期
  • E.3.3 パターン:送信と受信
  • E.4 チャネルのクローズ
  • E.4.1 パターン:for-range
  • E.4.2 パターン:クローズ通知による同期
  • E.5 select文の活用/E.5.1 複数チャネルの待機
  • E.5.2 パターン:待機しない操作
  • E.6 バッファありチャネル
  • E.6.1 パターン:タイムアウト
  • E.6.2 方向付きチャネル
  • E.6.3 パターン:並行実行数の制限
  • E.7 練習問題
  • F.1.2 ゼロ値オプション/F.2 オプション関数/F.2.1 SendNWith()関数
  • F.2.2 関数としてのオプション
  • F.2.3 オプションの適用
  • F.2.4 まとめ
付録G Goプログラムのクロスコンパイル
訳者あとがき
索引
訳者紹介・レビュアー・STAFF LIST
奥付

まだレビューが投稿されていません