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

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

使用 Go 解組 PubSub 請求數(shù)據(jù) []bytes

使用 Go 解組 PubSub 請求數(shù)據(jù) []bytes

Go
慕妹3242003 2022-01-17 10:30:16
我有一個從 Google PubSub 請求接收數(shù)據(jù)的端點。根據(jù)這個 repo,對象是這樣的:type pushRequest struct {    Message struct {        Attributes map[string]string        Data       []byte        ID         string `json:"message_id"`    }    Subscription string}數(shù)據(jù)字段的格式一致,如下所示:type Data struct {    Key  string                 `json:"key"`    Body string                 `json:"body"`    Meta map[string]interface{} `json:"meta"`}我可以明顯地用這樣的方式解組 JSON 請求:f := &pushRequest{}json.Unmarshal(msg, &f)剩下的 []bytes 字段。根據(jù)文檔,我可以做這樣的事情來轉換為字符串messages = append(messages, string(f.Message.Data))這沒有幫助,因為我需要它作為一個結構。我可以再次解組數(shù)組:var m Datajson.Unmarshal(f.Message.Data, &m)嘗試將 pushRequest 結構中的字段類型更改為 Data 但沒有成功??瞻椎?..有沒有一種方法可以一次性打開包裝?做兩次似乎很荒謬。如果很明顯,我就是看不到!
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

decoder := json.NewDecoder(r.Body)

psmsg := &PushRequest{}

decoderErr := decoder.Decode(&psmsg)


if decoderErr != nil {

    // Error... 

    return

}


data := Data{}

unmarshalErr := json.Unmarshal([]byte(string(psmsg.Message.Data)), &data)


if unmarshalErr != nil {

    // Error...

    return

}


查看完整回答
反對 回復 2022-01-17
?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

這是我的云功能的一個片段,它用作發(fā)布/訂閱推送端點。關鍵是您首先必須使用PushRequest結構解碼主體。接下來,您可以將消息數(shù)據(jù)轉換為結構。根據(jù)文檔,其中的Data字段Message是 base-64 編碼的字符串,因此您必須先對其進行解碼。


type PushRequest struct {

    Message      pubsub.PubsubMessage `json:"message"`

    Subscription string               `json:"subscription"`

}


type Example struct {

    ID string `json:"id" firestore:"id"`

}


func HTTPEndpoint(w http.ResponseWriter, r *http.Request) {

    var pr common.PushRequest

    if err := json.NewDecoder(r.Body).Decode(&pr); err != nil {

        log.Fatalf("Could not decode body: %v", err)

        return

    }


    data, err := base64.StdEncoding.DecodeString(pr.Message.Data)

    if err != nil {

        log.Fatalf("Base64: %v", err)

        return

    }


    var example Example

    if err := json.Unmarshal(data, &example); err != nil {

        log.Fatalf("Json: %v", err)

        return

    }


    // Do something useful with the struct

}


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號