3 回答

TA貢獻1789條經驗 獲得超8個贊
fmt.Println(s)打印“錯誤”,因為error在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包首先檢查對象是否為 a Formatter、GoStringer、error或Stringer,以獲取要打印的值。
至于你的最后一個問題,你必須使用一個變量,而不僅僅是分配它。打印它們可以消除錯誤。

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

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