error.go
func causer(e *errorT) Error {
	if e.err == nil {
		return e
	}
	return &causerT{
		errorT: e,
	}
}
func causer(e *errorT) Error {
	if e.err == nil {
		return e
	}
	return &causerT{
		errorT: e,
	}
}
func causer ( e * errorT ) Error { if e . err == nil { return e } return & causerT { errorT : e , } }
// causer detects whether e wraps another error, and if so
// returns an Error that also implements the Causer interface.
causer detects whether e wraps another error and if so returns an Error that also implements the Causer interface .