2
fmt.Stringerと同様に、fmt
パッケージは、値を印刷するときにerror interfaceを探します。 typeが両方のインターフェイスを満たしている場合は、error
ではなく、Stringer
の外観でのみfmt
が検索されます。どうして?タイプにStringer
とerror
の両方を実装する方法は?タイプにfmt.Stringerとエラーインターフェイスの両方を実装する方法は?
fmt.Stringerと同様に、fmt
パッケージは、値を印刷するときにerror interfaceを探します。 typeが両方のインターフェイスを満たしている場合は、error
ではなく、Stringer
の外観でのみfmt
が検索されます。どうして?タイプにStringer
とerror
の両方を実装する方法は?タイプにfmt.Stringerとエラーインターフェイスの両方を実装する方法は?
ない普遍的な解決策はなく、特定の状況で1トリックを行うには非ポインタのレシーバ対ポインタを使用することができます。https://play.golang.org/p/DY4Cq4efsT
私はそれがこのように実装された理由を知りませんが、それは彼らと思われます'fmt.Println()'の 'Stringer'の前に' error'をチェックしています:https://golang.org/src/fmt/print.go#L576 – ymonad
@ymonad正確には、 time: – furusiyya
@hackingNerd "一度に両方のインターフェースを実装することはできません"というのは間違いです。もちろん、両方のインタフェースを実装することもできます。 fmt.Printfが最初に 'Error'を使うことを選択しただけです。しかし、あなたのタイプはまだ両方のインターフェースを実装しています。 – Volker