I think it’s also worth mentioning that because adding an error return value changes the signature of a method in go it is impossible to inadvertently ignore an error in go. Think of go errors like checked exceptions in Java (but without the overhead). Errors cannot be invisible in go unless you try explicitly to make them invisible.
This is why i like error handling in go. Your code will not compile unless you make conscious desicions about how you want to deal with the possible errors.