3 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
fmt.Println(s)打印“錯(cuò)誤”,因?yàn)閑rror在fmt包中是特殊情況
switch v := p.arg.(type) {
case error:
handled = true
defer p.catchPanic(p.arg, verb)
p.printArg(v.Error(), verb, depth)
return
case Stringer:
handled = true
defer p.catchPanic(p.arg, verb)
p.printArg(v.String(), verb, depth)
return
}
}
該fmt包首先檢查對(duì)象是否為 a Formatter、GoStringer、error或Stringer,以獲取要打印的值。
至于你的最后一個(gè)問(wèn)題,你必須使用一個(gè)變量,而不僅僅是分配它。打印它們可以消除錯(cuò)誤。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
關(guān)于你的第一個(gè)問(wèn)題 - 如果你添加fmt.Println(reflect.TypeOf(s))
- 你會(huì)看到輸出不是Succer
but *main.Combi
。
現(xiàn)在,由于它實(shí)現(xiàn)了Error
接口并且Error() string
-Println
認(rèn)為它是一個(gè)錯(cuò)誤對(duì)象并打印其Error
方法的輸出。
將Error
方法更改為任何其他方法將停止Println(s)
打印“錯(cuò)誤”。但它也不會(huì)打印“成功”。

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
在您的第一個(gè)問(wèn)題中,如果您想通過(guò)s
調(diào)用success
func打印成功:
fmt.Println(s.Success())
關(guān)于第二個(gè)問(wèn)題,Go
編譯器檢查未使用的變量,所以只分配它而不使用它顯示編譯錯(cuò)誤
- 3 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報(bào)