170 похожих чатов

Коллеги, как канонично привязать зависимости к gRPC серверу? генератор и оф

дока выдают тебе

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?

8 ответов

12 просмотров

Так норм

Как вариант, можно сделать функцию NewServer и сделать поля структуры неэкспортированными

Igor-Rekun Автор вопроса
Alexey Palazhchenko
Как вариант, можно сделать функцию NewServer и сде...

Ага, то есть пихать все зависимости в структуру которую мы передаем в pb.RegisterDummyServer(s, &server{}) это правильный ответ. Прочитал что в го нельзя делать closure поверх методов и кажется что возможных вариантов только два: глобальный скоуп (плохо) и добавлять их членами структуры server. все так?

Igor Rekun
Ага, то есть пихать все зависимости в структуру ко...

Замыкание вокруг методов можно сделать, если я правильно понимаю что это. В Go можно вызвать метод от типа, передав ресивер первым аргументом, типа как в Python self. Но только зачем?

Alexey Palazhchenko
Замыкание вокруг методов можно сделать, если я пра...

Плюс и сам метод можно использовать как значение. Но, опять же, зачем в этом случае?

на практике всегда встречал второй вариант

Igor-Rekun Автор вопроса
Alexander Shavelev
на практике всегда встречал второй вариант

Вот в этом и вопрос что подсознательно кажется что через замыкания. Суммарно вопрос в следующем: Есть кодген от gRPC который хочет методы с определенной сигнатурой и в методе нужен доступ к ДБ например. Нам нужно либо менять ресивер чтобы ДБ была членом ресивера, либо делать ДБ глобальной либо инициализировать методы через замыкание. Есть какие то другие более правильные варианты?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта