Periksa bahwa kesalahan sentinel diawali dengan jenis Err dan kesalahan sufiks dengan Error atau Errors .
$ go install github.com/Antonboom/errname@latest
$ errname ./...
Konvensi menyatakan itu
Jenis kesalahan berakhir di "kesalahan" dan variabel kesalahan dimulai dengan "err" atau "err".
Ini dapat ditemukan di Perpustakaan GO Standar:
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" )Juga, ini dapat ditemukan di beberapa artikel tentang kesalahan dalam go, misalnya, di sini:
Pada pandangan pertama Anda akan berpikir penamaannya agak aneh, tetapi itu karena konvensi: tipe sufiks dengan "kesalahan", sementara konstanta diawali dengan "err". Jadi kami hanya mengikuti konvensi di sini.
Ini adalah aturan yang baik untuk meningkatkan konsistensi kode Anda. Lebih banyak keseragaman, apa yang bisa lebih baik?
Hanya saja, jangan mengaktifkan linter.
Pada saat menulis linter ini, saya tidak menyadari kebangkitan .
Errname melakukan lebih banyak cek yang lebih kompleks dan lebih baik.
// 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 errInvalidURLLebih banyak contoh dalam tes.
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 juga diizinkan: // 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