Golang导入包时报错,如何解决?

Golang导入包时报错,如何解决? 无法导入 myproject/game/helper2 (在任何位置都找不到包 “myproject/game/helper2”: /usr/local/go/src/myproject/game/helper2 (来自 $GOROOT) /home/prasnjit/dev/go/src/myproject/game/helper2 (来自 $GOPATH))编译器

代码的屏幕截图附在下方

Screenshot from 2023-03-06 15-30-43


更多关于Golang导入包时报错,如何解决?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

尝试查看,但错误仍然存在。

更多关于Golang导入包时报错,如何解决?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


但是 game.Get 可以调用位于 helper2.go 中的函数。

不,只有当你以正确的方式导入包时才有可能:import moduleName/packageName

helper2.Get() 改为 game.Get(),并从导入中移除后缀字符串 /helper2

你好!你应该将导入语句改为 import "myproject/game",并使用 game.Get() 来调用公共函数 Getmyproject/game 可以看到所有公共类型和声明,你始终可以使用包名作为前缀来使用/调用它们,在这个例子中就是 game.

Screenshot from 2023-03-06 15-55-28

我已经尝试了你说的办法,但还是没能解决问题。

啊哈,你正在创建一个名为 main 的 Go 模块!😄,你绝不能创建任何在 Go 全局作用域中已使用的名称作为标识符、包或模块。请使用 go mod init myproject 重新创建你的模块,或者直接修改 go.mod 文件的第一行。

func main() {
    fmt.Println("hello world")
}

这个错误表明Go编译器在$GOROOT$GOPATH中都找不到myproject/game/helper2包。从截图看,你的项目结构是:

myproject/
├── game/
│   ├── helper/
│   │   └── helper.go
│   └── main.go

问题在于你试图导入helper2,但实际目录名是helper。以下是解决方案:

1. 检查实际包名和目录名helper/helper.go中确认包声明:

package helper  // 不是 helper2

2. 修正导入语句main.go中,将导入语句改为:

import "myproject/game/helper"

3. 如果确实需要重命名包 如果你想使用helper2作为包名,需要:

  • 修改目录名:helperhelper2
  • 修改helper.go中的包声明:package helper2
  • 保持导入语句不变:import "myproject/game/helper2"

4. 使用go mod的正确方式 如果你的项目使用go modules(有go.mod文件),确保模块声明正确:

module myproject

go 1.16

然后使用完整模块路径导入:

import "myproject/game/helper"

5. 验证GOPATH设置 如果你使用GOPATH模式,确保项目在正确的位置:

echo $GOPATH
# 应该显示:/home/prasnjit/dev/go

项目路径应为:/home/prasnjit/dev/go/src/myproject

错误信息显示编译器在两个位置查找包:

  • /usr/local/go/src/myproject/game/helper2 (GOROOT)
  • /home/prasnjit/dev/go/src/myproject/game/helper2 (GOPATH)

由于目录实际名为helper而非helper2,所以找不到包。修正导入路径或目录名即可解决。

回到顶部