2 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
Packagefmt
的文檔指出:
...特殊格式考慮適用于實(shí)現(xiàn)某些接口的操作數(shù)。按申請(qǐng)順序:
...
如果 %v 動(dòng)詞與 # 標(biāo)志 (%#v) 一起使用并且操作數(shù)實(shí)現(xiàn)了 GoStringer 接口,則會(huì)調(diào)用該接口。
如果格式(對(duì)于 Println 等隱含 %v)對(duì)字符串(%s %q %v %x %X)有效,則適用以下兩條規(guī)則:
如果操作數(shù)實(shí)現(xiàn)了錯(cuò)誤接口,則會(huì)調(diào)用 Error 方法...
如果操作數(shù)實(shí)現(xiàn)方法 String() 字符串,則將調(diào)用該方法...
由于您使用fmt.Println
,第4和第5開(kāi)始發(fā)揮作用,它更喜歡稱(chēng)Error()
在String()

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
你忽略了你的函數(shù)返回的事實(shí)fmt.Stringer
將所得的值傳遞給fmt.Println
作為interface{}
。
您看到該Error()
方法的結(jié)果只是因?yàn)?code>fmt包在檢查error
接口之前檢查了fmt.Stringer
接口。
- 2 回答
- 0 關(guān)注
- 217 瀏覽
添加回答
舉報(bào)