Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menentukan jenis pembolehubah google.protobuf.Any dengan betul?

Bagaimana untuk menentukan jenis pembolehubah google.protobuf.Any dengan betul?

王林
王林ke hadapan
2024-02-09 12:27:27461semak imbas

Bagaimana untuk menentukan jenis pembolehubah google.protobuf.Any dengan betul?

editor php Yuzai hari ini akan memperkenalkan kepada anda kaedah untuk menentukan jenis pembolehubah google.protobuf.Any. Semasa proses pembangunan, kita sering menghadapi situasi di mana kita perlu menentukan jenis pembolehubah Untuk pembolehubah google.protobuf.Sebarang jenis, mungkin terdapat beberapa masalah khas dalam menentukan jenisnya. Dalam artikel ini, kami akan berkongsi beberapa kaedah dan teknik untuk menentukan pembolehubah jenis google.protobuf.Any dengan betul untuk membantu semua orang menyelesaikan masalah ini dengan lebih baik. Sama ada anda seorang pemula atau pembangun berpengalaman, saya percaya artikel ini boleh membantu anda.

Kandungan soalan

Sila beritahu saya apa yang salah dengan kod ini, mengapa jenis pembolehubah jenis url yang dihantar google.protobuf.ada tidak ditentukan?

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)
}

Prototaip: tidak ditemui Prototaip: tidak dijumpai

Penyelesaian

Ralatnya ialah jenis mesej tidak didaftarkan di protoregistry.notfound,因为在protoregistry.globaltypes.

Untuk mendaftar google.protobuf.any,您应该导入包google.golang.org/protobuf/types/known/anypb。并且 google.protobuf.any 由该包的 init pendaftaran fungsi (lihat kod sumber).

Daftar google.protobuf.stringvalue,您应该导入包 google.golang.org/protobuf/types/known/wrapperspb.

Berikut ialah demo yang dikemas kini untuk mencari bait mesej 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)
}

Atas ialah kandungan terperinci Bagaimana untuk menentukan jenis pembolehubah google.protobuf.Any dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam