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

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


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


DIEA
浏览 124回答 1
1回答

哔哔one

“是否可以将类型断言登录封装在 GetReqBody 函数中?”--不,这是不可能的,没有任何有用的方式。但是,您可以通过以下方式简化代码:func GetReqBody(r *http.Request, data interface{}) error {    decorder := json.NewDecoder(r.Body)    decorder.DisallowUnknownFields()    return decorder.Decode(data)}func post(w http.ResponseWriter, r *http.Request) {    var newUser req.User    if err := utils.GetReqBody(r, &newUser); err != nil {        // handle err    }    // ...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go