Golang向[]interface{}追加元素后输出为结构体类型的问题
问题原因
s.Index(i)的返回值为reflect.Value类型的结构体,而非其包裹的实际业务值- 单独打印
reflect.Value类型变量时,fmt包会自动适配,输出它持有的底层实际值,所以你单独打印s.Index(i)能看到正常结果 - 直接将
reflect.Value类型值追加到[]interface{}切片时,存入切片的是reflect.Value结构体本身,而非它承载的业务值。打印整个切片时,fmt会输出reflect.Value结构体的默认格式,也就是你看到的<xxx Value>样式的内容。
解决方法
追加元素到切片时,调用reflect.Value的Interface()方法,取出其持有的实际值后再存入即可,修改后的代码如下:
func pagination(c *gin.Context, st interface{}) { var allRows []interface{} switch reflect.TypeOf(st).Kind() { case reflect.Slice: s := reflect.ValueOf(st) for i := 0; i < s.Len(); i++ { // 调用.Interface()方法取出reflect.Value承载的实际业务值 allRows=append(allRows,s.Index(i).Interface()) fmt.Println(allRows) } } fmt.Println("AllRows",allRows) }
内容的提问来源于stack exchange,提问作者akglali
相关产品推荐
相关产品推荐

