gpt4 book ai didi

go - 扩展库的结构/接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 02:28:20 27 4
gpt4 key购买 nike

用例

我正在使用 Shopify 的 sarama 库,它是一个客户端库。更具体地说,我正在使用很棒的 ClusterAdmin 结构,但是我想向它添加另一个方法 ListDetailedTopics 并且我必须调用 ClusterAdmin 的非公共(public)方法。

https://github.com/Shopify/sarama/blob/master/admin.go

问题

我不确定如何用我自己的方法“扩展”导出的结构。我试过这个:

func (ca *sarama.ClusterAdmin) ListDetailedtopics() {
b, err := ca.findAnyBroker() // This is a private method I need to call
}

这不起作用,因为“无效的接收器类型 *sarama.ClusterAdmin(sarama.ClusterAdmin 是一种接口(interface)类型)”。我如何通过自己的方法扩展结构/接口(interface)?

最佳答案

不能将接口(interface)扩展到它的包之外。

您可以做的是定义一个实现旧接口(interface)的新接口(interface),然后将您的新方法添加到新接口(interface)。例如:

type ExtendedClusterAdmin interface {
sarama.ClusterAdmin
ListDetailedtopics()
}

如果你想在包内使用私有(private)函数,那么你必须在包内进行。例如,使用补丁。

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

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