Heim > Backend-Entwicklung > Golang > Wie kann man den Typ der Variablen google.protobuf.Any richtig bestimmen?

Wie kann man den Typ der Variablen google.protobuf.Any richtig bestimmen?

王林
Freigeben: 2024-02-09 12:27:27
nach vorne
462 Leute haben es durchsucht

Wie kann man den Typ der Variablen google.protobuf.Any richtig bestimmen?

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.

Frageninhalt

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)
}
Nach dem Login kopieren

Prototyp: nicht gefunden Prototyp: nicht gefunden

Lösung

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)
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage