我正在 Windows 上使用 Golang 開發代碼,因為它更容易用于測驗目的,但最終的 bin 應該在樹莓派上運行。
我需要呼叫syscall.Reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF)哪個作業正常,但是我需要在 Windows 上將其注釋掉以測驗二進制檔案并在構建 rpi 時取消注釋它。即使我測驗作業系統以確定是否呼叫了該函式,因為它似乎在 Windows 上不存在,所以 go 不會構建它。即使這個功能不存在,有沒有辦法在 Windows 上構建代碼?
我不希望在 rpi 上進行任何代碼編輯,并且我無法使用我需要與 USB 設備進行通信的 wsl,這在本機作業系統上構建時更容易
uj5u.com熱心網友回復:
聽起來你想要這里描述的條件編譯:
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,它不會reboot_linux.go在 Windows 上編譯。它也不會reboot_windows.go在 Linux 上編譯。
有趣的是——這正是 Go 在自己的源代碼中分離 syscall 包的實作的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468985.html
下一篇:如何從設備名稱串列中獲取最大值
