如何在 gRPC 流拦截器中获取消息值

How to get message value in gRPC stream interceptor

我在服务器中实现了一个 gRPC 流拦截器,如下所示:

// Service define:
// rpc searchProducts(google.protobuf.StringValue) returns (stream Product);

func (w *wrappedStream) RecvMsg(m interface{}) error {
    log.Printf("%T, %v", m, m)
    return w.ServerStream.RecvMsg(m)
}

// Log print:
// *wrapperspb.StringValue, 

使用%T可以正确打印消息类型,但是%v打印的消息值只是一个空白。

我确定服务器收到了正确的消息,因为它回复了客户端正确的内容。

拦截器包装器 RecvMsg 在客户端中也不起作用。

w.ServerStream.RecvMsg(m) 会将数据解组到 m,只需在 RecvMsg() 调用后移动打印。

func (w *wrappedStream) RecvMsg(m interface{}) error {
    err := w.ServerStream.RecvMsg(m)
    log.Printf("%T, %v", m, m)
    return err
}