You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:05