Go语言自定义包导入报错求助:package greet不在GOROOT中如何解决?
解决Go包导入错误:package greet is not in GOROOT
错误原因
你的greet包位于GOPATH的src目录下,但Go无法在GOPATH路径中定位到它——要么是GOPATH配置未生效,要么是当前启用了Go Modules模式却未正确配置模块依赖。
解决方案
方案1:使用GOPATH传统模式
确认GOPATH配置
执行命令查看当前生效的GOPATH:go env GOPATH确保你的
greet包所在的go/src目录完全匹配该路径(比如GOPATH输出/home/xxx/go,则包路径应为/home/xxx/go/src/greet)。正确运行代码
不要单独在app目录下执行go run entry.go,需回到GOPATH的src目录运行,或指定完整路径:# 方式1:进入GOPATH/src目录后运行 cd $GOPATH/src go run app/entry.go # 方式2:直接指定完整文件路径 go run $GOPATH/src/app/entry.go也可先将
greet包安装到GOPATH的pkg目录,再运行代码:go install greet go run entry.go
方案2:使用Go Modules(Go 1.11+ 推荐方式)
初始化模块
进入app目录($GOPATH/src/app),执行:go mod init app生成
go.mod文件管理依赖。配置本地包导入
方式一:使用相对路径修改entry.go的导入语句:import ( "fmt" "../greet" // 从app目录向上一级定位greet包 )方式二:规范模块依赖管理:
- 进入
greet目录执行go mod init greet,初始化模块 - 回到
app目录执行以下命令绑定本地依赖:go mod edit -replace greet=../greet go get greet
之后即可正常运行
go run entry.go。- 进入
验证结果
无论采用哪种方案,运行代码后应输出:
heyGood morning
内容的提问来源于stack exchange,提问作者jaenmo
相关产品推荐
相关产品推荐

