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中文網其他相關文章!