首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go函数类型作为接口值

Go函数类型作为接口值
EN

Stack Overflow用户
提问于 2017-03-18 23:58:53
回答 1查看 7K关注 0票数 5

我在go中读到了关于函数类型作为接口值的文章,我遇到了一个我无法理解的例子。下面是:

代码语言:javascript
复制
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()是如何被调用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 00:24:40

fmt软件包的文档中有以下内容:

除了使用谓词%T%p打印时,特殊的格式设置注意事项适用于实现某些接口的操作数。按申请顺序: ..。 如果格式(这是隐式的%v用于Println等)对于字符串(%s %q %v %x %X)有效,适用以下两条规则:

  1. 如果操作数实现了error接口,则将调用Error方法将对象转换为字符串,然后按照谓词(如果有的话)的要求对字符串进行格式化。
  2. 如果操作数实现了String() string方法,则将调用该方法将对象转换为字符串,然后按照谓词(如果有的话)的要求对字符串进行格式化。

换句话说,fmt.Println将尝试打印接口的字符串表示形式。由于错误接口是由binFunc满足的,所以它调用了binFuncError方法。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42881328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档