お問い合わせを送信いただきありがとうございます!当社のスタッフがすぐにご連絡いたします。
予約を送信いただきありがとうございます!当社のスタッフがすぐにご連絡いたします。
コース概要
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およびcontinuerangeによるイテレーション- ネストされたループ
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 rungo buildgo installgo 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 時間
お客様の声 (5)
講師は自身がそのテーマの専門家であることを証明しました。私はこれを与えられたものとしては決して見なしません。彼は業界標準に関する非常に有用な洞察を提供してくれました。
Giuseppe
コース - Learning Go Programming
機械翻訳
私たちは行った実践的な演習の量をとても楽しみました。私は実際に何かを行うことで学ぶタイプなので、フランチェスコがたくさんの実践的な演習を用意してくれていたのは良かったです。いくつかの概念はスライドで理解するのが難しかったですが、実際に手を動かして言語の主要な機能を実装することで、理解が深まりました。
Adam Fitzhugh - OpticoreIT
コース - Learning Go Programming
機械翻訳
ペース、トレーナーが少し難しい質問を助けて維持する能力。
Andrei Mihai - Viasat
コース - Learning Go Programming
機械翻訳
ラドゥの深い知識と、私のペースに合わせて調整してくれること。
Adeel Ahmad - Coefficient Data Ltd
コース - Learning Go Programming
機械翻訳
トレーナーの柔軟性。本当に私たちの特定のニーズに合わせてコースをカスタマイズしてくれました。
Daniel Kurner - Daimler TSS
コース - Learning Go Programming
機械翻訳