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

Go语言:如何在同仓库的多个应用间共享代码

解决Go单体仓库多Lambda应用共享代码的方案

步骤1:创建独立的共享模块

在仓库根目录(与apps同级)新建一个shared目录作为共享模块,最终目录结构如下:

your-repo-root/
   apps/
      app1/
         go.mod
         go.sum
         main.go
      app2/
         ...
      app3/
         ...
   shared/
      go.mod
      utils.go  # 存放复用代码,比如通用工具函数、Lambda公共逻辑
      # 可按需拆分文件,如lambda_helper.go、config.go等

进入shared目录,初始化模块:

go mod init github.com/your-username/your-repo/shared  # 替换为你的实际模块路径,需与仓库地址对应

步骤2:在go.work中引入共享模块

修改根目录的go.work,添加shared模块的引用:

go 1.21  # 替换为你使用的Go版本

use (
    ./apps/app1
    ./apps/app2
    ./apps/app3
    ./shared  # 新增该行,将共享模块纳入工作区
)

步骤3:在Lambda应用中调用共享代码

以app1/main.go为例,导入共享模块并使用:

package main

import (
    "github.com/your-username/your-repo/shared"  # 需与shared模块go.mod中的路径一致
    "github.com/aws/aws-lambda-go/lambda"
)

func handler() error {
    // 调用共享代码中的方法
    shared.LogInfo("app1 调用共享日志工具")
    return nil
}

func main() {
    lambda.Start(handler)
}

步骤4:同步依赖

在每个应用目录下执行:

go mod tidy

Go会通过go.work自动关联本地的shared模块,无需拉取远程仓库版本。

为什么之前在apps下加shared.go失败?

每个app1/app2都是独立的Go模块(自带go.mod),而apps目录本身不是模块,直接在apps下放shared.go时,各个应用无法正确导入非模块目录的代码。只有将共享代码做成独立模块,才能被其他Go模块正常引用。

部署注意事项

每个Lambda应用独立部署时,执行go build会自动将共享代码编译进应用二进制文件,无需单独部署共享模块,完全不影响Lambda的独立部署流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:31:14