I'd like to hear some Java devs opinions on Go. On one hand I'd like to try and learn something new, on the other hand, everything I could do in go I would probably do better in java (as in I know how to do it already)
First, similarities: Go seems like a really good language for building software for teams. It's straightforward and simple, and generally what you see is what you get. That's great.
Where it wins:
- having a standard formatter is amazing
- having a compiler that is fast, and an executable that starts fast and runs quickly is great
- the built-in http stuff seems better than what was available in Java's stlib for years
- channels are nice
- lower resource usage, especially memory
- by breaking with the JVM, you get to abandon a lot of bad patterns because they simply aren't available
Where it loses:
- I simply don't need pointers for the places I want to use Go
- the GC, though different, still needs tuning/consideration for high-load, and if I have to mess with GCs I want the options available to me on the JVM
- the dependency management story was rough for a while, though that seems to have settled into something more mature
- the error handling is unacceptably anemic
- the type system is unacceptably anemic. I'm not even talking about generics (maybe I am) - it just seems moronic to have to subvert it with "interface{}" all the time, which also renders the documentation pretty opaque to me.
Overall Go is a solid tool, and I see why it's so successful, especially for network stuff and command-line tools. It's hard to overstate how great an experience it is to have a fast-compile loop and I really envy that (I feel this way any time I use most languages not on the JVM).
And for learning something new, there's nothing novel that I've seen in Go. If you want to use it because it is pragmatic and efficient, that's a great reason.