Go项目多二进制文件共享公共包编译报错问题求助
问题根源与解决步骤
核心问题
pkg/model.go的package声明错误:main包仅用于可执行程序的入口文件,共享逻辑包不能用main- 导入路径与实际包结构不匹配
- 编译命令使用不当
- 多余的GOPATH软链接(Go Modules模式下无需依赖GOPATH)
1. 修正共享包的package声明
方案一(保留现有目录结构)
修改pkg/model.go的包声明为pkg:
// pkg/model.go package pkg type User struct { }
方案二(更清晰的包结构推荐)
将model.go移动到pkg/model子目录下,同时修正包声明:
. ├── app │ ├── bin_a │ │ └── bin_a.go │ ├── bin_b │ │ └── bin_b.go ├── pkg │ └── model │ └── model.go └── go.mod
// pkg/model/model.go package model type User struct { }
2. 修正可执行文件的导入路径
对应方案一
修改app/bin_a/bin_a.go的导入与使用代码:
package main import "github.com/user/module/pkg" func main() { user := pkg.User{} }
对应方案二
修改app/bin_a/bin_a.go的导入与使用代码:
package main import "github.com/user/module/pkg/model" func main() { user := model.User{} }
3. 使用正确的编译命令
在项目根目录(存在go.mod的目录)执行编译,不要直接编译单个.go文件:
# 编译bin_a go build ./app/bin_a # 编译bin_b go build ./app/bin_b
执行后会在当前目录生成对应的可执行文件。
4. 清理多余配置
删除之前在GOPATH内创建的软链接,Go Modules模式下无需依赖GOPATH路径,软链接反而可能导致路径混淆。
内容的提问来源于stack exchange,提问作者hypnomaki
相关产品推荐
相关产品推荐

