2014-10-09 77 views
0

我正在研究編寫跨平臺(Windows/Debian/Darwin/Red Hat)服務並比較語言選項。我非常感謝Go的跨平臺線程能力和簡單的交叉編譯,但是我希望確保在需要時能夠輕鬆地訪問任何本地(例如Windows服務)API。我應該用Go編寫一個跨平臺的服務嗎?

我應該考慮什麼樣的事情來推動我的語言決策?

+2

選擇一種語言就像選擇一輛汽車;有很多,每一個都有優點和缺點。不過,我會鼓勵你至少試駕Go。 – thwd 2014-10-09 14:41:28

+1

這類問題的網站錯誤,然而關於Go的最好的事情之一就是您可以編寫與操作系統無關的代碼,並且很容易擁有隻能在windows和'xx_darwin.go'上運行的'xx_windows.go'等。 – OneOfOne 2014-10-09 14:42:15

回答

1

Go完全支持調用任意 Win32 API通過其核心syscall包。

雖然通過syscall調用原始Win32並不是很好寫(主要是因爲你正在跨越託管/非託管邊界,並返回),並且沒有編譯器的支持(類似於Delphi的支持),這工作正常,並且可以自動生成用於這種API調用的包裝函數。Go的核心包自己使用這個工具,其他流行的例子包括odbc包。

請注意,已經存在一個與Windows SCM和事件日誌接口的庫。

另請參閱service,它提供了使用平臺本地工具(它在Windows,IIRC上使用winsvc)將程序轉變爲守護進程/服務的統一API。

+0

只是爲了演示,[這個答案](http://stackoverflow.com/a/26124494/720999)包含一個小工作程序的鏈接,該程序使用'syscall'包調用到三個Win32 API函數中。 – kostix 2014-10-09 15:13:03

+0

太棒了,我會看看這個。謝謝! – ryno2019 2014-10-09 15:48:04