<分区>
我正在考虑编写一个跨平台(Windows/Debian/Darwin/Red Hat)服务,并且正在比较语言选项。我真的很欣赏 Go 的跨平台线程能力和简单的交叉编译,但我想确保我能够在需要时轻松访问任何 native (例如 Windows 服务)API。
我应该考虑哪些因素来插入我的语言决定?
<分区>
我正在考虑编写一个跨平台(Windows/Debian/Darwin/Red Hat)服务,并且正在比较语言选项。我真的很欣赏 Go 的跨平台线程能力和简单的交叉编译,但我想确保我能够在需要时轻松访问任何 native (例如 Windows 服务)API。
我应该考虑哪些因素来插入我的语言决定?
最佳答案
Go 完全支持通过其核心 syscall
包调用任意 Win32 API。
虽然通过 syscall
调用原始 Win32 并不十分好写(主要是因为您正在跨越托管/非托管边界,然后返回)并且没有编译器的支持(类似于,比如 Delphi 的),这工作正常,并且可以自动生成此类 API 调用的包装函数——Go 核心包自己使用此功能,其他流行的示例包括 odbc
包。
注意已经存在winsvc
—一个将 Go 与 Windows SCM 和事件日志接口(interface)的库。
另请参阅 service
它提供统一的 API,用于使用平台原生工具将您的程序转变为守护进程/服务(它在 Windows 上使用 winsvc
,IIRC)。
关于service - 我应该用 Go 编写跨平台服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280024/