Библиотека Go gRPC предоставляет интерфейсы для создания ваших собственных пользовательских перехватчиков (т.е. функций промежуточного программного обеспечения), и я пытаюсь написать два перехватчика регистрации.Первый - это унарный сервер-перехватчик, где я легко могу регистрировать параметры запроса, используя объект, переданный в функцию-перехватчик.
func loggingUnary(context context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
start := time.Now()
resp, err := handler(context, req)
printLogMessage(err, info.FullMethod, context, time.Since(start), req)
return resp, err
}
Как я могу сделать то же самое с потоковым перехватчиком, который не может удобно передать объект запроса в качестве параметра?Есть ли другой способ получить доступ к запросу?
func loggingStream(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
start := time.Now()
err := handler(srv, stream)
printLogMessage(err, info.FullMethod, stream.Context(), time.Since(start), "")
return err
}