What I like:
- Ecosystem. Very easy to install and use libraries.
- Can compile programs to single executables easily.
- Easy to work with (Very productive) while also running fast.
What I disliked:
- The syntax but I'm starting to like it. (It seems that Go's syntax is an acquired taste for me)
Like:
- Compiled and can be run as a scripting language.
- Easy to learn, quite simple to use (even concurrency!)
- Cross compilation is an environment variable setting.
- Fast compilation, though apparently this gets worse with reflection and generics (and it's not that important to me honestly)
Dislike:
- The opinionated build/dependency system, which sort of doesn't work with monorepos unless you do things that "are not recommended" like `insteadOf`
- When deserialising things (JSON for example), an omitted key becomes an empty value. As many will tell you, there is a difference between 0 and Null/None.
- Case based visibility. That feels like the opposite of clear.
- Slice semantics, easy to accidentally override values if you're not careful. (slices are references to arrays, you can reference a subset of a slice which looks like a new slice, but appending to it will overwrite a value in original array, because when you do `var slice_new := slice_old[0:30]`; it's really just a reference to slice_old, not a new slice with the contents from 0-30.