假设我有一个处理请求正文的函数
func GetReqBody(r *http.Request) (interface {}, error){
var data interface{}
decorder := json.NewDecoder(r.Body)
decorder.DisallowUnknownFields()
err := decorder.Decode(&data)
return data, err
}
然后在控制器中,我将不得不做类型断言
func post(w http.ResponseWriter, r *http.Request) {
data, err := utils.GetReqBody(r)
//req.User is a struct
newUser, ok := data.(req.User)
// ...
}
是否可以将类型断言登录封装在GetReqBody
函数中?为此,我需要将结构传递到函数中,但由于它不是一个值,我无法这样做。
答案 0 :(得分:3)
“是否可以将类型断言登录封装在 <form action="https://www.worldometers.info/coronavirus/country/" method="POST">
<label for="country"></label>
<input name="q" id="country" value="">
<input type="submit" value="Submit">
</form>
函数中?” -- 不,这是不可能的,没有任何有用的方式。
但是你可以这样简化你的代码:
GetReqBody
func GetReqBody(r *http.Request, data interface{}) error {
decorder := json.NewDecoder(r.Body)
decorder.DisallowUnknownFields()
return decorder.Decode(data)
}