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()) }
services/users/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
私のブログ投稿を読んでいただきありがとうございます。これがお役に立てば幸いです❤️!
以上がGo ワークスペースを備えた Golang マイクロサービス モジュラー アーキテクチャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。