Service 我应该在Go中编写跨平台服务吗?

Service 我应该在Go中编写跨平台服务吗?,service,go,cross-platform,Service,Go,Cross Platform,我正在考虑编写一个跨平台(Windows/Debian/Darwin/Red Hat)服务,并正在比较语言选项。我真的很欣赏Go的跨平台线程能力和简单的交叉编译,但我想确保我能够在需要时轻松访问任何本机(如Windows服务)API 我应该考虑什么样的事情来推动我的语言决策?Go完全支持通过其核心syscall包调用任意Win32 API 虽然通过syscall调用原始Win32并不容易编写(主要是因为您跨越了托管/非托管边界,然后又返回),并且没有编译器的支持(类似于Delphi),但这种方法

我正在考虑编写一个跨平台(Windows/Debian/Darwin/Red Hat)服务,并正在比较语言选项。我真的很欣赏Go的跨平台线程能力和简单的交叉编译,但我想确保我能够在需要时轻松访问任何本机(如Windows服务)API


我应该考虑什么样的事情来推动我的语言决策?

Go完全支持通过其核心
syscall
包调用任意Win32 API

虽然通过
syscall
调用原始Win32并不容易编写(主要是因为您跨越了托管/非托管边界,然后又返回),并且没有编译器的支持(类似于Delphi),但这种方法可以正常工作,并且为这样的API调用生成包装函数可以自动化——Go核心包自己使用这个工具,其他流行的例子包括这个包

请注意,已经存在一个与Windows SCM和事件日志一起提供接口的库


还可以看看哪个提供了统一的API,用于使用平台本机工具将程序转换为守护程序/服务(它在Windows上使用
winsvc
,IIRC)。

选择语言就像选择汽车;它们有很多,每个都有优点和缺点。然而,我鼓励你至少试驾Go。对于这类问题,网站是错误的,然而Go最好的一点是,你可以编写操作系统不可知的代码,并且很容易拥有
xx_窗口。Go
只能在windows和
xx_.Go
上运行,等等。只是为了演示一下,包含一个链接,指向使用
syscall
包调用三个Win32 API函数的小型工作程序。太棒了,我来看看这个。谢谢