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?

王林
Lepaskan: 2024-02-09 12:27:27
ke hadapan
481 orang telah melayarinya

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan