upvote
I have to come to believe that Go is simple for the compiler, not necessarily for the programmer.

`nil` is not simpler than references and Option<T>. lack of enum is complicating my code. automatic type promotion is a hidden bug waiting to happen and preventing proper strong types, lack of `?` is making things verbose. struct tags look simple, until you realize they are hiding a ton of code and creating a ton of corner cases that you still have to manually check, and are completely nonstandard (hello json and `default`, `omitempty/omitzero` etc...). `nil` and interfaces? it took decades to recognize that Generics simplify things for the programmer, no Send/Sync like in rust makes concurrent code more error prone, etc, etc...

And that is without talking about the standard library, where "simple" somehow becomes having `url.Parse` that accepts everything without errors. http body `nil` vs `NoBody`. Who hasn't had to write the Nth implementation of a pipe between reader and writer? Apparently most libraries hear "simple" and think "dumb". We could go on for hours.

Golang is much easier to learn, and rust does remain much more complicated. I don't thing golang hit his target of "simplicity" honestly.

reply
> I have to come to believe that Go is simple for the compiler, not necessarily for the programmer.

You're welcome to believe whatever you want but Go is pretty universally known as one of the simpler, easier to learn compiler languages in existence.

reply
I find working with Go a lot like working with Lego. I agree it lacks some nice primitives (Result / Option types as you mentioned) and nil pointers is a flaw, but overall sheer plug and play nature of the language makes it highly productive. There is simply a lot less compiler gymnastics between what I want to code and how to get there. Combined with LLMs to do sanity checks it’s pretty nice to work with.
reply