记录一个关于interface的问题
最近在用Go写一个自己网站数据的RESTFUL API的微服务。由于刚学不久,所以有很多不懂的地方。记录一个自己写函数时遇到的一个问题。
我想给一个函数传入任意类型的参数,其实多数情况下是一个指针,因为要做传引用,要修改一些值。
那么此时,我肯定要在函数中设置一个参数为interface{},类似如下:
func GetOneData(c *gin.Context,datastruct interface{}){...}
我遇到一个问题,就是当我直接在函数中想取该指针所指向的变量的时候,提示我invalid indirect。
查阅资料,发现,interface{}不能直接当指针用,要用断言的方式先进行转换。
func GetOneData(c *gin.Context,datastruct interface{}){
orm := GetOrm()
if orm == nil {
return
}
para_id := c.Params.ByName("id")
id,err := strconv.Atoi(para_id)
if err != nil {
c.JSON(http.StatusBadRequest,gin.H{"status":"failure","error":mapdict[ERRORDATATYPE]})
} else {
isExist,err := orm.Where("id=?",id).Get(datastruct)
if err != nil {
c.JSON(http.StatusInternalServerError,gin.H{"status":"failure","error":err})
} else if isExist == false {
c.JSON(http.StatusNotFound,gin.H{"status":"failure","error":mapdict[NOCORRESPONDDATA]})
} else {
//interface{}不能直接用来做指针操作,要用断言的方法。
if b,ok := datastruct.(*Category);ok {
c.JSON(http.StatusOK, gin.H{"result": *b})
} else if b,ok := datastruct.(*User);ok {
c.JSON(http.StatusOK, gin.H{"result": *b})
}
}
}
}
--------EOF---------
微信分享/微信扫码阅读
微信分享/微信扫码阅读