当我用interface{}
调用带有*[]interface{}
参数的函数时,是预期的行为,但是当我用[]interface{}
调用函数,然后将参数与{{ 1}}为什么不起作用?
&
func routeWarehouses(engine *gin.Engine) {
var test []database.Warehouses
router.GET("/", genericReads(test))
}
func genericReads(i interface{}) func(c *gin.Context) {
return func(c *gin.Context) {
// When i call genericReads with `test`
//println(reflect.TypeOf(i).Kind()) // Slice
//println(reflect.TypeOf(i).Elem().Kind()) // Struct
// When i call genericReads `&test`
//println(reflect.TypeOf(i).Kind()) // Ptr
//println(reflect.TypeOf(i).Elem().Kind()) // Slice
//println(reflect.TypeOf(i).Elem().Elem().Kind()) // Struct
// When I call database.Reads with `i` ( passed as `&test` ), It's works, I get all rows of the Model otherwise
// When I call database.Reads with `&i` ( passed as `test` ), It doesn't work ( I get `unsupported destination, should be slice or struct` )
if err := database.Reads(&i, database.Warehouses{}); err != nil {
utils.R500(c, err.Error())
return
}
c.JSON(http.StatusOK, i)
}
}
PS:也许这直接来自Gorm吗?
答案 0 :(得分:1)
这是因为切片已经是指针(https://golang.org/ref/spec#Slice_types)。
因此将指针设置为切片就是将指针设置为指针。因此,请记住,如果要处理切片,它们就是数组的指针。
有关如何将切片用作指针的更多信息,请参见:https://golang.org/doc/effective_go.html#slices