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
相关产品推荐
相关产品推荐

