I've written a small engine in Go for OSX (using OpenGl for the graphics window). I have some experience with C++ game engines (http://morganjeff.weebly.com/) and decided to try out Go after reading about some of the features it offers.
As of the Go 1.1 release go has support for most of the features I needed to write a game engine (really a game core as an engine suggests editors and what not) including:
- Member function binding (for the messaging system)
- Reflection is built-in (useful for serialization, external tool support, etc)
- Interfaces (for implement polymorphic behavior for systems, components, etc)
Some of the benefits to using Go (for a large project):
- Testing is built into the language (this includes benchmark tests and some assertions)
- Examples are easy to add to the language (and they are compiled for correctness)
- Architecture specific code is easy to add (through file naming conventions)
- Profiling is built in to the language
- built-in versioning of imports (allows for adding large binaries to a separate repository from the source, while keeping it versioned and up to date)
Some benefits of using Go in general:
- Easy to refactor code
- Go supports threading (unlike C++ which layered it on top)
- super fast compilation speed reduces the need for scripting language support
- static typing system (interfaces are satisfied via duck typing aka implicitly)
- multiple return values, named parameters, tagged struct attributes
- great built-in tools and documentation
- managed language
Some downsides of using Go:
- No macros or templates
- Doesn't have the library support of more mature languages
- managed language (listed twice on purpose)
- NO IDE
There are ways to get raw memory in go (import "unsafe") and I'll link an article that shows how a go program can be profiled for memory and speed. All in all, Go's claim that it's a modern C seems very true. I think it's "smartly" designed (for a lot more reasons than I mentioned) and, more importantly, it's well documented. An engine designed in Go is going to be a little different than an engine designed in C++ (something I'm still getting used to), but the Go engine solves a lot of problems that aren't really solved in C++ (namely parallelism, the complexity of C++s language, and the mis-use of inheritance).
Here's the article I promised:
http://blog.golang.org/2011/06/profiling-go-programs.html
-Jeff