LINUX.ORG.RU

История изменений

Исправление upcFrost, (текущая версия) :

Отдельное поле имхо тоже не панацея. Хз как в сишке/жабе, а в пистоне это будет означать как минимум что ошибки сети, пойманные ошибки логики и не пойманные ошибки логики надо парсить по-разному.

  • Если ты не поймал экспешн и не подсунул кастомную ошибку - он рвёт контекст и вызывает исключение на клиенте, которое нужно ловить
  • Если ты его поймал - контекст не рвётся, исключения нет
  • Если твой код идеален и все исключения на сервере пойманы или отсутствуют - ошибки сети один фиг надо ловить

В сухом остатке у тебя try-catch и на сервере, и на клиенте, при том на сервере он еще и имеет «общий» clause что не очень круто. Учитывая что код/спек в целом для внутреннего пользования имхо проще таки задокументировать поведение и ловить эксепшн один раз

Алсо, раз уж ты ссылался на доку: https://pkg.go.dev/google.golang.org/grpc/status

gRPC service handlers should return an error created by this package, and gRPC clients should expect a corresponding error to be returned from the RPC call.

Именно handlers и clients, а не protocol implementations. Так что это не магия а вполне таки официальное поведение (только что нашёл этот кусок если честно)

Исходная версия upcFrost, :

Отдельное поле имхо тоже не панацея. Хз как в сишке/жабе, а в пистоне это будет означать как минимум что ошибки сети, пойманные ошибки логики и не пойманные ошибки логики надо парсить по-разному.

  • Если ты не поймал экспешн и не подсунул кастомную ошибку - он рвёт контекст и вызывает исключение на клиенте, которое нужно ловить
  • Если ты его поймал - контекст не рвётся, исключения нет
  • Если твой код идеален и все исключения на сервере пойманы или отсутствуют - ошибки сети один фиг надо ловить

В сухом остатке у тебя try-catch и на сервере, и на клиенте, при том на сервере он еще и имеет «общий» clause что не очень круто. Учитывая что код/спек в целом для внутреннего пользования имхо проще таки задокументировать поведение и ловить эксепшн один раз

Алсо, раз уж ты ссылался на доку: https://pkg.go.dev/google.golang.org/grpc/status

gRPC service handlers should return an error created by this package, and gRPC clients should expect a corresponding error to be returned from the RPC call.

Именно handlers и clients, а не protocol implementations.