函数返回值是接口类型时,是否隐性地使用了接口?

xiaosi · · 1824 次点击
结构体有Error方法,即实现error接口,所以fmt.Println()内会执行p.fmtString(v.Error(), verb) 如果实现String()方法(即实现Stringer接口),也会有类似结果 如果两个同时实现,打印时Error()生效 ``` switch verb { case 'v', 's', 'x', 'X', 'q': // Is it an error or Stringer? // The duplication in the bodies is necessary: // setting handled and deferring catchPanic // must happen before calling the method. switch v := p.arg.(type) { case error: handled = true defer p.catchPanic(p.arg, verb, "Error") p.fmtString(v.Error(), verb) return case Stringer: handled = true defer p.catchPanic(p.arg, verb, "String") p.fmtString(v.String(), verb) return } } ```
#1
更多评论