ホームページ >バックエンド開発 >Golang >Go ワークスペースを備えた Golang マイクロサービス モジュラー アーキテクチャ

Go ワークスペースを備えた Golang マイクロサービス モジュラー アーキテクチャ

DDD
DDDオリジナル
2024-10-01 18:08:02733ブラウズ

スケーラブルなコードベース インフラストラクチャ

Golang はバックエンド開発、同時操作に優れており、スケーラブルでパフォーマンスの高いバックエンド アプリケーションを構築するのに最適なスイートです。さまざまなサービスを通じてモジュラー コードを共有するための素晴らしいツールである Go ワークスペースを備えたマイクロサービス アーキテクチャに関する投稿が不足しているため、実装を共有することにしました。

プロジェクトのセットアップ

Golang microservice modular architecture with go workspace

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

次のシェル コマンドにより、次のフォルダー ツリー構造が生成されます

Golang microservice modular architecture with go workspace

Go ワークスペースのセットアップ

プロジェクトのルートで、簡単なコマンド 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

次のコマンドを実行すると、プロジェクトは次のようになります

Golang microservice modular architecture with go workspace

次に、次のコマンドを実行して、go ワークスペースにデータを設定し、ワークスペースの一部であることを伝えます

仕事に行くには ./services/authentication ./services/users ./shared を使用してください

これにより go.work ファイルが作成されます

go 1.23.1

use (
    ./services/authentication
    ./services/users
    ./shared
)

Dockerで設定する

まず 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 のセットアップ

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"
}

構造は次のようになります

Golang microservice modular architecture with go workspace

Dockerコンテナ内でアプリケーションを実行する

docker-compose up --build

すべてが機能することを確認するには、出力は次のようになります:

Golang microservice modular architecture with go workspace

これで、完全に機能する go ワークスペースのモジュラー マイクロサービス アーキテクチャのセットアップが完了しました。 ??

ソースコード: https://github.com/LegationPro/go-microservice-modular-docker-setup

ありがとう

私のブログ投稿を読んでいただきありがとうございます。これがお役に立てば幸いです❤️!

以上がGo ワークスペースを備えた Golang マイクロサービス モジュラー アーキテクチャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。