go开发时 vscode 提示 package 引入错误的问题?

这是一个前后端在同一个总目录下的情况,下图是后端代码的位置,当我在总目录下打开这个项目时,vscode 总是提示我如下错误

could not import cloud.lazycat.shell.settings/boxhelper (cannot find package "cloud.lazycat.shell.settings/boxhelper" in GOROOT or GOPATH)

image.png

但是当我将 src 文件作为 vscode 的工作根目录时,一切又正常。
image.png

下面是我的 go env
image.png

问题1:为什么会出现上面的情况?
问题2:能否实现在前后端总项目作为工作的根目录的情况下,vscode 工作正常?(也就是go不会报错)

阅读 3.7k
1 个回答

先简单回答一下第一个问题,这个和你的目录包的设置有关(你可以先给出一下go.mod,我看看);第二个,可以,需要进行replace

首先让我们来看一下 Go 的包管理:
Go 语言使用包(Package)作为代码的组织单位,每个 Go 程序都是由包组成的,并且程序从 main 包开始运行。Go 应用程序通常由一组多个包组成。

开始时,Go 倾向于使用全局的 GOPATH 作为工作区间的目录,并且会在这个目录下存放所有的 Go 代码,包括你自己的和第三方的。这就意味着所有的代码和依赖都会在同一个地方。

Go 引入go mod。Go Modules 允许我们的项目可以在任何位置,不一定需要在 GOPATH 中。
接下来,我们来看一下 Go 的路径引入:

如果你在 Go 文件 import "github.com/gin-gonic/gin",那么这其实就是一个包的导入路径。Go 会根据这个路径去 GOPATH 或者 GOROOT 中查找对应的包。

在使用 Go Modules 的时候,你可以以模块路径(module path)作为一个基础路径(基本上就是你的 module 名称,比如 "github.com/myname/myproject")。你的其它包可以以这个基础路径为基础,建立在你的项目的子目录中。

因此,包管理和路径引入之间有着紧密的关系。包管理决定了你的代码和依赖的物理组织方式,而路径引入决定了你的代码如何在逻辑上连接和使用这些包。在 Go Modules 的辅助下,这两者可以更加灵活和便捷地工作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏