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

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

在 Golang 中傳遞結構類型?

在 Golang 中傳遞結構類型?

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

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

使用重復的代碼創建一個輔助函數。將目標值作為指針傳遞。


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

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

}

使用指向您事物的指針調用輔助函數:


var tempThing SomeTypeIveDefined

err := deocde(r, &tempThing)


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

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

您可以使用接口執行此操作:


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

    }

   ...

}

您不需要為結構實現解組,因為 stdlib 解碼器將使用反射來設置結構字段。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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