He escrito un pequeño motor en Go para OSX (usando OpenGl para la ventana de gráficos). Tengo algo de experiencia con los motores de juegos C ++ ( http://morganjeff.weebly.com/ ) y decidí probar Go después de leer sobre algunas de las características que ofrece.
A partir de la versión Go 1.1, go tiene soporte para la mayoría de las características que necesitaba para escribir un motor de juego (realmente un núcleo del juego como motor sugiere editores y qué no) incluyendo:
- Enlace de función miembro (para el sistema de mensajería)
- Reflection está integrado (útil para la serialización, soporte de herramientas externas, etc.)
- Interfaces (para implementar comportamiento polimórfico para sistemas, componentes, etc.)
Algunos de los beneficios de usar Go (para un proyecto grande):
- Las pruebas están integradas en el lenguaje (esto incluye pruebas de referencia y algunas afirmaciones)
- Los ejemplos son fáciles de agregar al idioma (y se compilan para su corrección)
- El código específico de arquitectura es fácil de agregar (a través de convenciones de nomenclatura de archivos)
- La creación de perfiles está integrada en el idioma.
- versiones integradas de las importaciones (permite agregar grandes binarios a un repositorio separado de la fuente, mientras lo mantiene versionado y actualizado)
Algunos beneficios de usar Go en general:
- Código fácil de refactorizar
- Go admite subprocesos (a diferencia de C ++ que lo superpuso en capas)
- La velocidad de compilación súper rápida reduce la necesidad de soporte de lenguaje de script
- sistema de tipeo estático (las interfaces se satisfacen mediante tipeo de pato también conocido implícitamente)
- múltiples valores de retorno, parámetros con nombre, atributos de estructura etiquetados
- excelentes herramientas y documentación incorporadas
- lenguaje administrado
Algunas desventajas de usar Go:
- Sin macros ni plantillas.
- No tiene el soporte de la biblioteca de idiomas más maduros
- lenguaje administrado (enumerado dos veces a propósito)
- NO IDE
Hay formas de obtener memoria sin procesar en go (importación "insegura") y vincularé un artículo que muestra cómo se puede perfilar un programa go para memoria y velocidad. En general, la afirmación de Go de que es una C moderna parece muy cierta. Creo que está diseñado "inteligentemente" (por muchas más razones de las que mencioné) y, lo que es más importante, está bien documentado. Un motor diseñado en Go será un poco diferente a un motor diseñado en C ++ (algo a lo que todavía me estoy acostumbrando), pero el motor Go resuelve muchos problemas que no se resuelven realmente en C ++ (es decir, paralelismo, la complejidad del lenguaje de C ++ y el mal uso de la herencia).
Aquí está el artículo que prometí:
http://blog.golang.org/2011/06/profiling-go-programs.html
-Jeff