дока выдают тебе
type server struct {
pb.UnimplementedDummyServer
}
func (s *server) Setup(ctx context.Context, in *pb.DummyReq) (*pb.DummyRes, error) {
return &pb.DummyRes{Ok: true}, nil
}
Если мне нужна DB и очередь в обработчиках делают вот так
type server struct {
pb.UnimplementedDummyServer
DB *sql.DB
Nats *nats.Conn
}
или правильнее все генерировать в отдельной функции и вязать зависимости через closure?
Так норм
Как вариант, можно сделать функцию NewServer и сделать поля структуры неэкспортированными
Ага, то есть пихать все зависимости в структуру которую мы передаем в pb.RegisterDummyServer(s, &server{}) это правильный ответ. Прочитал что в го нельзя делать closure поверх методов и кажется что возможных вариантов только два: глобальный скоуп (плохо) и добавлять их членами структуры server. все так?
Замыкание вокруг методов можно сделать, если я правильно понимаю что это. В Go можно вызвать метод от типа, передав ресивер первым аргументом, типа как в Python self. Но только зачем?
Плюс и сам метод можно использовать как значение. Но, опять же, зачем в этом случае?
на практике всегда встречал второй вариант
Вот в этом и вопрос что подсознательно кажется что через замыкания. Суммарно вопрос в следующем: Есть кодген от gRPC который хочет методы с определенной сигнатурой и в методе нужен доступ к ДБ например. Нам нужно либо менять ресивер чтобы ДБ была членом ресивера, либо делать ДБ глобальной либо инициализировать методы через замыкание. Есть какие то другие более правильные варианты?
а где во втором случае замыкания?
Обсуждают сегодня