1 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
答案可在此處的fmt
文檔中找到:
如果格式(對(duì)于 Println 等隱式為 %v)對(duì)于字符串有效(%s %q %v %x %X),則適用以下兩個(gè)規(guī)則:
如果操作數(shù)實(shí)現(xiàn)了錯(cuò)誤接口,將調(diào)用 Error 方法將對(duì)象轉(zhuǎn)換為字符串,然后根據(jù)動(dòng)詞(如果有)的要求對(duì)其進(jìn)行格式化。
如果一個(gè)操作數(shù)實(shí)現(xiàn)了 String() string 方法,將調(diào)用該方法將對(duì)象轉(zhuǎn)換為字符串,然后根據(jù)動(dòng)詞(如果有)的要求對(duì)其進(jìn)行格式化。
所以實(shí)際上,對(duì)于同時(shí)支持兩者的任何值,String()
根本不會(huì)調(diào)用該方法,因?yàn)?code>error接口優(yōu)先于Stringer
接口。您可以使用這樣的程序進(jìn)行測(cè)試:
package main
import (
? ? "fmt"
)
type foo string
func (f foo) String() string {
? ? return "string"
}
func (f foo) Error() string {
? ? return "error"
}
func main() {
? ? fmt.Println(foo(""))
}
輸出:
error
- 1 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)