I would argue Go is a poorly designed language, though people are free to their opinions. Keeping things like null pointers when other languages got rid of them entirely (or used union type proofs to ensure they could not be referenced). The lack of tuples, pattern matching, enums, return ADT, etc. make it unwieldly to use in practice and verbose in nature. Sure, it is "simple", but that isn't the goal... the goal is to make it "easy" for the users to write correct programs.<p>The article also highlights explicit errors vs. exceptions. Sure, I would agree, but that isn't the only comparison. The best comparison would be via "return ADTs" ala Rust (and they could have been special cased for a return type as Go's designers did for special generic list/maps) which make it possible to disambiguate errors from valid return values without risk of error.