2 回答
TA贡献1859条经验 获得超6个赞
我最终传递了我正在解组的对象。
obj := new(GRPCResponse)
assertHTTPResponseOK[*GRPCResponse](t, ctx, "some-endpoint", obj)
func assertHTTPResponseOK[T protoreflect.ProtoMessage](t *testing.T, ctx context.Context, endpoint string, object T) {
body, err := GetResponse(endpoint)
require.Nil(t, err)
err = protojson.Unmarshal(body, object)
require.Nil(t, err)
}
TA贡献1871条经验 获得超8个赞
这是一个泛型友好的原型解组器,它避免传递第二个类型,代价是反射调用以查看指针内部的类型并调用它的构造函数。
var msg T // Constrained to proto.Message
// Peek the type inside T (as T= *SomeProtoMsgType)
msgType := reflect.TypeOf(msg).Elem()
// Make a new one, and throw it back into T
msg = reflect.New(msgType).Interface().(T)
errUnmarshal := proto.Unmarshal(body, msg)
- 2 回答
- 0 关注
- 142 浏览
添加回答
举报