errname
v1.0.0
检查哨兵错误与Err类型的检查前缀有Error或Errors类型。
$ go install github.com/Antonboom/errname@latest
$ errname ./...
《公约》指出
错误类型以“错误”和错误变量结束,以“ err”或“ err”开头。
这可以在标准GO库中找到:
type AddrError struct { /* ... */ }
type DecodeError struct { /*...*/ }
type NoMatchingVersionError struct { /*...*/ }
type nothingWrittenError struct { /*...*/ }
type pasteIndicatorError struct { /*...*/ }
type wrapError struct { /*...*/ }
var ErrFinalToken = errors . New ( "final token" )
var ErrRange = errors . New ( "value out of range" )
var ErrUnsupportedAlgorithm = errors . New ( "x509: cannot verify signature: algorithm unimplemented" )
var errMissing = errors . New ( "cannot find package" )
var errNUL = errors . New ( "unexpected NUL in input" )
var errTagValueSpace = errors . New ( "suspicious space in struct tag value" )另外,这可以在一些有关GO中的错误的文章中找到,例如:
乍一看,您会认为命名有些怪异,但这是因为惯例:类型上有“错误”的后缀,而常数则以“ err”为前缀。因此,我们只是在这里遵循惯例。
这是提高代码一致性的好规则。更统一,有什么更好的呢?
只是不要启用衬里。
在撰写此林格时,我不知道复兴。
无论如何, ERRNAME执行更复杂和更好的检查。
// Bad.
type DecodeErr struct {} // the error type name `DecodeErr` should conform to the `xxxError` format
func ( d * DecodeErr ) Error () string { /*...*/ }
// Good.
type DecodeError struct {}
func ( d * DecodeError ) Error () string { /*...*/ } // Bad.
var InvalidURLErr = errors . New ( "invalid url" ) // the sentinel error name `InvalidURLErr` should conform to the `ErrXxx` format
// Good.
var ErrInvalidURL = errors . New ( "invalid url" ) // or errInvalidURL测试中的更多示例。
var EOF = errors . New ( "end of file" )
var eof = errors . New ( "end of file" )
var W = errors . New ( "single letter error" ) // on the developer's conscience
var ovflw = errors . New ( "value is overflow" ) // on the developer's conscience type DecodeError struct {}
func ( d * DecodeError ) Error () string { /*...*/ }
// Bad.
func NewErrDecode () error {
return & DecodeError {}
}
// Good.
func NewDecodeError () error {
return & DecodeError {}
} // Bad.
var ErrExecErr = errors . New ( "exec query error" )
// Good.
var ErrExecQuery = errors . New ( "exec query error" )
var ErrGdfjnskjdfskf = errors . New ( "strange error" ) // on the developer's conscienceErrors后缀: // Bad.
type ValidationErrs [] string
func ( ve ValidationErrs ) Error () string { /*...*/ }
// Good.
type ValidationErrors [] string
func ( ve ValidationErrors ) Error () string { /*...*/ }$ errname . / src / ...
go / src / runtime / error. go : 72 : 6 : the error type name `errorString` should conform to the `xxxError` format
go / src / runtime / error. go : 80 : 6 : the error type name `errorAddressString` should conform to the `xxxError` format
go / src / runtime / panic. go : 180 : 5 : the sentinel error name `shiftError` should conform to the `errXxx` format
go / src / runtime / panic. go : 187 : 5 : the sentinel error name `divideError` should conform to the `errXxx` format
go / src / runtime / panic. go : 194 : 5 : the sentinel error name `overflowError` should conform to the `errXxx` format
go / src / runtime / panic. go : 201 : 5 : the sentinel error name `floatError` should conform to the `errXxx` format
go / src / runtime / panic. go : 208 : 5 : the sentinel error name `memoryError` should conform to the `errXxx` format
go / src / errors / errors. go : 63 : 6 : the error type name `errorString` should conform to the `xxxError` format
go / src / math / bits / bits_errors. go : 12 : 5 : the sentinel error name `overflowError` should conform to the `errXxx` format
go / src / math / bits / bits_errors. go : 15 : 5 : the sentinel error name `divideError` should conform to the `errXxx` format
go / src / syscall / syscall_unix. go : 114 : 6 : the error type name `Errno` should conform to the `XxxError` format
go / src / time / format. go : 394 : 5 : the sentinel error name `atoiError` should conform to the `errXxx` format
go / src / time / zoneinfo_read. go : 110 : 5 : the sentinel error name `badData` should conform to the `errXxx` format
go / src / io / fs / walk. go : 15 : 5 : the sentinel error name `SkipDir` should conform to the `ErrXxx` format
go / src / fmt / scan. go : 465 : 5 : the sentinel error name `complexError` should conform to the `errXxx` format
go / src / fmt / scan. go : 466 : 5 : the sentinel error name `boolError` should conform to the `errXxx` format
go / src / archive / tar / common. go : 39 : 6 : the error type name `headerError` should conform to the `xxxError` format
go / src / context / context. go : 157 : 5 : the sentinel error name `Canceled` should conform to the `ErrXxx` format
go / src / context / context. go : 161 : 5 : the sentinel error name `DeadlineExceeded` should conform to the `ErrXxx` format
go / src / math / big / float. go : 77 : 6 : the error type name `ErrNaN` should conform to the `XxxError` format
go / src / crypto / x509 / internal / macos / security. go : 39 : 6 : the error type name `OSStatus` should conform to the `XxxError` format
go / src / net / cgo_unix. go : 34 : 6 : the error type name `addrinfoErrno` should conform to the `xxxError` format
go / src / crypto / x509 / x509. go : 875 : 6 : the error type name `UnhandledCriticalExtension` should conform to the `XxxError` format
go / src / crypto / x509 / pem_decrypt. go : 110 : 5 : the sentinel error name `IncorrectPasswordError` should conform to the `ErrXxx` format
go / src / crypto / x509 / root. go : 18 : 2 : the sentinel error name `systemRootsErr` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 18 : 2 : the sentinel error name `alertCloseNotify` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 19 : 2 : the sentinel error name `alertUnexpectedMessage` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 20 : 2 : the sentinel error name `alertBadRecordMAC` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 21 : 2 : the sentinel error name `alertDecryptionFailed` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 22 : 2 : the sentinel error name `alertRecordOverflow` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 23 : 2 : the sentinel error name `alertDecompressionFailure` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 24 : 2 : the sentinel error name `alertHandshakeFailure` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 25 : 2 : the sentinel error name `alertBadCertificate` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 26 : 2 : the sentinel error name `alertUnsupportedCertificate` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 27 : 2 : the sentinel error name `alertCertificateRevoked` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 28 : 2 : the sentinel error name `alertCertificateExpired` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 29 : 2 : the sentinel error name `alertCertificateUnknown` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 30 : 2 : the sentinel error name `alertIllegalParameter` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 31 : 2 : the sentinel error name `alertUnknownCA` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 32 : 2 : the sentinel error name `alertAccessDenied` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 33 : 2 : the sentinel error name `alertDecodeError` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 34 : 2 : the sentinel error name `alertDecryptError` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 35 : 2 : the sentinel error name `alertExportRestriction` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 36 : 2 : the sentinel error name `alertProtocolVersion` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 37 : 2 : the sentinel error name `alertInsufficientSecurity` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 38 : 2 : the sentinel error name `alertInternalError` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 39 : 2 : the sentinel error name `alertInappropriateFallback` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 40 : 2 : the sentinel error name `alertUserCanceled` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 41 : 2 : the sentinel error name `alertNoRenegotiation` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 42 : 2 : the sentinel error name `alertMissingExtension` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 43 : 2 : the sentinel error name `alertUnsupportedExtension` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 44 : 2 : the sentinel error name `alertCertificateUnobtainable` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 45 : 2 : the sentinel error name `alertUnrecognizedName` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 46 : 2 : the sentinel error name `alertBadCertificateStatusResponse` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 47 : 2 : the sentinel error name `alertBadCertificateHashValue` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 48 : 2 : the sentinel error name `alertUnknownPSKIdentity` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 49 : 2 : the sentinel error name `alertCertificateRequired` should conform to the `errXxx` format
go / src / crypto / tls / alert. go : 50 : 2 : the sentinel error name `alertNoApplicationProtocol` should conform to the `errXxx` format
go / src / path / filepath / path. go : 337 : 5 : the sentinel error name `SkipDir` should conform to the `ErrXxx` format
go / src / net / http / h2_bundle. go : 1016 : 5 : the sentinel error name `http2errReadEmpty` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1212 : 2 : the sentinel error name `http2errMixPseudoHeaderTypes` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1213 : 2 : the sentinel error name `http2errPseudoAfterRegular` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1712 : 5 : the sentinel error name `http2ErrFrameTooLarge` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1866 : 2 : the sentinel error name `http2errStreamID` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1867 : 2 : the sentinel error name `http2errDepStreamID` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1868 : 2 : the sentinel error name `http2errPadLength` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 1869 : 2 : the sentinel error name `http2errPadBytes` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3400 : 5 : the sentinel error name `http2errTimeout` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3519 : 5 : the sentinel error name `http2errClosedPipeWrite` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3629 : 2 : the sentinel error name `http2errClientDisconnected` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3630 : 2 : the sentinel error name `http2errClosedBody` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3631 : 2 : the sentinel error name `http2errHandlerComplete` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 3632 : 2 : the sentinel error name `http2errStreamClosed` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 4526 : 5 : the sentinel error name `http2errPrefaceTimeout` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 4746 : 5 : the sentinel error name `http2errHandlerPanicked` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 6287 : 2 : the sentinel error name `http2ErrRecursivePush` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 6288 : 2 : the sentinel error name `http2ErrPushLimitReached` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 6930 : 5 : the sentinel error name `http2ErrNoCachedConn` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7016 : 2 : the sentinel error name `http2errClientConnClosed` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7017 : 2 : the sentinel error name `http2errClientConnUnusable` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7018 : 2 : the sentinel error name `http2errClientConnGotGoAway` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7471 : 5 : the sentinel error name `http2errRequestCanceled` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7803 : 2 : the sentinel error name `http2errStopReqBodyWrite` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7806 : 2 : the sentinel error name `http2errStopReqBodyWriteAndCancel` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 7808 : 2 : the sentinel error name `http2errReqBodyTooLong` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 8667 : 5 : the sentinel error name `http2errClosedResponseBody` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 9021 : 2 : the sentinel error name `http2errResponseHeaderListSize` should conform to the `errXxx` format
go / src / net / http / h2_bundle. go : 9022 : 2 : the sentinel error name `http2errRequestHeaderListSize` should conform to the `errXxx` format
go / src / go / scanner / errors. go : 37 : 6 : the error type name `ErrorList` should conform to the `XxxError` format
go / src / html / template / template. go : 34 : 5 : the sentinel error name `escapeOK` should conform to the `errXxx` format
go / src / image / png / reader. go : 128 : 5 : the sentinel error name `chunkOrderError` should conform to the `errXxx` format
go / src / bufio / scan_test. go : 308 : 5 : the sentinel error name `testError` should conform to the `errXxx` format
go / src / crypto / tls / handshake_client_test. go : 1993 : 5 : the sentinel error name `brokenConnErr` should conform to the `errXxx` format
go / src / database / sql / sql_test. go : 4281 : 5 : the sentinel error name `pingError` should conform to the `errXxx` format
go / src / errors / wrap_test. go : 216 : 6 : the error type name `errorT` should conform to the `xxxError` format
go / src / errors / wrap_test. go : 229 : 6 : the error type name `errorUncomparable` should conform to the `xxxError` format
go / src / fmt / errors_test. go : 75 : 6 : the error type name `errString` should conform to the `xxxError` format
go / src / html / template / exec_test. go : 233 : 5 : the sentinel error name `myError` should conform to the `errXxx` format
go / src / html / template / exec_test. go : 1313 : 5 : the sentinel error name `alwaysError` should conform to the `errXxx` format
go / src / net / http / transport_test. go : 6280 : 5 : the sentinel error name `timeoutProtoErr` should conform to the `errXxx` format
go / src / text / template / exec_test. go : 229 : 5 : the sentinel error name `myError` should conform to the `errXxx` format
go / src / text / template / exec_test. go : 1305 : 5 : the sentinel error name `alwaysError` should conform to the `errXxx` format$ errname. / ...
# no issues$ errname. / ...
terraform / internal / getmodules / file_detector. go : 59 : 6 : the error type name `MaybeRelativePathErr` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 13 : 6 : the error type name `ErrHostNoProviders` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 39 : 6 : the error type name `ErrHostUnreachable` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 57 : 6 : the error type name `ErrUnauthorized` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 80 : 6 : the error type name `ErrProviderNotFound` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 104 : 6 : the error type name `ErrRegistryProviderNotKnown` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 123 : 6 : the error type name `ErrPlatformNotSupported` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 159 : 6 : the error type name `ErrProtocolNotSupported` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 181 : 6 : the error type name `ErrQueryFailed` should conform to the `XxxError` format
terraform / internal / getproviders / errors. go : 219 : 6 : the error type name `ErrRequestCanceled` should conform to the `XxxError` format
terraform / internal / registry / errors. go : 10 : 6 : the error type name `errModuleNotFound` should conform to the `xxxError` format
terraform / internal / backend / remote - state / consul / client. go : 36 : 5 : the sentinel error name `lostLockErr` should conform to the `errXxx` format
terraform / internal / command / cliconfig / credentials. go : 408 : 6 : the error type name `ErrUnwritableHostCredentials` should conform to the `XxxError` format