VSCode中的Go模块导入问题(“在任何[...]中找不到包[...]”)

4ngedf3f  于 2022-12-20  发布在  Go
关注(0)|答案(3)|浏览(746)

我遇到了什么可能似乎是一个Gopls语言服务器的问题:当我在VSCode中使用带有Go扩展名的Go模块时,我所有的外部包导入语句都被标记为不正确。
在我的GOPATH/src/ www.example.com中github.com/Kozie1337/projectname:

  • 运行go mod init github.com/Kozie1337/projectname
  • 运行go get -u github.com/gorilla/mux

内部主要:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/mux"  // This is being marked as wrong with the err. msg. down below
)

func main() {
  r := mux.NewRouter() // This actually works, even though the go linter says that mux isn't imported
  http.ListenAndServe(":9000", r)) // server starts too with mux routes
}

[...]

当鼠标悬停在github.com/gorilla/mux import语句上时,我看到错误:

could not import github.com/gorilla/mux (cannot find package "github.com/gorilla/mux" in any of 
    C:\Program Files\Go\src\github.com\gorilla\mux (from $GOROOT)
    C\src\github.com\gorilla\mux (from $GOPATH)
    \Users\max\go\src\github.com\gorilla\mux (from $GOPATH))"

它看起来像是在寻找从go\src导入的没有Go模块的包,尽管它们现在存储在go\pkg\mod中。是否有一些VSCode/Gopls的配置文件与此相关,或者我做错了什么?我以前从未使用过Go/Go模块。
导入和代码实际上可以工作,尽管出现了linting错误,但该错误禁用了所有自动完成功能,因此忽略它不是一个可行的解决方案。
我重新安装了VSCode的to Go扩展,并尝试重新启动语言服务器,但没有改变任何东西。错误消息出现在所有外部包导入语句,在每个目录。
我很乐意听听你的建议。

deyfvvtc

deyfvvtc1#

官方的Go语言模块blog post特别指出“**$GOPATH/src之外 *,的某个地方"。
初始化GOPATH外的模块。

n6lpvg4x

n6lpvg4x2#

如果Go语言项目位于主项目目录的子目录中,也会出现同样的错误。要解决这个问题,可以在工作区根目录中打开Go语言项目,或者在VScode中将项目添加到工作区中。更多信息请参见this

44u64gxh

44u64gxh3#

我知道这是一个老问题了,但是自从go1.18和gopls@0.8.0之后,他们引入了一种原生的方式来支持这一点,那就是使用go工作空间。
在我的例子中,我有我的make文件,docker-compose文件等在根目录下,所有的项目在./services文件夹下,所以我这样做:

root-dir> go work init
root-dir> go work use ./services/service1 ./services/service2

This adds a go.work file to the root-dir and I no longer has the error above.
在此阅读更多信息:https://github.com/golang/tools/blob/master/gopls/doc/workspace.md

相关问题