我花了一整天的时间尝试在我的代码中应用构建约束:我有一个专为在 Windows 和 Linux 上工作而设计的代理,但是,我必须与 Windows 注册表进行交互(这显然在 Linux 上没有任何等效项).我的包裹进口“golang.org/x/sys/windows/registry”该项目基于 Windows 而不是 Linux。然后我了解了构建约束://go:build windows (or !linux) 我最初是从 // +build windows 开始的,但我看到它适用于旧的 Go 版本。这是我的包文件的标题://go:build windowspackage utilsimport ( "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 之前。
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
我无法在评论中写下全部内容,但让我知道这个小示例是否对您有帮助:
utils_darwin.go:
package utils
import "fmt"
func Test() {
fmt.Println("Test from mac")
}
utils_linux.go
package utils
import "fmt"
func Test() {
fmt.Println("Test from linux")
}
utils_windows.go
package utils
import "fmt"
func Test() {
fmt.Println("Test from windows")
}
主程序
package main
import "github.com/ninadingole/go-dev-stuff/platform/utils"
func main() {
utils.Test()
}
当我在 mac 上编译二进制文件并运行它时:
GOOS=darwin go build -o prog ./platform
./prog
Test from mac
我尝试在 docker for linux 中构建二进制文件并获得以下输出
Test from linux
让我知道这是否适合您,否则我将删除答案:D
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消