お問い合わせ

コース概要

1. Goの紹介

  • Go (Golang)とは何か
  • Goの歴史と設計哲学
  • Webおよびシステムプログラミング言語としてのGo
  • 主な特性:
    • 静的型付け
    • シンプルさと読みやすさ
    • 高速なコンパイル
    • 組み込みの並行処理
    • ガベージコレクション
    • クロスプラットフォームコンパイル
  • Goの一般的なユースケース
  • Goの利点と限界
  • C/C++、JavaScript、Ruby、Python、JavaとのGoの比較
  • Goエコシステムの理解
  • Go標準ライブラリの概要
  • Goモジュールと依存関係管理
  • Goアプリケーションの構造
  • 実習: シンプルなGoプログラムの確認と実行

2. Go開発環境の設定

  • Goのインストール
  • Goツールチェーンの理解
  • 環境変数の設定
  • IDEやコードエディタの選択
  • コマンドラインでのGoの使用
  • Goワークスペースの作成
  • Goプロジェクトの構造の理解
  • Goモジュールによるプロジェクトの初期化
  • go mod initの使用
  • go getによる依存関係の管理
  • 依存関係の更新と検査
  • gofmtによるソースコードの整形
  • go runによるプログラムの実行
  • go buildによるアプリケーションのビルド
  • Goアプリケーションのインストール
  • アプリケーションのクロスコンパイル
  • 実習: コンテナ内でGoプロジェクトの作成と設定

3. Goの変数、定数、型

  • 変数の宣言
  • 明示的な型と推論された型
  • 簡易変数宣言
  • 定数
  • ゼロ値
  • 変数のスコープとライフタイム
  • プリミティブデータ型:
    • 整数
    • 浮動小数点数
    • 複素数
    • ブール値
    • 文字列
  • 型変換
  • UnicodeとUTF-8の処理
  • ルーンとバイト
  • 複数変数の代入
  • 型の安全性の理解
  • 演習: コマンドラインベースのデータ処理プログラムの構築

4. 演算子と式

  • 算術演算子
  • 比較演算子
  • 論理演算子
  • 代入演算子
  • インクリメントとデクリメント
  • 演算子の優先順位
  • 整数および浮動小数点の計算
  • 一般的な型変換エラーの回避
  • 演習: 計算と検証ロジックの実装

5. 日付、時間、フォーマット

  • time パッケージの使用
  • 日付の作成と操作
  • 現在の時間の取得
  • タイムゾーンとロケーション
  • 日付と時間のパーシング
  • 日付と時間のフォーマット
  • 期間の計算
  • Unixタイムスタンプの処理
  • タイムアウトの処理
  • 演習: アプリケーションにタイムスタンプと期間計算を追加

6. 配列、スライス、マップ、構造体

配列

  • 配列の宣言
  • 配列の初期化
  • 配列のイテレーション
  • 多次元配列

スライス

  • スライスと配列の違いの理解
  • スライスの作成
  • 要素の追加
  • スライスのコピー
  • スライスの長さと容量
  • スライスのスライス化
  • 一般的なスライスの落とし穴

マップ

  • マップの作成
  • エントリの追加と削除
  • キーの存在確認
  • マップのイテレーション
  • 複雑なデータを格納するマップ

構造体

  • 構造体の定義

  • 構造体フィールド

  • 構造体の初期化

  • ネストされた構造体

  • 匿名構造体

  • 構造体メソッド

  • JSON構造体タグ

  • 実習: 構造体、スライス、マップを使用してユーザー、製品、アプリケーションデータをモデリング

7. 条件分岐とループ

  • if 文
  • else および else if
  • 条件内の変数宣言
  • for ループ
  • 無限ループ
  • ループ条件
  • break および continue
  • range によるイテレーション
  • ネストされたループ
  • switch 文
  • 式ベースのスイッチ
  • 複数のケース
  • デフォルトケース
  • 型スイッチ
  • 演習: アプリケーションの検証と処理ロジックの実装

8. 関数

  • 関数の定義
  • 関数パラメータ
  • 戻り値
  • 複数の戻り値
  • 名前付き戻り値
  • 可変長関数
  • 匿名関数
  • 関数値
  • クロージャ
  • 再帰
  • 関数を引数として渡す
  • エラーを返す関数
  • 小さく再利用可能な関数の設計
  • 演習: 既存のコードを再利用可能な関数にリファクタリング

9. ポインタとメモリ概念

  • ポインタとは何か
  • アドレス演算子と参照解除演算子
  • ポインタと関数パラメータ
  • ポインタレシーバ
  • 構造体へのポインタ
  • Nilポインタ
  • ポインタを使用する場合
  • 値セマンティクスと参照セマンティクス
  • Goのメモリ管理とガベージコレクションの理解
  • 一般的なポインタのミス
  • 実習: ポインタを使用してアプリケーションデータを変更

10. GoでのWebアプリケーションの作成

  • GoのWeb機能の概要
  • net/http パッケージの紹介
  • HTTPサーバーの作成
  • HTTPリクエストとレスポンス
  • HTTPメソッド
  • リクエストURLとクエリパラメータ
  • HTTPヘッダ
  • HTTPステータスコード
  • ルーティングの基礎
  • ハンドラの作成
  • フォームデータの処理
  • 静的ファイルの配信
  • HTMLテンプレートの処理
  • テンプレート変数と制御構造
  • Webアプリケーションの構造化
  • 実習: 基本的なGo Webサーバーの構築

11. RESTful Webサービスの構築

  • RESTアーキテクチャの基礎
  • APIエンドポイントの設計
  • GET、POST、PUT、PATCH、DELETE
  • JSONの処理
  • JSONエンコードとデコード
  • リクエストの検証
  • HTTPステータスコード
  • エラーレスポンス
  • クエリパラメータとパスパラメータ
  • APIレスポンス構造
  • ハンドラとビジネスロジックの分離
  • 実習: CRUD REST APIの構築

12. Goランタイム、コンパイル、プロジェクトビルド

  • Goコンパイラの理解
  • Goのビルドプロセス
  • go run
  • go build
  • go install
  • go test
  • ビルドフラグ
  • 環境固有の設定
  • 異なるOSおよびアーキテクチャ向けにビルドする
  • スタンドアロンバイナリの生成
  • アプリケーション設定の管理
  • 演習: アプリケーションを複数プラットフォーム向けにコンパイル

13. ファイルとWebの処理

  • ファイルの開閉
  • ファイルの読み込み
  • ファイルの書き込み
  • ディレクトリの作成
  • ファイルメタデータ
  • バッファ付きI/O
  • ストリームの処理
  • JSONファイルの読み書き
  • HTTPクライアント
  • 外部HTTPリクエストの実行
  • HTTPクライアントエラーの処理
  • タイムアウトとキャンセル
  • APIレスポンスの処理
  • 実習: 外部APIからデータを取得し、ローカルに永続化

14. エラー処理とデバッグ

  • Goのエラーへのアプローチ
  • 関数からのエラー返却
  • エラーの確認
  • カスタムエラーの作成
  • エラーのラップ
  • エラーにコンテキストの追加
  • errors.Is および errors.As
  • PanicとRecovery
  • panic を使用する場合
  • 一般的なGoの問題のデバッグ
  • アプリケーションアクティビティのログ記録
  • Goデバッグツールの使用
  • 演習: 意図的に導入されたアプリケーションエラーの診断と修正

15. インターフェースと抽象化

  • インターフェースとは何か
  • 暗黙のインターフェース実装
  • インターフェースの定義
  • インターフェース値
  • 空インターフェース / any
  • 型アサーション
  • 型スイッチ
  • ポインタ実装と値実装
  • 小さなインターフェースの設計
  • 依存関係の逆転
  • テストでのインターフェースの使用
  • アプリケーションの結合度の低減
  • 実習: サンプルWebアプリケーションにインターフェースを導入

16. パッケージとプロジェクト組織化

  • パッケージの作成
  • パッケージ命名規則
  • エクスポートされた識別子と非エクスポートされた識別子
  • パッケージのインポート
  • パッケージの初期化
  • アプリケーションレイヤーの整理
  • 内部パッケージ
  • Goモジュールによる依存関係管理
  • セマンティックバージョニング
  • サードパーティパッケージの使用
  • 循環依存関係の回避
  • 保守可能なGoプロジェクトの設計
  • 演習: アプリケーションを別々のパッケージにリファクタリング

17. ゴルーチンによる並行処理

  • 並行処理とは何か
  • ゴルーチン
  • ゴルーチンの開始
  • 軽量な並行実行の理解
  • 同期の課題
  • 共有状態
  • 競合状態
  • sync.WaitGroup の使用
  • ミューテックスと読み書きミューテックス
  • アトミック操作
  • 実習: 逐次タスクを並行処理に変換

18. チャンネル

  • チャンネルの理解
  • 値の送信と受信
  • バッファ付きチャンネルとバッファなしチャンネル
  • ブロッキング動作
  • チャンネルのクローズ
  • チャンネルのレンジ
  • 方向性チャンネル
  • チャンネルベースの通信
  • Select文
  • タイムアウトとキャンセル
  • ワーカープールパターン
  • プロデューサー/コンシューマパターン
  • 実習: 並行ワーカーシステムの構築

19. コンテキストとリクエスト管理

  • なぜコンテキストがWebアプリケーションで重要なのか
  • context.Context
  • リクエストスコープのコンテキスト
  • キャンセル
  • 期限切れ
  • タイムアウト
  • アプリケーションレイヤー全体でのコンテキスト伝播
  • データベースまたはHTTP操作のキャンセル
  • コンテキストの誤用を避ける
  • 演習: Webアプリケーションにリクエストキャンセルとタイムアウトを追加

20. Goアプリケーションのテスト

  • なぜ自動化テストが重要なのか
  • ユニットテストの作成
  • testing パッケージ
  • テスト関数
  • テスト命名規則
  • テーブル駆動テスト
  • エラーのテスト
  • HTTPハンドラのテスト
  • HTTPテストサーバー
  • テストフィクスチャ
  • テストカバレッジ
  • ベンチマーク
  • サンプルテスト
  • モックまたはフェイクによるインターフェースのテスト
  • 実習: サンプルアプリケーションのテストスイートを作成

21. パフォーマンス最適化

  • Goアプリケーションのパフォーマンスの理解
  • ボトルネックの特定
  • CPUパフォーマンスとメモリパフォーマンス
  • 効率的なデータ構造
  • 不要なアロケーションの削減
  • 文字列、バイト、バッファ
  • ゴルーチン管理
  • 過度な並行処理の回避
  • キャッシュ戦略
  • データベースとネットワークの考慮事項
  • アプリケーションのプロファイリング
  • ベンチマークとパフォーマンステスト
  • Goプロファイリングツールの使用
  • 演習: 意図的に非効率なアプリケーションのプロファイリングと最適化

22. セキュリティと堅牢なWebアプリケーションプラクティス

  • ユーザー入力の検証
  • HTTPリクエストの安全な処理
  • 一般的なWeb脆弱性の防止
  • 安全なエラー処理
  • 認証と認可の概念
  • シークレットと設定の管理
  • 安全なHTTP通信
  • ログへの機密情報の回避
  • 依存関係管理と更新
  • リソース制限とリクエストタイムアウト
  • 演習: サンプルAPIのレビューと強化

23. アプリケーションログ記録とオブザーバビリティ

  • ログ記録の基礎
  • 構造化ログ記録
  • ログレベル
  • リクエストログ記録
  • エラーログ記録
  • 相関とリクエストID
  • アプリケーション動作の監視
  • 基本的なメトリクス
  • ヘルスチェックエンドポイント
  • 本番環境の問題の診断
  • 実習: 構造化ログ記録とヘルスチェックを追加

24. Goアプリケーションのコンテナ化

  • なぜコンテナを使用するのか
  • Goアプリケーションとコンテナ化
  • Dockerfileの作成
  • マルチステージビルド
  • 最小限のランタイムイメージの構築
  • 環境変数による設定管理
  • コンテナネットワーキング
  • アプリケーションポートの公開
  • コンテナでのアプリケーション実行
  • コンテナ化アプリケーションのテスト
  • 実習: サンプルGoアプリケーションを本番環境向けのコンテナとしてパッケージ化

25. デプロイ

  • 本番環境向けアプリケーションの準備
  • 本番環境向けバイナリのビルド
  • 環境設定
  • コンテナベースのデプロイ
  • デプロイアーキテクチャ
  • リバースプロキシ
  • HTTPS/TLSの考慮事項
  • アプリケーションヘルスチェック
  • グレースフルシャットダウン
  • OSシグナルの処理
  • Go Webアプリケーションのスケーリング
  • 水平スケーリングと垂直スケーリング
  • 基本的なデプロイトラブルシューティング
  • 実習: サンプルWebアプリケーションのデプロイ

26. キャプストン: 完全なGo Webアプリケーション

参加者は、概念を統合して完全なアプリケーションを開発します。

プロジェクトには以下を含めることができます:

  • Goモジュールによるプロジェクトの初期化
  • パッケージの組織化
  • HTTPルーティング
  • REST APIエンドポイント
  • JSONリクエストとレスポンスの処理
  • 入力検証
  • エラー処理
  • インターフェース
  • 並行処理
  • 外部APIとの通信
  • ファイルまたはデータベースの永続化
  • 自動化テスト
  • ログ記録
  • パフォーマンスの考慮事項
  • コンテナ化
  • 本番環境設定
  • デプロイ

27. 復習とベストプラクティス

  • Goコア構文の復習
  • Goコーディング規約
  • アイディオマティックなGoの書き方
  • コードのシンプルさの維持
  • 効果的なパッケージ設計
  • エラー処理のベストプラクティス
  • インターフェース設計原則
  • 並行処理のベストプラクティス
  • テスト戦略
  • パフォーマンスの考慮事項
  • 保守性と読みやすさ
  • 新しいGo開発者が犯す一般的なミス
  • Go開発を続けるための推奨アプローチ

28. 結論

  • 主要な概念の復習
  • 完成したWebアプリケーションの復習
  • 質疑応答と議論
  • 一般的な現実世界のシナリオのトラブルシューティング
  • Go開発のための次のステップの推奨
  • 追加のGoライブラリとエコシステムリソース
  • 本番環境品質のGoサービスを構築するためのさらなる機会

要求

  • 一般的なプログラミング原則の理解

対象読者

  • 開発者
 28 時間

参加者の人数


参加者1人あたりの価格

お客様の声 (5)

今後のコース

関連カテゴリー