質問: ErrFieldCount { return fmt.Sprintf("record on line %d: %v", e.Line, e.Err) } if e.StartLine != e.Line { return fmt.Sprintf("record on line %d; parse error on line %d, column %d: %v", e.StartLine, e.Line, e.Column, e.Err) } return fmt.Sprintf("parse error on line %d, column %d: %v", e.Line, e.Column, e.Err) } ``` ソース内を検索してもError()が使用されているところが見つからず、どのようにエラーを出力しているのかが分からない状況です。 お手数ですが、上記メソッドがどのようにソース内で使用されているのか、ご教示いただければと思います。
回答: 例えばlogやfmtのPrintにわたすと「Error()メソッドを持つもの」を区別してこのメソッドを呼んで文字列します。 「Error()メソッドを持つもの」とはerror型の値です。 つまりすべてのエラーオブジェクトはlogやfmtで文字列化されてコンソールやファイルに出力することができます。 追記: 「type assertion」や「type switch」について調べてみてください。 ``` err := &ParseError{} v, ok := err.(error) if ok { fmt.Print(v.Error()) } ``` 実際には ここでタイプスイッチによりError()メソッドが呼ばれています。