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,
	}
}
// causer detects whether e wraps another error, and if so
// returns an Error that also implements the Causer interface.