Golang 1.18 - 排除特定平台的包

我花了一整天的时间尝试在我的代码中应用构建约束:我有一个专为在 Windows 和 Linux 上工作而设计的代理,但是,我必须与 Windows 注册表进行交互(这显然在 Linux 上没有任何等效项).


我的包裹进口


“golang.org/x/sys/windows/registry”


该项目基于 Windows 而不是 Linux。然后我了解了构建约束://go:build windows (or !linux) 我最初是从 // +build windows 开始的,但我看到它适用于旧的 Go 版本。


这是我的包文件的标题:


//go:build windows


package utils


import (

    "fmt"

    "log"


    "golang.org/x/sys/windows/registry"

)

...

我在 Windows 和 Linux 上都使用 VSCode,我也可以在我的 go.mod 文件中看到对的引用。请问有什么帮助吗?


当我运行上面的代码时,我仍然在 Linux 上得到以下信息:


构建 golang.org/x/sys/windows/registry:无法加载 golang.org/x/sys/windows/registry:没有 Go 源文件(退出状态 1)


编辑:我使用默认的 VSCode 工具来编译和运行我的项目,但是我已经尝试过: go build 。我仍然得到同样的错误。此外,_windows.go 和 _linux.go 后缀也不合适,因为代理将来会出现在 Mac 之前。


慕码人2483693
浏览 267回答 1
1回答

慕莱坞森

我无法在评论中写下全部内容,但让我知道这个小示例是否对您有帮助:utils_darwin.go:package utilsimport "fmt"func Test() {    fmt.Println("Test from mac")}utils_linux.gopackage utilsimport "fmt"func Test() {    fmt.Println("Test from linux")}utils_windows.gopackage utilsimport "fmt"func Test() {    fmt.Println("Test from windows")}主程序package mainimport "github.com/ninadingole/go-dev-stuff/platform/utils"func main() {    utils.Test()}当我在 mac 上编译二进制文件并运行它时:GOOS=darwin go build -o prog ./platform./progTest from mac我尝试在 docker for linux 中构建二进制文件并获得以下输出Test from linux让我知道这是否适合您,否则我将删除答案:D
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go