をerrorStringにされたのはなぜ私が行くのプログラミング言語の本を読んで、それにはそれが構造体ではなく、文字列
の基になる型を言うエラーパッケージ及びインタフェース
package errors type error interface { Error() string } func New(text string) error { return &errorString{text} } type errorString struct { text string } func (e *errorString) Error() string { return e.text }
の説明だのですerrorStringは、意図していない(または計画された)更新からその表現を保護するための構造体であり、文字列ではありません。
これはどういう意味ですか? errorString
がエクスポートされていないので、パッケージは基になるタイプを隠さないでしょうか?
更新 ここでは、私が代わりにstring
を用いerrorString
を実現使用テストコードです。別のパッケージから使用しようとすると、文字列をエラーとして割り当てることはできません。もちろん
cannot use "bar" (type string) as type testerr.Error in assignment: string does not implement testerr.Error (missing Error method)
をコンパイルするとき
package testerr
type Error interface {
Error() string
}
func New(text string) Error {
return errorString(text)
}
type errorString string
func (e errorString) Error() string { return string(e) }
そして欠点が異なるため、これまで存在し
func main() {
err := errors.New("foo")
err = "bar"
fmt.Prinln(err)
}
は誤差が生じることになります示唆したコードでそれをテストします同じエラー文字列を持つエラーは、私たちが望ましくないと評価されます。
編集を確認してください。 – shebaw
@shebaw私は参照してください。私は方程式の外に 'エラー'インタフェースを残しました。私は私の答えを改訂した。 –
私は、この本が与える2番目の説明は、 'errorString'を文字列にしておけば、同じエラー文字列を持つエラーは' True'と評価されます。例: 'io.EOF == errors.New(" EOF ")'は間違っています。 – shebaw