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

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

有沒有辦法在golang中為多個結構重用一個函數?

有沒有辦法在golang中為多個結構重用一個函數?

Go
哈士奇WWW 2022-07-04 10:03:44
我正在為一個項目編寫后端,后端通過在請求正文中編碼為 json 的 POST 請求接收用戶數據。我有兩個結構:在新帳戶創建期間存儲用戶數據的結構:type User struct {    Guid        string ``    Name        string `json:"Name"`    Pass        string `json:"Pass"`    Username    string `json:"Username"`    Email       string `json:"Email"`    Phone       string `json:"Phone"`    Country     string `json:"Country"`}存儲登錄數據的結構type Signin struct {    Username string `json:"Username"`    Pass string `json:"Pass"`}和一個 json 解碼器函數(用于解碼來自請求正文的數據):func extractAndAssignInfo(req *http.Request, dataStruct interface{}) interface{}{    decoder := json.NewDecoder(req.Body)    err := decoder.Decode(&dataStruct)    if err != nil {        log.Fatal(err)    }    return reflect.ValueOf(dataStruct).Interface()}有沒有辦法讓extractAndAssignInfo()函數返回結構?由于 Guid 是使用不同的函數計算的,所以當我嘗試做userdata  := ExtractAndAssignInfo(req, User{})該函數的返回值給出了一個類型map[string]interface {},如果我將返回類型更改為一個結構,那么它將不是一個可以解碼并返回所需結構的“通用”函數。我不確定這是否是解決它的最佳方法。我也很感激在返回結構時可以重用相同函數的任何其他方式。
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

使用這個功能:


func extractAndAssignInfo(req *http.Request, v interface{}) {

    decoder := json.NewDecoder(req.Body)

    err := decoder.Decode(v)

    if err != nil {

        log.Fatal(err)

    }

}

像這樣調用它以將請求解碼為User:


var userData User

extractAndAssignInfo(req, &userData)

并像這樣解碼為Signin:


var signin Signin

extractAndAssignInfo(req, &signin)

側節點:在錯誤的請求數據上退出進程不是一個好主意。考慮返回錯誤extractAndAssignInfo而不是調用log.Fatal.


查看完整回答
反對 回復 2022-07-04
  • 1 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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