请问在grpc的rpc方法中的异常处理

使用gogoproto 开启marshal时,在rpc方法中捕获异常好像也没有用,因为生成的marshal函数初也会爆异常。请问怎样处理这个问题,另外测试了一把,etcd的rpc方法中也是不管的,例如put方法中产生一个异常,整个etcd进程就直接退出。请问这种问题最好的处理方式是怎样的。

例如下面的

func (m *HelloReply) Marshal() (dAtA []byte, err error) {
    size := m.Size()
    dAtA = make([]byte, size)
    n, err := m.MarshalTo(dAtA)
    if err != nil {
        return nil, err
    }
    return dAtA[:n], nil
}
func (m *HelloReply) Size() (n int) {
    var l int
    _ = l
**  l = len(m.Name)**
    if l > 0 {
        n += 1 + l + sovHelloworld(uint64(l))
    }
    return n
}

上面的代码中,当调用返回gogoproto生成的Marshal方法对数据进行序列化时,调用Size方法,在Size 方法中再访问HelloReply里面的Name,但是这里m是nil m.Name 会panic。

已邀请:

要回复问题请先登录注册