Stacktraces are not needed in idiomatic Go. If you are going to propagate an error to your caller, you are obliged to prepend it with what you were doing. Only the top-level method to touch an error (the one that is going to swallow it, or immediately adjacent to network) should log it. Then the log line has a nice human-curated stacktrace as its error message:<p>doing the thing in the controller: accessing the database: context deadline exceeded<p>I find that people want stacktraces in Go because they want to log errors when they first occur. This is fine, but it's fighting the language. Wrap properly, and log at the <i>last</i> place you can.