将未初始化的结构传递给函数

时间:2021-07-09 13:33:16

标签: go

假设我有一个处理请求正文的函数

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函数中?为此,我需要将结构传递到函数中,但由于它不是一个值,我无法这样做。

1 个答案:

答案 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)
}