Golang はバックエンド開発、同時操作に優れており、スケーラブルでパフォーマンスの高いバックエンド アプリケーションを構築するのに最適なスイートです。さまざまなサービスを通じてモジュラー コードを共有するための素晴らしいツールである Go ワークスペースを備えたマイクロサービス アーキテクチャに関する投稿が不足しているため、実装を共有することにしました。
mkdir docker touch docker/Dockerfile.authentication touch docker/Dockerfile.users mkdir -p services/authentication mkdir -p services/users mkdir -p shared/utils touch docker-compose.yml
次のシェル コマンドにより、次のフォルダー ツリー構造が生成されます
プロジェクトのルートで、簡単なコマンド go work init を使用して go ワークスペースを作成します。これにより go.work ファイルが生成されます
次に、依存関係を保持できるさまざまな Go プロジェクトをすべて初期化し、コードベースを実行します。
cd services/authentication && go mod init github.com/LegationPro/ms/services/authentication cd ../.. && cd services/users && go mod init github.com/LegationPro/ms/services/users cd ../.. && cd shared && go mod init github.com/LegationPro/ms/shared
次のコマンドを実行すると、プロジェクトは次のようになります
次に、次のコマンドを実行して、go ワークスペースにデータを設定し、ワークスペースの一部であることを伝えます
仕事に行く ./services/authentication ./services/users ./shared
これにより go.work ファイルが作成されます
go 1.23.1 use ( ./services/authentication ./services/users ./shared )
まず docker-compose.yml を見てみましょう。
docker-compose.yml ファイルは次のようになります
services: authentication: build: context: . dockerfile: docker/Dockerfile.authentication volumes: - ./services/authentication:/app/authentication - ./shared:/app/shared ports: - "8081:8081" users: build: context: . dockerfile: docker/Dockerfile.users volumes: - ./services/users:/app/users - ./shared:/app/shared ports: - "8082:8082"
docker-compose に、認証とユーザーである次のサービスを使用するように指示します。
ルート コンテキストを指定するので、ルート レベルのファイルとフォルダーにアクセスできます。
dockerfile の場所を指定します。
コンテナに指定されたボリュームを定義し、最後にコンテナが実行されるポートを公開します。
Dockerfile のセットアップは非常にシンプルで簡単です。
最新の golang alpine イメージを取得し、作業ディレクトリを割り当て、コードの一部を移動し、go ワークスペース構造で動作するように調整して、単純に実行します。
docker/Dockerfile.authentication
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/authentication /app/authentication/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./authentication ./shared # Simply run our service with this simple command CMD ["go", "run", "./authentication"]
Dockerfile.users
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/users /app/users/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./users ./shared # Simply run our service with this simple command CMD ["go", "run", "./users"]
サービス/認証/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeAuthFunc()) }
サービス/ユーザー/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeUserFunc()) }
shared/utils/utils.go
package utils func SomeAuthFunc() string { return "Some auth func" } func SomeUserFunc() string { return "Some user func" }
構造は次のようになります
docker-compose up --build
すべてが機能することを確認するには、出力は次のようになります:
これで、完全に機能する go ワークスペースのモジュラー マイクロサービス アーキテクチャのセットアップが完了しました。 ??
ソースコード: https://github.com/LegationPro/go-microservice-modular-docker-setup
私のブログ投稿をお読みいただきありがとうございます。お役に立てば幸いです ❤️!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3