在Go中扩展接口

在Go中扩展接口,go,thrift,scribe,Go,Thrift,Scribe,很新。我正在尝试修改此go scribe服务器实现: 我想将一个通道传递给Log()func,这样我就可以将scribe数据传递给一个单独的go例程,但我不确定如何修改以扩展日志接口 Log(messages []*scribe.LogEntry, counts chan string) (或者这是否是必需的,如果有某种方法可以扩展接口而不破坏原始库)。您不能修改或扩展已声明的接口,您可能只能创建一个新的接口 扩展旧的一个。但是不能在接口中重新声明方法 这意味着您想要做的事情(修改Scr

很新。我正在尝试修改此go scribe服务器实现:

我想将一个通道传递给
Log()
func,这样我就可以将scribe数据传递给一个单独的go例程,但我不确定如何修改以扩展日志接口

Log(messages []*scribe.LogEntry, counts chan string)  

(或者这是否是必需的,如果有某种方法可以扩展接口而不破坏原始库)。

您不能修改或扩展已声明的接口,您可能只能创建一个新的接口 扩展旧的一个。但是不能在接口中重新声明方法

这意味着您想要做的事情(修改
Scribe
接口,使其
Log
方法具有不同的签名)是不可能的

你可以做的是有一个类型来保存你的频道和你想要扩展的结构

例如:

type Scribe interface {
    Log(Messages []*LogEntry) (ResultCode, error)
}

type ModifiedScribe struct {
    Scribe
    counts chan string
}

func (m *ModifiedScribe) Log(Messages []*LogEntry) (ResultCode, error) {
    // do something with m.counts

    // call embedded implementation's Log message
    return m.Scribe.Log(Messages)
}
上面的示例定义了一个结构,该结构嵌入了一个
Scribe
,并定义了它自己的
Log
方法, 使用其中一个嵌入式
Scribe
。此结构可用于
Scribe
是预期的(因为它实现了
Scribe
接口),但保留了额外的通道