去没有名字的函数/方法

时间:2014-11-07 12:46:59

标签: go

我真的很难为我遇到的一种功能找到一个名字。

这是有问题的功能:

https://github.com/go-fsnotify/fsnotify/blob/master/fsnotify.go#L32

这就是我使用它的方式(根据fsnotify示例):

        select {

            case event := <-watcher.Events:

                log.Println("Event Triggered: ", event)

因为Println'event'按照上面的函数返回格式化的字符串,我只是在努力理解对'event'的直接调用是如何使用该函数的,但我希望它可以被访问,就像struct fields(event.Name,event.Op):

event.funcForReturningNicelyFormattedEvent()

感觉这是一个'默认'功能,因为它没有名称,它只返回格式化数据 - 我很难想出名称/类型/搜索词,所以我可以找到更多并理解概念,更重要的是它背后的推理。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

非常简单 - println在任何自动实现它的结构上使用String()方法。这是Go的隐式接口的经典用例:具有接口所包含的方法的每个结构都被认为是实现接口。

如果它有func String() string,则它被视为Stringer并由fmt使用。当然,你也可以在你自己的结构上使用它。

答案 1 :(得分:1)

函数Println检查传递的值是否实现了接口Stringer。如果是,则在此值上调用方法String。事件类型通过在链接到的摘录中提供String方法的实现来实现该接口。

在Go中,您不必声明implement interface