我们为所有微服务提供通用的身份验证服务。 当我们验证响应中的请求时,我们发送如下所示的 JSON。
{
Auth: bool,
Body: interface{}
}
在编写proto3语法时,我们如何编写类似接口(interface)类型的东西?
我尝试过使用 Any 类型,但我无法使用它,因为我们需要在我无法生成的类型 url 中传递消息类型。
响应的原始消息
message AuthResponse {
bool Auth = 1;
google.protobuf.Any Body = 2;
}
有人可以帮忙吗?
最佳答案
您可以将body
类型设置为bytes
。
如果您的正文有一组预定义的类型,那么我建议您将 Auth
结构更改为如下所示:
type AuthResponse struct {
Auth bool
Body Encodable
}
// Encodable defines types that can be encoded into a byte slice.
type Encodable interface {
Encode() []byte
}
然后,在每种类型上实现 Encode() []byte
。
或者,如果您的 Body
字段可以是任何东西,那么也许有一个类似的解决方案,除了您的 Encode
函数如下所示:
func Encode(interface{}) []byte
但是,在这种情况下,您可能必须使用一些反射魔法才能将其编码为某个字节 slice 。您甚至可以使用 JSON
。
希望这会有所帮助!
关于go - 如何在 gRPC Protobuf 中创建接口(interface)类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220640/