My experience with Go:
if name, ok := elements["Un"]; ok
Syntax is not much of a counter argument because it's subjective and that subjectivity changes with time. You list R as the languages you know, that has a hideous syntax but still, it does what it has to do.
I agree syntax is important but we underestimate our adaptability or overestimate how much important it actually is. I hate PHP syntax yet there are hundreds of thousands of people that are fine with it. I hated Go syntax by looking at it yet I spent a couple of days with tutorial and Go by Example and now it's etched in my brain and I'm okay with it. I have a vague idea about what that Elixir code is doing (because I picked up Erlang years ago, and forgotten most of it) and I honestly don't like the syntax you pasted but I'm 100% sure that if I were to spend a day with the tutorial I would be fine with it as well. Pattern matching is one of the greatest things about Erlang (and Elixir), it's just that we're not used to the declarative syntax. I think we yap too much about syntax and not enough about actual problems of this or that language (lately I'm starting to think async/await is a bad pattern but that's for 2019 :D)
If we want to talk trash about Go there are plenty of arguments: no generics (and your criticism about interface is valid, it's just a well known error in design), the error handling still hasn't convinced me 100% and it can get annoying (they are thinking of tweaking it), channels are thrown around as a panacea but they are still subject to race condition (at least the more recent articles are mindful of that), there aren't that many data structures in the standard lib and the over-relying on code generation for some libs.
In return your get a language simple to pick up (a pro or a con, ymmv), reasonably simple to use concurrently, with small footprint and easy binary deployment and fast (cross) compilation.
The author, Pike, regretted having called it a systems language in the beginning and as you noticed it was birthed as an equalizer to help experienced and less experienced developers work on the same code base. Google has that famed mono-repo taking ages to compile, they needed something for everybody which means compromise.
I don't think Go is the perfect language but it's good enough for lots of server side software. I wouldn't use it on the client side for systems development, and it seems that Rust is slowly taking off there.
Thanks for the laughs, for once I mostly agree with you ;-)
Finally! This response is a sip of fresh water all over comments.
Hereby I agree with everything you’ve stated.
I by no mean want Go to disappear or something. I just was pointing out to general design flaws and asked to stop calling it a panacea and the best language ever.
Erlang has been having better concurrency for 30 years already and I frankly don’t think the main goal in CS should be to lower a threshold for newcomers. Maybe it would make sense to educate ourselves to pick up better solutions instead of simplest ones.
Everything else is fine :)
I think you have to have both. Higher standards and compromise.
Erlang has been there for 30 years but it took Elixir to get the model mainstream(ish), so something wasn't right. Go is a compromise even if I think they are overselling its concurrency model
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.