Лучшая практика для реализации интерфейса с использованием других реализаций - PullRequest
0 голосов
/ 19 апреля 2020

Я совершенно новичок в языке Golang и застрял в следующем случае:

В моем коде я использую пакет, который использует регистратор. Эта структура logger реализует интерфейс, так что его можно настраивать. Интерфейс определяет около 30 методов.

Теперь я хочу использовать регистратор пакетов, но мне нужно немного изменить один из методов. Я могу сделать это, определив собственную структуру логгера, реализовав все 30 методов так, как я хочу. Но это похоже на ненужное дублирование кода.

Есть ли способ реализовать структуру при использовании импортированной структуры логгера? Я думал о встраивании импортированной структуры в мою структуру, а в реализации методов я бы просто вызвал импортированный метод структуры. Примерно так:

type Logger Interface {
   Debug()
   Info()
   Error()
}

type ImportedLogger struct {}

type MyLogger struct {
 Logger ImportedLogger
}

func (ml *MyLogger) Debug() {
    ml.Logger.Debug()
}
//This method I want to change
func (ml *MyLogger) Info() {
    //My code here
    ml.Logger.Info()
}
func (ml *MyLogger) Error() {
    ml.Logger.Error()
}

Еще не пробовал, но это должно сработать, верно?
Но это не похоже на обычный способ ...
Что бы лучшая практика здесь?

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