У меня проблема с использованием интерфейсов.
У меня есть метод Compute (a, b int), который имеет 2 реализации в зависимости от получателя.
func (addition *Addition) Compute(a, b int) int{
return a+b
}
func (mult *Multiplication) Compute(a, b int) int{
return a*b
}
type myInterface{
Compute(a, b int) int
}
Давайте представим, что я нужно вызвать веб-сервис в умножении, чтобы получить значение.
Теперь у нас есть:
func (mult *Multiplication) Compute(iface WSInterface, a, b int) int{
a := iface.getA()
return a*b
}
Теперь мне нужно будет добавить iface WSInterface
в Compute()
Определение интерфейса, и добавьте его в дополнение, даже если оно не нужно.
Я закончу с:
type Addition struct{}
type Multiplication struct{}
func main() {
addition := &Addition{}
multiplication := &Multiplication{}
res1 := addition.Compute(nil, 1, 2)
res2 := addition.Compute(multiplication, 3, 4)
fmt.Print(res1, res2)
}
type WSInterface interface {
getA() int
}
func (mult *Multiplication) getA() int {
return 1 // Mocked
}
type myInterface interface {
Compute(iface myInterface, a, b int) int
}
func (addition *Addition) Compute(iface WSInterface, a, b int) int {
return a + b
}
func (mult *Multiplication) Compute(iface WSInterface, a, b int) int {
return iface.getA() * b
}
, но в дополнение оно не будет использовано.
В реальной жизни у вас может быть несколько зависимостей от разных микросервисов, и я считаю не слишком элегантным определять параметры, которые вы не будете использовать в своей функции. Здесь должно быть что-то не так.
Это нормально делать, это плохая схема или как мне это исправить?