我遇到了什么可能似乎是一个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扩展,并尝试重新启动语言服务器,但没有改变任何东西。错误消息出现在所有外部包导入语句,在每个目录。
我很乐意听听你的建议。
3条答案
按热度按时间deyfvvtc1#
官方的Go语言模块blog post特别指出“**$GOPATH/src之外 *,的某个地方"。
初始化GOPATH外的模块。
n6lpvg4x2#
如果Go语言项目位于主项目目录的子目录中,也会出现同样的错误。要解决这个问题,可以在工作区根目录中打开Go语言项目,或者在VScode中将项目添加到工作区中。更多信息请参见this。
44u64gxh3#
我知道这是一个老问题了,但是自从go1.18和gopls@0.8.0之后,他们引入了一种原生的方式来支持这一点,那就是使用go工作空间。
在我的例子中,我有我的make文件,docker-compose文件等在根目录下,所有的项目在./services文件夹下,所以我这样做:
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