我花了一整天的时间试图在我的代码中应用构建约束:我有一个代理是为了工作在Windows和Linux上,然而,我必须与Windows注册表交互(显然没有等效在Linux上)。
我的包导入
"golang.org/x/sys/windows/registry">
该项目构建在Windows上而不是Linux上。然后我了解了构建约束://go:build windows(或!linux)我最初开始使用//+构建窗口,但我发现它适用于旧的Go版本。
这是我的包文件的头文件:
//go:build windows
package utils
import (
"fmt"
"log"
"golang.org/x/sys/windows/registry"
)
...
我在Windows和Linux上都使用VSCode,我也可以在我的go中看到一个参考。国防部文件。能帮帮忙吗?
当我运行上面的代码时,我仍然在Linux上得到以下结果:
build golang.org/x/sys/windows/registry:无法加载golang.org/x/sys/windows/registry: no Go源文件(退出状态1)
编辑:我使用默认VSCode工具来编译和运行我的项目,但是我试过:去构建。我还是会得到相同的误差。同样,_windows。转到_linux。go后缀是不合适的,因为代理将来会在Mac之前。
我无法在评论中写出全部内容,但如果这个小示例对您有帮助,请告诉我:
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")
}
main.go
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
我尝试在linux的docker中构建二进制文件,得到以下输出
Test from linux
让我知道这是否适合你,否则我将删除答案:D