记录一个关于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---------
本文微信分享/扫码阅读