第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 golang 中使用 protobuf.any

如何在 golang 中使用 protobuf.any

Go
繁華開滿天機(jī) 2022-07-04 10:09:27
我在我的 go 項(xiàng)目中使用 grpc。下面是代碼:example.proto:syntax = "proto3";message Example {    string message = 1;    google.protobuf.Any details = 2;}main.gofunc logMessage (m string, d interface{}) {    message := & example.message{       message: m,       details: ??    }        log(&message)}但我不確定如何處理 details(interface{}) 字段。我知道我可以使用任何類型的接口,但不知道如何在這里使用它。任何人都可以幫忙嗎?謝謝
查看完整描述

4 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

由于 protobuf/ptypes 已被棄用,因此值得使用anypb.UnmarshalTo


import (

    "google.golang.org/protobuf/types/known/anypb"

    "github.com/golang/protobuf/ptypes/any"

)


func Unmarshal(data *any.Any) (*YourMessage, err) {

    var m YourMessage

    err := anypb.UnmarshalTo(data, &m, proto.UnmarshalOptions{})

    return &m,err

}


查看完整回答
反對(duì) 回復(fù) 2022-07-04
?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

protobuf/ptypes包具有將任意 proto 消息轉(zhuǎn)換為任意 proto 消息的實(shí)用程序:


MarshalAny:


func MarshalAny(m proto.Message) (*anypb.Any, error)


MarshalAny 將給定的消息 m 編組為 anypb.Any 消息。


UnmarshalAny:


func UnmarshalAny(any *anypb.Any, m proto.Message) error


UnmarshalAny 將包含在 anypb.Any 消息中的編碼值解組到提供的消息 m 中。如果目標(biāo)消息與 Any 消息中的類型不匹配或發(fā)生解組錯(cuò)誤,則返回錯(cuò)誤。


在您的示例中,您將使用以下內(nèi)容:


func logMessage (m string, d proto.Message) {

    details, err := ptypes.MarshalAny(d)

    if err != nil {

        panic(err)

    }

    message := & example.message{

        message: m,

        details: details

    }    

    log(&message)

}


查看完整回答
反對(duì) 回復(fù) 2022-07-04
?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

func pbany(v interface{}) (*anypb.Any, error) {

pv, ok := v.(proto.Message)

if !ok {

    return &anypb.Any{}, fmt.Errorf("%v is not proto.Message", pv)

}

return anypb.New(pv)

使用anypb.Newapi,在您的代碼中,傳遞d給 pbany 函數(shù)


查看完整回答
反對(duì) 回復(fù) 2022-07-04
?
飲歌長(zhǎng)嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

func interfaceToAny(v interface{}) (*anypb.Any, error) {

    bytes, err := json.Marshal(v)

    if err != nil {

        println("error json.Marshal interfaceToAny")

        return nil, err

    }

    m := api.Bytes{B: bytes}

    return anypb.New(&m)

}


message Bytes {

  bytes b = 1;

}


查看完整回答
反對(duì) 回復(fù) 2022-07-04
  • 4 回答
  • 0 關(guān)注
  • 1510 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)