Conversation
| @@ -0,0 +1,80 @@ | |||
| syntax = "proto3"; | |||
There was a problem hiding this comment.
На курсе не разбирался OpaqueAPI: https://go.dev/blog/protobuf-opaque. Сейчас это де-факто стандарт для gRPC, потому если будет возможность, то постарайся мигрировать свой код на OpaqueAPI. Если времени не хватит, то попробуй разобраться зачем он нужен и подумай о том, чтобы исползовать его в выпускном проекте.
There was a problem hiding this comment.
Насколько я понимаю у меня уже используется OpaqueAPI (также известный как google.golang.org/protobuf или "APIv2")
syntax = "proto3"; в .proto-файле — это корректно, это просто версия синтаксиса (не путать с версией библиотеки для Go).
There was a problem hiding this comment.
OpaqueAPI предполагает получение доступа к полям proto-запросов при помощи геттеров, в частности. Сейчас у тебя это не так. Посмотри на гайд по миграции на OpaqueAPI
|
|
||
| // Проверка порта | ||
| portNum, err := strconv.Atoi(port) | ||
| if err != nil || portNum < 1 || portNum > 65535 { |
There was a problem hiding this comment.
См. https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
minPortIndex лучше выбрать равным 49152
| // Проверка порта | ||
| portNum, err := strconv.Atoi(port) | ||
| if err != nil || portNum < 1 || portNum > 65535 { | ||
| return errors.New("port must be between 1 and 65535") |
There was a problem hiding this comment.
Лучше определить константы для границ интервала и использовать их при выводе сообщения
|
|
||
| if envGRPCAddr := os.Getenv("GRPC_SERVER_ADDRESS"); envGRPCAddr != "" { | ||
| if err := validateGRPCServerAddr(envGRPCAddr); err != nil { | ||
| log.Fatalf("invalid GRPC_SERVER_ADDRESS: %v", err) |
There was a problem hiding this comment.
log.Fatal завершает процесс с ненулевым кодом завершения (что указывает на то, что процесс завершился с ошибкой). Не стоит делать это из глубины кода: лучше прокинуть ошибку наверх, т.к. возможно наверху мы сможем ее обработать. Если подходящего обработчика нет, то ошибка должна дойти до точки входа, спровоцировать graceful shutdown приложения и, после, завершение процесса.
|
|
||
| err := issueNewToken(ctx, jwtKey) | ||
| if err != nil { | ||
| return nil, status.Error(codes.Internal, "failed to generate token") |
There was a problem hiding this comment.
Внутренние ошибки сервиса стоит логировать. При этом лучше не отдавать детали о них клиентам: это небезопасно
| select { | ||
| case <-connectionReady: | ||
| // Соединение готово к работе | ||
| fmt.Println("Connection established successfully") |
There was a problem hiding this comment.
Для логирования используй логгер, а не fmt
| // Соединение готово к работе | ||
| fmt.Println("Connection established successfully") | ||
| case <-ctx.Done(): | ||
| panic("connection timeout exceeded: server not responding") |
There was a problem hiding this comment.
Не надо паниковать из глубины кода, старайся всегда производить graceful shutdown
No description provided.