我在go中读到了关于函数类型作为接口值的文章,我遇到了一个我无法理解的例子。下面是:
type binFunc func(int, int) int
func add(x, y int) int { return x + y }
func (f binFunc) Error() string { return "binFunc error" }
func main() {
var err error
err = binFunc(add)
fmt.Println(err)
}你可以在Go游乐场这里上找到它。
我知道您可以将一个方法分配给一个函数类型,但是我不知道Error()是如何被调用的。
发布于 2017-03-19 00:24:40
fmt软件包的文档中有以下内容:
除了使用谓词
%T和%p打印时,特殊的格式设置注意事项适用于实现某些接口的操作数。按申请顺序: ..。 如果格式(这是隐式的%v用于Println等)对于字符串(%s %q %v %x %X)有效,适用以下两条规则:
error接口,则将调用Error方法将对象转换为字符串,然后按照谓词(如果有的话)的要求对字符串进行格式化。String() string方法,则将调用该方法将对象转换为字符串,然后按照谓词(如果有的话)的要求对字符串进行格式化。换句话说,fmt.Println将尝试打印接口的字符串表示形式。由于错误接口是由binFunc满足的,所以它调用了binFunc的Error方法。
https://stackoverflow.com/questions/42881328
复制相似问题