Golang 構建多平臺問題
我正在構建一個我想為 Linux 和 Windows 構建的 go 應用程式。對于 Windows 部分,我希望它能夠作為 Windows 服務安裝。所以在我的應用程式中,我包含了以下軟體包:
golang.org/x/sys/windows/svc
golang.org/x/sys/windows/svc/debug
golang.org/x/sys/windows/svc/eventlog
golang.org/x/sys/windows/svc/mgr
它為 Windows 構建良好,并且服務安裝沒有問題。但是當我嘗試為 linux 構建它時:
GOOS=linux GOARCH=amd64 go build -o app-amd64-linux
package github.com/user/app
imports golang.org/x/sys/windows/svc: build constraints exclude all Go files in
C:\Users\User\go\pkg\mod\golang.org\x\sys@v0.0.0-20220728004956-3c1f35247d10\windows\svc\package github.com/user/app
imports golang.org/x/sys/windows/svc/debug: build constraints exclude all Go files in
C:\Users\User\go\pkg\mod\golang.org\x\sys@v0.0.0-20220728004956-3c1f35247d10\windows\svc\debug\package github.com/user/app
imports golang.org/x/sys/windows/svc/eventlog: build constraints exclude all Go files in
C:\Users\User\go\pkg\mod\golang.org\x\sys@v0.0.0-20220728004956-3c1f35247d10\windows\svc\eventlog\package github.com/user/app
imports golang.org/x/sys/windows/svc/mgr: build constraints exclude all Go files in
C:\Users\User\go\pkg\mod\golang.org\x\sys@v0.0.0-20enter code here220728004956-3c1f35247d10\windows\svc\mgr
在代碼中,我正在檢查并且僅在應用程式作為 Windows 服務運行時才使用這些包。有沒有辦法忽略這些錯誤?或者只在為 Windows 構建時匯入它們?或者也許我可以在 go.mod 中改變一些東西,只需要那些用于 Windows 的東西?
uj5u.com熱心網友回復:
作為一種解決方法,您可以使用構建約束:
https://pkg.go.dev/go/build#hdr-Build_Constraints
蒂姆庫珀在這篇文章中詳細回答了如何實作這些:
main.go
package main
func main() {
println("main()")
conditionalFunction()
}
前
// build COMPILE_OPTION
package main
func conditionalFunction() {
println("conditionalFunction")
}
b.go
// build !COMPILE_OPTION
package main
func conditionalFunction() {
}
輸出:
*% go build -o example ; ./example
main()
% go build -o example -tags COMPILE_OPTION ; ./example
main()
conditionalFunction*
我一對一地復制了答案,以免丟失。如果不是這樣,有人可能會糾正我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526627.html
標籤:去去建造
上一篇:在發生某些事情之前不要寫信給頻道
