我正在為一個項目編寫后端,后端通過在請求正文中編碼為 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.
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消