2014-10-09 5 views
0

Я занимаюсь написанием кросс-платформенной (Windows/Debian/Darwin/Red Hat) службы и сравниваю варианты языка. Я очень благодарен за кросс-платформенные возможности Go и кросс-компиляцию, но я хочу убедиться, что при необходимости я смогу легко получить доступ к любым API-интерфейсам (например, Windows Service).Должен ли я писать кросс-платформенное обслуживание в Go?

Какие вещи я должен учитывать при принятии решения на своем языке?

+2

Выбор языка - это выбор автомобиля; их много, и у каждого есть свои преимущества и недостатки. Тем не менее, я бы посоветовал вам, по крайней мере, тест-драйв Go. – thwd

+1

Неправильный сайт для такого рода вопросов, однако одна из лучших вещей о Go - это тот факт, что вы можете написать OS-агностический код и легко иметь 'xx_windows.go', который будет работать только на windows и' xx_darwin.go' и т. Д. – OneOfOne

ответ

1

Go имеет полную поддержку для звонка в произвольно Win32 API через его ядро ​​syscall.

При вызове raw Win32 через syscall писать не совсем красиво (в основном потому, что вы пересекаете управляемую/неуправляемую границу и обратно) и не имеет поддержки от компилятора (сродни, скажем, от Delphi), это работает нормально, а генерация функций обертки для таких вызовов API может быть автоматизирована. — Пакеты Go Core используют этот инструмент для себя, другие популярные примеры включают пакет odbc.

Обратите внимание, что уже существует winsvc — библиотека, интерфейс которой идет с помощью Windows SCM и журнала событий.

Также смотрите service, который предоставляет унифицированный API для превращения вашей программы в демон/службу с использованием инструментов на платформе (он использует winsvc для Windows, IIRC).

+0

Просто, чтобы продемонстрировать, [этот ответ] (http://stackoverflow.com/a/26124494/720999) содержит ссылку на небольшую рабочую программу, вызывая три функции Win32 API, используя пакет 'syscall'. – kostix

+0

Удивительно, я посмотрю на это. Благодаря! – ryno2019

Смежные вопросы