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
以下 shell 命令将生成以下文件夹树结构
在项目的根目录下,只需使用简单的命令 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"]
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" }
现在的结构应该是这样的
docker-compose up --build
为了确保一切正常,输出应如下所示:
就是这样,您就拥有了一个功能齐全的 Go Workspace 模块化微服务架构设置! ??
源代码:https://github.com/LegationPro/go-microservice-modular-docker-setup
感谢您阅读我的博文,希望这对您有所帮助❤️!
以上是带有 go 工作区的 Golang 微服务模块化架构的详细内容。更多信息请关注PHP中文网其他相关文章!