Go语言自定义包跨项目复用的导入路径优化问题
解决Go语言自定义包复用的导入路径问题
你现在遇到的问题,核心是把公共包(types、view)和具体项目(loader、tester)绑定死了,导致换项目就得修改导入根目录。用Go Modules把公共包抽离成独立模块,就能统一导入路径,既不用复制代码,也不用改根目录名。
具体操作步骤
1. 把公共包做成独立模块
- 新建一个专门存放公共包的目录(比如
common),在目录内初始化Go模块:mkdir common && cd common go mod init github.com/你的用户名/common # 这里可以用任意唯一标识,比如本地路径./common,推荐用仓库格式方便后续共享 - 将原来
loader/types下的代码移到common/types目录,loader/view的代码移到common/view目录。 - 修改
common/view里的导入语句,把原来的loader/types改成github.com/你的用户名/common/types。
2. 在原项目(loader)中引用公共模块
- 回到loader项目,修改
main.go的导入路径:把loader/types替换成github.com/你的用户名/common/types,如果用到view包,同样改成github.com/你的用户名/common/view。 - 如果公共模块还没上传到远程仓库,就在loader的
go.mod文件里添加replace指令,让Go指向本地的common模块:replace github.com/你的用户名/common => ../common # 路径是common模块相对于loader项目的相对路径 - 执行
go mod tidy,Go会自动处理依赖关系。
3. 在新项目(tester)中复用公共模块
- 初始化tester项目的模块:
mkdir tester && cd tester go mod init tester - 在
tester/main.go里直接导入github.com/你的用户名/common/types,同样添加replace指令(本地开发时):replace github.com/你的用户名/common => ../common - 执行
go mod tidy,就能直接使用公共包的代码,完全不用复制文件,导入路径和loader项目完全一致。
额外说明
- 如果公共包需要多人协作或线上使用,直接把common模块推送到GitHub/GitLab等仓库,其他项目无需添加replace,直接执行
go get github.com/你的用户名/common即可拉取依赖。 - Go 1.11之后官方推荐用Go Modules管理依赖,尽量避免GOPATH模式,就能从根源上解决包路径绑定项目的问题。
内容的提问来源于stack exchange,提问作者adviner
相关产品推荐
相关产品推荐

