douling0053
2017-08-15 14:03
浏览 673
已采纳

在Golang类型断言中可以使用反射数组类型吗?

I need to check if interface{} is an array and create corresponding slice if it is. Unfortunately I do not know array length in advance.

For example:

import (
  "reflect"
)
func AnythingToSlice(a interface{}) []interface{} {
  rt := reflect.TypeOf(a)
  switch rt.Kind() {
  case reflect.Slice:
    slice, ok := a.([]interface{})
    if ok {
      return slice
    }
    // it works

  case reflect.Array:
    // return a[:]
    // it doesn't work: cannot slice a (type interface {})   
    //
    array, ok := a.([reflect.ValueOf(a).Len()]interface{})
    // :-((( non-constant array bound reflect.ValueOf(a).Len()
    if ok {
       return array[:]
    }

  }
  return []interface{}(a)
}

图片转代码服务由CSDN问答提供 功能建议

我需要检查interface {}是否为数组,如果是则创建相应的slice。 不幸的是,我事先不知道数组的长度。</ p>

例如:</ p>

  import(
“ reflect” 
)
func  AnythingToSlice(a interface {})[] interface {} {
 rt:=反射 [] interface {})
如果可以,{
 return slice 
} 
 //可以正常工作
 
区分大小写reflect.Array:
 //返回a [:] 
 //不会 工作:无法切片(类型接口{})
 // 
数组,好的:= a。([[reflect.ValueOf(a).Len()] interface {})
 //:-((( 非常数数组绑定的reflect.ValueOf(a).Len()
(如果可以){
返回数组[:] 
} 
 
} 
返回[]接口{}(a)
} \  n </ code> </ pre> 
 </ div>

1条回答 默认 最新

相关推荐 更多相似问题