如何正确判断变量google.protobuf.Any的类型?
php小编鱼仔今天要为大家介绍一个关于变量google.protobuf.Any类型的判断方法。在开发过程中,我们经常会遇到需要判断变量类型的情况,而对于google.protobuf.Any类型的变量来说,判断其类型可能会有一些特殊的问题。在本文中,我们将分享一些正确判断google.protobuf.Any类型的变量的方法和技巧,帮助大家更好地解决这个问题。无论你是初学者还是有一定经验的开发者,相信本文都能对你有所帮助。
问题内容
请告诉我这段代码有什么问题,为什么传输的 url 类型 google.protobuf.any 的变量类型未确定?
package main
import (
"fmt"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
)
func main() {
var res protoregistry.MessageTypeResolver = protoregistry.GlobalTypes
typeUrl := "type.googleapis.com/google.protobuf.StringValue"
fmt.Println(protoreflect.FullName(typeUrl))
msgType, err := protoregistry.GlobalTypes.FindMessageByName(protoreflect.FullName("google.protobuf.StringValue"))
if err != nil {
fmt.Println(err)
}
fmt.Println(msgType)
msgType, err = res.FindMessageByURL(typeUrl)
if err != nil {
fmt.Println(err)
}
fmt.Println(msgType)
}
原型:未找到 原型:未找到
解决方法
错误是protoregistry.notfound
,因为在protoregistry.globaltypes
中没有注册消息类型。
要注册google.protobuf.any
,您应该导入包google.golang.org/protobuf/types/known/anypb
。并且 google.protobuf.any
由该包的 init
函数注册(请参阅 源代码)。
要注册 google.protobuf.stringvalue
,您应该导入包 google.golang.org/protobuf/types/known/wrapperspb
。
这是更新的演示,用于查找 google.protobuf.stringvalue
的消息字节:
package main
import (
"fmt"
"google.golang.org/protobuf/reflect/protoregistry"
// importing the package solely for its side-effects (initialization).
// See https://go.dev/ref/spec#Import_declarations.
_ "google.golang.org/protobuf/types/known/anypb"
_ "google.golang.org/protobuf/types/known/wrapperspb"
)
func main() {
res := protoregistry.GlobalTypes
fmt.Println("NumMessages:", res.NumMessages())
msgType, err := protoregistry.GlobalTypes.FindMessageByName("google.protobuf.StringValue")
if err != nil {
fmt.Println(err)
}
fmt.Println(msgType)
msgType, err = res.FindMessageByURL("type.googleapis.com/google.protobuf.StringValue")
if err != nil {
fmt.Println(err)
}
fmt.Println(msgType)
}
以上就是如何正确判断变量google.protobuf.Any的类型?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341