「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go ワークスペースを備えた Golang マイクロサービス モジュラー アーキテクチャ

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

2024 年 11 月 8 日に公開
ブラウズ:706

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

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())
}

サービス/ユーザー/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

ありがとう

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/legationpro/golang-microservice-modular-architecture-with-go-workspace-44db?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3