首页  >  文章  >  后端开发  >  带有 go 工作区的 Golang 微服务模块化架构

带有 go 工作区的 Golang 微服务模块化架构

DDD
DDD原创
2024-10-01 18:08:02704浏览

可扩展的代码库基础设施

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

以下 shell 命令将生成以下文件夹树结构

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

编写我们的服务代码

services/authentication/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())
}

共享/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 Workspace 模块化微服务架构设置! ??

源代码:https://github.com/LegationPro/go-microservice-modular-docker-setup

谢谢

感谢您阅读我的博文,希望这对您有所帮助❤️!

以上是带有 go 工作区的 Golang 微服务模块化架构的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn