-2

我的代码中有两个函数,一个具有参数类型的父函数interface{}和另一个具有interface{}参数类型的子函数。我调用childFuncparentFunc断言父参数*interface{}并将其传递给childFunc最后我用&user参数调用父函数

func childFunc(param interface{}){}

func parentFunc(param interface{}){
     childFunc(*(param.(*interface{})))
}

parentFunc(&user)

但我有这个错误:

interface conversion: interface {} is *models.User, not *interface {}

问题是什么?我怎么解决这个问题?

这是我真正的代码。

func Update(context echo.Context, modelUpdatedInstance interface{}, constraints map[string]interface{}) error {

    /* Validation */
    //test := modelUpdatedInstance.(*interface{})
    _, validationErrors := govalidator.ValidateStruct(*(modelUpdatedInstance.(*interface{})))
    if validationErrors != nil {
        return validation.CheckValidation(context, validationErrors)
    }

    if constraints != nil {
        database.DB.First(modelUpdatedInstance, constraints["id"]).Model(modelUpdatedInstance).Updates(modelUpdatedInstance)
    } else {
        return context.JSON(http.StatusBadRequest, map[string]interface{}{"Errors": []string{"no identifier"}})
    }

    return context.JSON(http.StatusOK, *(modelUpdatedInstance.(*interface{})))
}
4

1 回答 1

0

govalidator.ValidateStruct函数需要一个指向结构的指针。顶部调用者有一个指向结构的指针。

只需通过调用传递指针。

func top() {
    childFunc(&user{})
}

func parentFunc(param interface{}) {
    childFunc(param)
}

func childFunc(param interface{}) {
    _, err := govalidator.ValidateStruct(param)
    ...
}

在操场上运行它

于 2020-07-26T17:18:32.003 回答