Golang中如何在导入包时让go搜索GOPATH中的包?

Golang中如何在导入包时让go搜索GOPATH中的包? 以下代码显示 Go 仅在 GOROOT 中搜索包。在 GOROOT 中未找到 //package 后,理想情况下,它应该在 GOPATH 中查找包,但事实并非如此。

我已经将 GOPATH 设置为我的工作区路径,该路径包含以下文件夹:binsrcpkg

$ 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模式,请确保以下几点:

  1. 确认环境变量
# 检查GOPATH设置
echo $GOPATH
# 确认GO111MODULE设置(如果使用旧版本)
echo $GO111MODULE
  1. 正确的项目结构
GOPATH/
  src/
    yourproject/
      main.go
    controller/
      userhandler/
        userhandler.go
  1. 关闭Go模块(如果使用Go 1.11+):
# 临时关闭
GO111MODULE=off go build main.go

# 或永久设置
export GO111MODULE=off
  1. 示例代码结构
// 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")
}
  1. 构建命令
# 确保在正确的目录下
cd $GOPATH/src/yourproject
go build main.go

如果问题仍然存在,请检查:

  • 包路径是否正确(区分大小写)
  • GOPATH是否包含多个路径(使用第一个)
  • 包是否实际存在于GOPATH/src目录下
回到顶部