Golang中如何在导入包时让go搜索GOPATH中的包?
Golang中如何在导入包时让go搜索GOPATH中的包?
以下代码显示 Go 仅在 GOROOT 中搜索包。在 GOROOT 中未找到 //package 后,理想情况下,它应该在 GOPATH 中查找包,但事实并非如此。
我已经将 GOPATH 设置为我的工作区路径,该路径包含以下文件夹:bin、src 和 pkg。
$ go build main.go
main.go:5:2: package controller/userhandler is not in GOROOT (/usr/local/go/src/controller/userhandle
更多关于Golang中如何在导入包时让go搜索GOPATH中的包?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
根据您使用的 go 版本,controller/userhandler 这个包可能会被视为“标准库”的一部分,因为它不包含类似主机名的内容。
此外,您是否处于 go 模块环境中,也可能会稍微改变包的解析方式。
更多关于Golang中如何在导入包时让go搜索GOPATH中的包?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go 1.11及更高版本中,Go模块已成为默认的依赖管理方式。如果你仍然需要使用GOPATH模式,请确保以下几点:
- 确认环境变量:
# 检查GOPATH设置
echo $GOPATH
# 确认GO111MODULE设置(如果使用旧版本)
echo $GO111MODULE
- 正确的项目结构:
GOPATH/
src/
yourproject/
main.go
controller/
userhandler/
userhandler.go
- 关闭Go模块(如果使用Go 1.11+):
# 临时关闭
GO111MODULE=off go build main.go
# 或永久设置
export GO111MODULE=off
- 示例代码结构:
// main.go
package main
import (
"controller/userhandler"
"fmt"
)
func main() {
userhandler.Hello()
}
// GOPATH/src/controller/userhandler/userhandler.go
package userhandler
import "fmt"
func Hello() {
fmt.Println("Hello from userhandler")
}
- 构建命令:
# 确保在正确的目录下
cd $GOPATH/src/yourproject
go build main.go
如果问题仍然存在,请检查:
- 包路径是否正确(区分大小写)
- GOPATH是否包含多个路径(使用第一个)
- 包是否实际存在于GOPATH/src目录下

