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