Golang中go run命令不搜索$GOPATH的解决方法

Golang中go run命令不搜索$GOPATH的解决方法 我的 Go 系统突然停止在 $GOPATH 中搜索本地包。

我可能遗漏了一些显而易见的东西,但我就是没看出来。

附上截图

packageNotFound

3 回复

显示问题的最小化代码截图。我想下一步是重新加载GO。

simplified

更多关于Golang中go run命令不搜索$GOPATH的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


问题是由我工作目录中出现的一个 go.mod 文件引起的。

当我编译时,另一个文件 go.sum 也出现了。

我删除了 go.modgo.sum 文件,问题就解决了。

我截取了 go.mod 的屏幕截图;也许有人会认出它。

goMod

从 Go 1.11 开始,Go 模块(Go Modules)成为默认的依赖管理方式,go run 命令不再自动搜索 $GOPATH。如果你仍然需要让 go run$GOPATH 中查找包,可以临时禁用 Go 模块功能。

解决方法:

  1. 设置环境变量 GO111MODULE=off: 在运行 go run 前,将 GO111MODULE 环境变量设置为 off,这会强制 Go 工具链使用 $GOPATH 模式。

    GO111MODULE=off go run main.go
    
  2. 永久禁用 Go 模块(不推荐): 如果你希望在整个会话中禁用 Go 模块,可以设置环境变量:

    export GO111MODULE=off
    

    之后所有 go 命令都会使用 $GOPATH 模式。

示例:

假设你的项目结构如下(位于 $GOPATH/src/myproject):

$GOPATH/src/myproject/
├── main.go
└── mypackage/
    └── mypackage.go

mypackage/mypackage.go

package mypackage

import "fmt"

func Hello() {
    fmt.Println("Hello from mypackage")
}

main.go

package main

import "myproject/mypackage"

func main() {
    mypackage.Hello()
}

运行命令:

GO111MODULE=off go run main.go

输出:

Hello from mypackage

注意:

  • 如果你的项目已经使用了 Go 模块(即存在 go.mod 文件),建议迁移到模块管理,而不是依赖 $GOPATH
  • 要启用 Go 模块,可以在项目根目录运行 go mod init <module-name>

如果你需要进一步帮助,请提供你的项目结构或 go.mod 文件内容。

回到顶部