Расширение структуры библиотеки / интерфейса - PullRequest
0 голосов
/ 06 апреля 2019

Вариант использования

Я использую библиотеку sarama от Shopify, которая является клиентской библиотекой. Точнее говоря, я использую ClusterAdmin структуру, которая великолепна, однако я хочу добавить к ней еще один метод ListDetailedTopics, и я должен вызвать непубличные методы ClusterAdmin.

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 - это тип интерфейса)». Как я могу расширить структуру / интерфейс моими собственными методами?

1 Ответ

4 голосов
/ 06 апреля 2019

Вы не можете расширить интерфейс за пределы пакета.

Вместо этого вы можете определить новый интерфейс, который реализует старый интерфейс, а затем добавить новый метод в новый интерфейс. Например:

type ExtendedClusterAdmin interface {
   sarama.ClusterAdmin
   ListDetailedtopics()
}

Если вы хотите использовать приватную функцию внутри пакета, вам придется делать это внутри самого пакета. Например, с патчем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...