dongyi3776 2017-03-05 10:12
浏览 48
已采纳

去lang反射如何识别接口基础类型

For instance :

package main

import (
    "fmt"
    "reflect"
)

func main() {

    arr := []int{}

    var arrI interface{} = arr

    arrValuePtr := reflect.ValueOf(&arrI)
    arrValue := arrValuePtr.Elem()

    fmt.Println("Type: ", arrValue.Type()) // prints: "Type: interface{}
    fmt.Println("Interface value: ", arrValue.Interface()) // prints: "Interface value: []"


    arrValue.Set(reflect.Append(arrValue, reflect.ValueOf(55))) 
    // error: panic: reflect: call of reflect.Append on interface Value
}

So is there a way to recognize that arrValue is a slice value rather than interface{} value? https://play.golang.org/p/R_sPR2JbQx

  • 写回答

1条回答 默认 最新

  • dqfr90979 2017-03-05 11:43
    关注

    As you have seen, you cannot directly append to the interface. So, you want to get the value associated with the interface and then use it with Value.Append.

    arr := []int{}
    
    var arrI interface{} = arr
    
    arrValuePtr := reflect.ValueOf(&arrI)
    arrValue := arrValuePtr.Elem()
    
    fmt.Println("Type: ", arrValue.Type()) // prints: "Type: interface{}
    fmt.Println("Interface value: ", arrValue.Interface()) // prints: "Interface value: []"
    fmt.Println(reflect.ValueOf(arrValue.Interface()))
    arr2 := reflect.ValueOf(arrValue.Interface())
    arr2 = reflect.Append(arr2, reflect.ValueOf(55))
    fmt.Println(arr2) // [55]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂