I took a look at Google's new language Go. I am not very impressed. It is from members of the original C team and like Plan 9, it seems to be more of a throwback to earlier technology that has been superseded elsewhere long ago than an advance.
Go does adopt features like Interfaces as a means of supporting multiple inheritance without the overhead and complexity of C++. It is certainly viable as an unencumbered version of Java. Given Oracle's current position on licensing, that is a ship to be jumping.
But when I look at the features Go adds, I am underwhelmed. Yes, the threads, parallelism and message passing should be part of the base language. But that is just syntactic sugar for stuff already done with an API. I much prefer the addition of functional programming features, in particular closures in C#. So when it comes to features, they both have roughly the same number of features to learn, C# makes better choices.
What I really don't like in Go is enforcing variable naming conventions to denote public or private fields, methods, etc. In the fist place it is culturally bound, the Latin alphabet is the only one that is presented in two different cases. So making that a semantic distinction is rather odd for a multinational, multicultural enterprise like Google in the 21st century.
But it is also an approach that gets in the way of good code. If I want to make a private variable public in C#, I just slap 'public' in front of it and it is done. To do the same in Go, I have to change the variable everywhere it is used. Yes, Visual Studio does that for me automatically if I ask nicely. But Visual Studio is only able to do that reliably because C# is designed to support it.
It is a real pity that the folk in Mountain View and the folk in Redmond can't get together and come to an agreement on a common language. There are many features of C# that could be smoothed off, it is a very verbose language that relies too much on intelitype to write stuff for the programmer. But I don't think Go is a better choice.