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

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

如何在 go 中構建抽象 json 解組器

如何在 go 中構建抽象 json 解組器

Go
墨色風雨 2023-07-17 16:22:52
我有多個 API,它們在高級響應上遵循類似的結構。它總是以這種形式返回答案:{"data": {"feed":[{...}]}, "success": true}然而,F(xiàn)eed 中的結構會有所不同,具體取決于具體的 API。我現(xiàn)在想構建一個抽象函數來處理各種 API。我有以下對象:type SourceDTO struct { // top level object    Success bool       `json:"success"`    Data    Feed       `json:"data"`}type Feed struct {    FeedData []<???> `json:"Feed"`}(真實的物體更復雜,但這表明了想法)如果有一些通用代碼和一些基于高級數據(例如成功)的邏輯,那么 go 為不同的 API 解析這個問題的好方法是什么?編輯: 我正在擴展這個,以更多地解釋我關于我正在尋找的“模式”的問題的擴展。我想創(chuàng)建這個解析 API 組的包。然后必須將 DTO 對象轉移到其他一些對象中。這些“最終”對象在不同的包(實體包)中定義,然后必須被持久化。我現(xiàn)在想知道如何將所有這些整合在一起:“最終”實體對象、從 DTO 到實體的轉換函數、不同 API 的解析及其常見和不同的結果組件。轉換函數屬于哪里(包方面)?EDIT2:深入研究問題后將 FeedData 指定為切片(請參閱評論)json去
查看完整描述

2 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

您可以將SourceDTO結構嵌入到另一個結構中,如下所示:


type SourceDTO struct { // top level object

    Success bool       `json:"success"`

}


type FeedResponse struct {

    FeedData YourCustomFeedStruct `json:"feed"`


    // Embedded Struct

    SourceDTO

}

Success現(xiàn)在您可以從 FeedResponse 結構訪問bool。SourceDTO此外,可以從 FeedResponse 訪問該結構上定義的任何方法。



查看完整回答
反對 回復 2023-07-17
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

為了在 json 解組中有一些抽象,它可以用于interface{}許多用例。


package main


import (

    "encoding/json"

    "fmt"

)


type UniversalDTO struct {

    Success bool        `json:"success"`

    Data    interface{} `json:"data"`

}


type ConcreteData struct {

    Source string `json:"source"`

    Site   string `json:"site"`

}


func main() {

    jsondata := []byte(`{"sucess":"true","data":[{"source":"foo","site":"bar"}]}`)


    data := make([]ConcreteData, 0, 10)

    dtoToSend := UniversalDTO{Data: &data}


    describe(dtoToSend)

    describe(dtoToSend.Data)


    json.Unmarshal(jsondata, &dtoToSend)


    describe(dtoToSend)

    describe(dtoToSend.Data)

}


func describe(i interface{}) {

    fmt.Printf("(%v, %T)\n", i, i)

}

在這里測試: https: //play.golang.org/p/SSSp_zptMVN


json.Unmarshal需要一個將 json 放入其中的對象。因此,首先我們總是需要一個對象。根據目標對象的具體實例,可以使用具體的結構對象(當然必須單獨創(chuàng)建)覆蓋interface{} 。這里一個重要的學習是,go接口也可以用 slice 覆蓋。通過這種方式,也可以將數組解組為 go 對象。但是,結構體的切片必須定義為指向該類型的指針的切片。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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