DockerでGo学習環境を構築してGo言語を学ぶ

DockerでGo学習環境を構築してGo言語を学ぶ Docker

Docker上にGo開発環境を構築し、簡単なゲーム(CLIまたはGUI)を作成しながらGo言語を学びます。
動作環境は、以下の通りです。

  • Windows 11
  • WSL2 + Ubuntu
  • Docker Desktop(WSL2バックエンド)
  • Visual Studio Code + Remote – Containers 拡張

環境の詳細は、こちらの記事を参照してください。

DockerでGo学習環境を構築

プロジェクトディレクトリ作成

コンテナを起動し go.mod を初期化する

go mod を初期化して、モジュールモードでのビルドや依存解決を出来るようにします。
go.mod を初期化することで、Go のモジュール機能をフル活用し、依存管理・ビルドの再現性・開発自由度・バージョニング運用を安全かつ効率的に行えるようになります。

Dockerfileの作成

非root権限でGo 言語のコンパイラを実行するDockerfileを作成する。

【参考】
useraddコマンドで/home/appuserユーザーを作成する。
--chown でファイル所有を appuser にする。
USER appuserコマンドで、非 rootユーザーのappuserへ切り替える。

docker-compose.ymlファイルの作成

UID:GIDを指定して、非root権限で起動するdocker-compose.ymlを作成する。

【参考】
user: "1000:1000" 
コンテナ内で実行されるプロセスのユーザーID(UID)とグループID(GID)を一般ユーザーに指定する。

volumes:  - .:/app:
ホスト(.)とコンテナ(/app)ディレクトリを同期(マウント)して、データーを永続化する。

working_dir: /app
コンテナ内の作業パスを指定する。

数当てゲームのコード作成

gameディレクトリ内に、数当てゲーム(main.go)を作成する。

ゲーム内容
1から100までのランダムな数字をコンピュータが選び、ユーザーがそれを当てるまでヒントを出し続ける。

【参考】

インポートする外部パッケージ
"fmt": フォーマットされたI/O(入力と出力)を扱うためのパッケージ。
"math/rand": 乱数生成のためのパッケージ。
"time": 時間関連の機能(現在時刻の取得など)を提供します。rand.Seedで乱数のシードを設定するために使われます。

キー入力
fmt.Scan(&guess):入力した整数を読み込み、guess変数に格納する。
fmt.Scan 関数
書式:fmt.Scan(&変数名)
Go言語の標準ライブラリ fmt パッケージの一部で、標準入力(通常はキーボード)からスペース区切りの値を読み込むために使われます。

イメージのビルドとコンテナの実行

タイトルとURLをコピーしました