Der PHP-Editor Yuzai stellt Ihnen heute eine Methode vor, mit der Sie den Typ der Variablen google.protobuf.Any bestimmen können. Während des Entwicklungsprozesses stoßen wir häufig auf Situationen, in denen wir den Typ einer Variablen bestimmen müssen. Bei Variablen des Typs „google.protobuf.Any“ kann es bei der Bestimmung ihres Typs zu besonderen Problemen kommen. In diesem Artikel stellen wir einige Methoden und Techniken zur korrekten Bestimmung von Variablen vom Typ google.protobuf.Any vor, um allen dabei zu helfen, dieses Problem besser zu lösen. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, ich glaube, dieser Artikel kann für Sie hilfreich sein.
Bitte sagen Sie mir, was mit diesem Code nicht stimmt. Warum ist der Variablentyp des übertragenen URL-Typs google.protobuf.any unbestimmt?
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) }
Prototyp: nicht gefunden Prototyp: nicht gefunden
Der Fehler besteht darin, dass der Nachrichtentyp nicht in protoregistry.notfound
,因为在protoregistry.globaltypes
registriert ist.
Zur Registrierung google.protobuf.any
,您应该导入包google.golang.org/protobuf/types/known/anypb
。并且 google.protobuf.any
由该包的 init
Funktionsregistrierung (siehe Quellcode).
Registrieren google.protobuf.stringvalue
,您应该导入包 google.golang.org/protobuf/types/known/wrapperspb
.
Hier ist eine aktualisierte Demo zum Finden der Nachrichtenbytes von 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) }
Das obige ist der detaillierte Inhalt vonWie kann man den Typ der Variablen google.protobuf.Any richtig bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!