gpt4 book ai didi

go - 在 Go 中扩展接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 01:25:32 25 4
gpt4 key购买 nike

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

https://github.com/samuel/go-thrift/blob/master/examples/scribe_server/main.go

我想将 channel 传递给 Log() 函数,这样我就可以将抄写数据传递给单独的 go 例程,但我不确定如何修改 scribe/thrift.go将日志接口(interface)扩展为

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

(或者是否需要这样做,以及是否有某种方法可以在不扰乱原始库的情况下扩展接口(interface))。

最佳答案

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

这意味着您想要执行的操作(修改 Scribe 接口(interface),使其 Log 方法具有不同的签名)是不可能的。

你可以做的是拥有一个类型来保存你的 channel 和embeds您要扩展的结构。

例子:

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 接口(interface))但保留了您的附加 channel 。

关于go - 在 Go 中扩展接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com