I don’t know — I don’t claim that algebraic datatypes are the only proper way to handle errors, I’m okay with exceptions as well (even checked ones). But what go has is only very slightly better than C’s attempt, so I’m not sure it is that subjective.
I think the presence of multiple return values and the ability to easily use complex types for errors make a huge difference (adding wrapping messages, context, etc.).
I agree algebraic data types could improve this. I don't think monadic result types or exceptions would be an improvement.
I understand why people who like monadic constructs don't like it though.