英文:
Should I write a cross-platform service in Go?
问题
我正在研究编写一个跨平台(Windows/Debian/Darwin/Red Hat)服务,并且正在比较不同的语言选项。我非常欣赏Go语言的跨平台线程能力和简单的交叉编译,但我想确保在需要时能够轻松访问任何本地(例如Windows Service)API。
在做语言选择时,你应该考虑以下几个方面:
-
跨平台支持:确保你选择的语言能够在目标平台上运行,并且有良好的跨平台支持。
-
API访问:确保语言提供了访问所需本地API的机制。这可能涉及到调用外部库、使用特定的框架或者提供相应的语言特性。
-
性能:考虑你的服务对性能的要求,选择一个在跨平台环境下具有良好性能的语言。
-
社区支持:选择一个有活跃社区支持的语言,这样你在开发过程中可以获得帮助和资源。
-
开发效率:考虑选择一个开发效率高的语言,能够快速迭代和开发你的服务。
综合考虑以上因素,你可以选择一种最适合你需求的语言来编写跨平台服务。
英文:
I'm looking into writing a cross-platform (Windows/Debian/Darwin/Red Hat) service and am comparing language options. I really appreciate Go's cross-platform threading abilities and easy cross-compiling, but I want to make sure I'll be able to easily reach any native (eg. Windows Service) APIs when needed.
What sort of things should I be considering to drive my language decision?
答案1
得分: 1
Go语言通过其核心的syscall
包完全支持调用任意 Win32 API。尽管通过syscall
调用原始的Win32 API并不是很美观(主要是因为你要跨越托管/非托管边界),而且编译器也不支持(类似于Delphi),但这样做是可以的,并且可以自动化生成这些API调用的包装函数。Go的核心包自己就使用了这个功能,其他常见的例子包括odbc
包。
请注意,已经存在一个名为winsvc
的库,它将Go与Windows SCM和事件日志进行了接口化。
还可以看看service
,它提供了统一的API,可以使用平台本地工具将程序转换为守护程序/服务(在Windows上使用winsvc
,如果我没记错的话)。
英文:
Go has full support for calling into arbitrary Win32 API's via its core syscall
package.
While calling out to raw Win32 via syscall
is not exactly pretty to write (mostly because you're crossing the managed/unmanaged boundary, and back) and has no support from the compiler (akin to, say, that of Delphi), this works just OK, and generation of wrapper functions for such API calls can be automated—the Go core packages use this facility for themselves, other popular examples include the odbc
package.
Note that there already exists winsvc
—a library which interfaces Go with the Windows SCM and event log.
Also look at service
which provides unified API for turning your program into a daemon/service using platform-native tools (it uses winsvc
on Windows, IIRC).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论