упрощено такой код:
package business
type A struct{}
type storage interface{
GetAllA() ([]A, error)
}
type BusinessLogic struct {
storages []storage
}
func (bl BusinessLogic) doSomethingWithAs() {
for _, s:=range bl.storages {
s.GetAllA()
}
}
func NewBusinessLogic(storages []storage) *BusinessLogic {}
и
packet storage
import "business"
type Connection struct{}
func NewConnection(s string) *Connection
func (c Connection) GetAllA() ([]business.A, error)
в мейне я создаю пачку конекшеной и кладу их в слайс []storage.Connection
но как мне потом их засунуть в NewBusinessLogic? С одним всё просто. тип storage.Connection удовлетворяет интерфейсу сторадж из пакета business.
я могу ручками сделать NewBusinessLogic(connections[0], connections[1], connections[2]) но не могу сделать NewBusinessLogic(connections...)
https://gobyexample.com/variadic-functions
ручками вы делаете тоже самое что и аллокацию нового слайса интерфейсов слайсы в Go инварианты
Обсуждают сегодня