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的类型?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号