Я написал небольшой движок в Go для OSX (используя OpenGl для графического окна). У меня есть некоторый опыт работы с игровыми движками C ++ ( http://morganjeff.weebly.com/ ) и я решил попробовать Go после прочтения о некоторых функциях, которые он предлагает.
Начиная с версии Go 1.1, Go поддерживает большинство функций, которые мне нужны для написания игрового движка (на самом деле игровое ядро, поскольку движок предлагает редакторов, а что нет), включая:
- Привязка функции-члена (для системы обмена сообщениями)
- Отражение встроено (полезно для сериализации, поддержки внешних инструментов и т. Д.)
- Интерфейсы (для реализации полиморфного поведения систем, компонентов и т. Д.)
Некоторые из преимуществ использования Go (для большого проекта):
- Тестирование встроено в язык (в том числе тесты производительности и некоторые утверждения)
- Примеры легко добавить к языку (и они составлены для корректности)
- Код, специфичный для архитектуры, легко добавить (благодаря соглашениям об именах файлов)
- Профилирование встроено в язык
- встроенное управление версиями импорта (позволяет добавлять большие двоичные файлы в отдельный репозиторий из исходного кода, сохраняя его версионным и актуальным)
Некоторые преимущества использования Go в целом:
- Легко рефакторинг кода
- Go поддерживает многопоточность (в отличие от C ++, который размещал его сверху)
- супер быстрая скорость компиляции уменьшает необходимость поддержки языка сценариев
- система статической типизации (интерфейсы удовлетворяются посредством неявной типизации утки)
- множественные возвращаемые значения, именованные параметры, теговые атрибуты структуры
- отличные встроенные инструменты и документация
- управляемый язык
Некоторые недостатки использования Go:
- Нет макросов или шаблонов
- Не поддерживает библиотеку более зрелых языков.
- управляемый язык (указан дважды по назначению)
- НЕТ ИДЕ
Есть способы получить необработанную память в go (импортировать «unsafe»), и я приведу ссылку на статью, которая показывает, как программа go может быть профилирована по памяти и скорости. В общем, утверждение Go о том, что это современный C, кажется очень верным. Я думаю, что он «умно» разработан (по гораздо большему количеству причин, чем я упомянул), и, что более важно, он хорошо документирован. Движок, разработанный в Go, будет немного отличаться от движка, разработанного в C ++ (к чему я все еще привыкаю), но движок Go решает множество проблем, которые на самом деле не решаются в C ++ (а именно параллелизм, сложность языка C ++ и неправильное использование наследования).
Вот статья, которую я обещал:
http://blog.golang.org/2011/06/profiling-go-programs.html
-Джефф