Golang中使用gopls在VSCode创建特定操作系统/架构文件时出现警告
Golang中使用gopls在VSCode创建特定操作系统/架构文件时出现警告 我在Windows上使用Visual Studio Code。
我有一个包含3个文件的包:osctrl_darwin.go、osctrl_linux.go 和 osctrl_windows.go。
前两个文件包含以下内容:
package osctrl
import (
"syscall"
)
// GetSyscallNewProcessGroup 返回一个用于启动新进程组的 SysProcAttr 结构体
func GetSyscallNewProcessGroup() *syscall.SysProcAttr {
syscallNewProcessGroupLin := &syscall.SysProcAttr{
Setpgid: true,
}
return syscallNewProcessGroupLin
}
第三个文件(针对Windows)如下:
package osctrl
import (
"syscall"
)
// GetSyscallNewProcessGroup 返回一个用于启动新进程组的 SysProcAttr 结构体
func GetSyscallNewProcessGroup() *syscall.SysProcAttr {
syscallNewProcessGroupWin := &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
return syscallNewProcessGroupWin
}
gopls报告了以下警告:
No packages found for open file C:my\pack\path\osctrl\osctrl_darwin.go: <nil>. If this file contains build tags, try adding "-tags=<build tag>" to your gopls "buildFlag" configuration (see (https://github.com/golang/tools/blob/master/gopls/doc/settings.md#buildflags-string). Otherwise, see the troubleshooting guidelines for help investigating (https://github.com/golang/tools/blob/master/gopls/doc/troubleshooting.md).
并且当我在Linux和Darwin文件中的syscall.SysProcAttr上悬停光标时,无法获取信息,而在Windows文件中则可以。
(程序使用set GOOS=linux && set GOARCH=386 && go build .可以正常编译。)
我应该怎么做才能解决这些警告?
更多关于Golang中使用gopls在VSCode创建特定操作系统/架构文件时出现警告的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我尝试了 gopls -tags linux 但不起作用…
更多关于Golang中使用gopls在VSCode创建特定操作系统/架构文件时出现警告的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
根据我对构建标志信息的理解,它是 linux。
好的,谢谢 @NobbZ,我该如何告诉 gopls 切换到另一个操作系统呢?
为什么不按照链接文档中的说明操作呢?
{
"gopls": {
"buildFlags" : [
"linux"
]
}
}
(在手机上输入,可能包含错误)
在这种情况下,如果我希望 gopls 将代码解释为在 Linux 环境下运行,我应该怎么写?
(在那个网站上,关于“buildFlags”的内容实际上只有两行。)
我可能找到了一个解决方案:
我需要在 .vscode/settings.json 中添加:
"gopls.env": {
"GOFLAGS": "-tags=linux",
},
这样对吗?(我可以添加多个操作系统吗?)
gekigek99:
tools/gopls/doc/settings.md at master · golang/tools · GitHub
向该列表中添加相应的标签。
Gopls 使用 Go 语言编译器的 API,因此无法查看在您当前平台上无法构建的文件。
您可以告知 gopls 假装当前环境是 Darwin,但这样 Linux 环境下的文件仍然无法工作,而 Windows 环境下的文件现在也会出现问题。
您可以选择在不同的“配置文件”之间来回切换,或者接受在某些文件中无法获得工具支持的事实。
这个问题是由于gopls无法识别特定操作系统的构建标签导致的。你需要为这些文件添加正确的构建标签,并配置gopls的构建标志。
首先,在每个文件顶部添加对应的构建标签:
osctrl_darwin.go:
//go:build darwin
// +build darwin
package osctrl
import (
"syscall"
)
// GetSyscallNewProcessGroup 返回一个用于启动新进程组的 SysProcAttr 结构体
func GetSyscallNewProcessGroup() *syscall.SysProcAttr {
syscallNewProcessGroupLin := &syscall.SysProcAttr{
Setpgid: true,
}
return syscallNewProcessGroupLin
}
osctrl_linux.go:
//go:build linux
// +build linux
package osctrl
import (
"syscall"
)
// GetSyscallNewProcessGroup 返回一个用于启动新进程组的 SysProcAttr 结构体
func GetSyscallNewProcessGroup() *syscall.SysProcAttr {
syscallNewProcessGroupLin := &syscall.SysProcAttr{
Setpgid: true,
}
return syscallNewProcessGroupLin
}
osctrl_windows.go:
//go:build windows
// +build windows
package osctrl
import (
"syscall"
)
// GetSyscallNewProcessGroup 返回一个用于启动新进程组的 SysProcAttr 结构体
func GetSyscallNewProcessGroup() *syscall.SysProcAttr {
syscallNewProcessGroupWin := &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
return syscallNewProcessGroupWin
}
然后,配置VSCode的gopls设置。在VSCode的设置中(settings.json),添加以下配置:
{
"gopls": {
"buildFlags": ["-tags=windows,darwin,linux"]
}
}
或者,如果你需要更精确的控制,可以为不同的工作区配置不同的标签:
{
"gopls": {
"buildFlags": ["-tags=windows"]
}
}
如果你使用go.work文件,确保工作区配置正确。创建一个go.work文件:
go 1.18
use ./osctrl
完成这些更改后,重新启动VSCode或重新加载窗口(Ctrl+Shift+P -> “Developer: Reload Window”)。gopls现在应该能够正确识别这些特定操作系统的文件,警告应该消失,并且悬停功能应该正常工作。


