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

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

在 Golang 中傳遞結(jié)構(gòu)類型?

在 Golang 中傳遞結(jié)構(gòu)類型?

Go
ABOUTYOU 2022-10-24 09:56:06
請?jiān)徫业膯栴},我是 Golang 的新手,可能有錯誤的方法。我目前正在為內(nèi)部服務(wù)實(shí)施 Terraform 提供程序。正如預(yù)期的那樣,這需要將 JSON 數(shù)據(jù)解組為預(yù)定義的結(jié)構(gòu)類型,例如:type SomeTypeIveDefined struct {    ID   string `json:"id"`    Name String `json:"name"`}我讓自己陷入了這樣一種情況,我有很多重復(fù)的代碼,看起來像這樣    res := r.(*http.Response)    var tempThing SomeTypeIveDefined    dec := json.NewDecoder(res.Body)    err := dec.Decode(&tempThing)為了減少重復(fù),我決定我想做的是創(chuàng)建一個函數(shù)來進(jìn)行 JSON 解組,但將 Struct Type 作為參數(shù)。我瀏覽了幾篇 StackOverflow 文章和 Google Groups 試圖理解使用反射包的一些答案,但我在使用它方面并沒有取得太大的成功。我最近的嘗試是使用reflect.StructOf并傳入一組StructFields,但這似乎仍然需要使用myReflectedStruct.Field(0)而不是myReflectedStruct.ID.我懷疑在諸如泛型之類的東西在 Golang 中廣泛使用之前可能沒有辦法。我考慮了可能需要實(shí)現(xiàn)解組方法的結(jié)構(gòu)的接口,然后我可以將接口傳遞給函數(shù)并調(diào)用解組方法。但無論如何,我仍然在所有結(jié)構(gòu)上實(shí)施解組。我只是想知道有什么建議可以實(shí)現(xiàn)我所追求的,好嗎?
查看完整描述

2 回答

?
智慧大石

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

使用重復(fù)的代碼創(chuàng)建一個輔助函數(shù)。將目標(biāo)值作為指針傳遞。


func decode(r *http.Repsonse, v interface{}) error {

     return json.NewDecoder(res.Body).Decode(v)

}

使用指向您事物的指針調(diào)用輔助函數(shù):


var tempThing SomeTypeIveDefined

err := deocde(r, &tempThing)


查看完整回答
反對 回復(fù) 2022-10-24
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個贊

您可以使用接口執(zhí)行此操作:


func decodeResponse(r *http.Response, dest interface{}) error {

    dec := json.NewDecoder(r.Body)

    return dec.Decode(dest)

}


func handler(...) {

    res := r.(*http.Response)

    var tempThing SomeTypeIveDefined

    if err:=decodeResponse(res,&tempThing); err!=nil {

      // handle err

    }

   ...

}

您不需要為結(jié)構(gòu)實(shí)現(xiàn)解組,因?yàn)?stdlib 解碼器將使用反射來設(shè)置結(jié)構(gòu)字段。


查看完整回答
反對 回復(fù) 2022-10-24
  • 2 回答
  • 0 關(guān)注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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