在 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 包的实现的方式。
我正在 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 包的实现的方式。