亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 golang 在編譯時不知道其類型的情況下解析 protobuf3 消息?

如何使用 golang 在編譯時不知道其類型的情況下解析 protobuf3 消息?

Go
互換的青春 2023-05-22 17:18:05
這是一個場景:您正在 golang 中實現一個通用組件,它可以與任何類型的原型消息(二進制序列化)一起使用,并且需要在編譯時不知道其類型的情況下反序列化二進制原型數據。例如,我在編寫通用的 kafka json 歸檔程序時遇到了這個問題,該組件將:從配置中接收消息類型(字符串)和 kafka 主題的名稱需要在運行時創建二進制 -> 內存解串器和內存 -> json 序列化器。你如何從消息名稱中獲得二進制字節的反序列化器?
查看完整描述

1 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

golang 原型庫有一個用于此目的的輔助實用程序:


// MessageType returns the message type (pointer to struct) for a named message.

// The type is not guaranteed to implement proto.Message if the name refers to a

// map entry.

func MessageType(name string) reflect.Type {

? ?// ....

}

要使用它,您可以使用類似于此的方法:


func getProto(messageType string, messageBytes []byte) proto.Message {

? ? pbtype := proto.MessageType(messageType)

? ? msg := reflect.New(pbtype.Elem()).Interface().(proto.Message)

? ? proto.Unmarshal(messageBytes, msg)

? ? return msg

}

查看完整回答
反對 回復 2023-05-22
  • 1 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號