Excellent recap.
I love returning error objects in Go, because of the easy to read and "lightweightness" (is that a word?) of the code: easy to read, easy to understand, easy to maintain, but without sacrificing the important pieces. And whenever you call a method which might return an error.
Error code ar estill very useful though, especially in logs. (I like to return error objects, which contains code so that I can get consistent logging)