在 windows 上为 linux 编程时使用 `syscall.LINUX_REBOOT_CMD_POWER_OFF`

Using `syscall.LINUX_REBOOT_CMD_POWER_OFF` when programming on windows for linux

我正在 windows 上使用 Golang 开发代码,因为它更容易测试 purposes,但最终的 bin 应该 运行 在 raspberry pi 上。

我需要调用 syscall.Reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF),但效果很好,我需要在 windows 上将其注释掉以测试二进制文件,并在构建 rpi 时取消注释。 即使我测试 os 来确定函数是否被调用,因为它似乎不存在于 windows,go 也不会构建它。 有没有办法在 windows 上构建代码,即使这个函数不存在?

我不想在 rpi 上做任何代码编辑,我不能使用 wsl 我需要与 usb 设备通信,这样在本地构建时更容易 os

听起来你想要这里描述的条件编译:

https://blog.ralch.com/articles/golang-conditional-compilation/

您的程序包中可以有两个使用 _os 命名法作为名称的源文件。两个文件都导出一个执行适当行为的函数。

reboot_linux.go

package main

import "syscall"

func Reboot() {
    syscall.Reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF)
}

reboot_windows.go

package main

import "fmt"

func Reboot() {
    fmt.Println("A reboot would have occurred")
}

当您执行 go build 时,它不会在 Windows 上编译 reboot_linux.go。它也不会在 Linux.

上编译 reboot_windows.go

有趣的是——这正是 Go 在其自己的源代码中分离出 syscall 包的实现的方式。