You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Go多模块组织项目并结合Docker Compose部署?

Go单仓库多模块+Docker Compose 本地开发与部署方案

调整项目结构

在现有单仓库内新增共享模块,比如命名为shared,专门存放API和processor的重复代码:

├── api
│   ├── Dockerfile
│   ├── go.mod
│   └── stuff.go
├── docker-compose.yml
├── go.work
├── processor
│   ├── Dockerfile
│   ├── go.mod
│   └── stuff.go
└── shared
    ├── go.mod
    └── common.go  # 抽离的重复业务/工具代码

配置模块依赖

在api/go.mod和processor/go.mod中添加对shared模块的依赖,同时用replace指令指向本地目录,避免必须推送代码才能开发调试:

# api/go.mod
module example.com/api

go 1.20

require example.com/shared v0.0.0-unpublished

replace example.com/shared => ../shared

processor/go.mod做完全相同的修改,仅需把模块名换成example.com/processor即可。

go.work文件保持管理所有模块:

go 1.20

use ./api
use ./processor
use ./shared

修改Dockerfile适配多模块

原来的Dockerfile以上下文为模块目录,无法访问上层的shared模块,所以调整为以项目根目录为构建上下文,修改后的api/Dockerfile如下:

FROM golang:1.20

WORKDIR /usr/src/app

# 先拷贝所有模块的依赖文件
COPY api/go.mod api/go.sum ./api/
COPY processor/go.mod processor/go.sum ./processor/
COPY shared/go.mod shared/go.sum ./shared/

# 下载API模块的依赖
RUN go mod download -C ./api && go mod verify -C ./api

# 拷贝整个项目代码
COPY . .

# 构建API二进制文件
RUN go build -v -o /usr/local/bin/api ./api

CMD [ "api" ]

processor/Dockerfile只需把最后构建的路径改成./processor,输出二进制名为processor即可。

调整Docker Compose配置

将服务的构建上下文改为项目根目录,指定对应模块的Dockerfile路径:

version: '3.8'

services:
  api:
    build:
      context: .
      dockerfile: ./api/Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - mysql
      - rabbitmq
    # 其他环境变量、网络配置等按需添加

  processor:
    build:
      context: .
      dockerfile: ./processor/Dockerfile
    depends_on:
      - mysql
      - rabbitmq
    # 其他配置按需添加

  rabbitmq:
    image: rabbitmq:3.11-management
    ports:
      - "5672:5672"
      - "15672:15672"

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app_db
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

本地开发调试

  • 直接在项目根目录运行go run ./api或go run ./processor,修改shared模块的代码会实时生效,无需重新下载依赖
  • 需要调试容器化环境时,执行docker compose up --build即可,构建过程会自动包含最新的shared代码,无需推送至远程仓库

内容的提问来源于stack exchange,提问作者Nobody Special

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:41