代码之家  ›  专栏  ›  技术社区  ›  learningtech

获取未知类型切片的长度

  •  -1
  • learningtech  · 技术社区  · 7 年前

    假设我有一个函数返回 interface{} . 但我知道返回的项是某种类型的切片。我怎样才能确定那片的长度?这是我尝试的示例代码,但它们都会导致编译错误。

    package main
    
    import (
      "log"
      "reflect"
    )
    func SomeKindOfSlice() interface{} {
      return []int64{0,1,2,3,4,5,6,7,8,9}
    }
    func main() {
      slice := SomeKindOfSlice()
      /*log.Println(reflect.TypeOf(slice).Len())
      log.Println(reflect.TypeOf(slice).Type().Len())
      log.Println(reflect.ValueOf(slice).Type().Len())
      log.Println(reflect.ValueOf(slice).Elem().Type().Len())
      */
      log.Println(reflect.ValueOf(slice).Elem().Type().Len())
    }
    

    我想避免用蛮力的方式来断言 slice 变量仅用于查找长度。

    1 回复  |  直到 7 年前
        1
  •  3
  •   mh-cbon    7 年前

    Len Type

    package main
    
    import (
      "log"
      "reflect"
    )
    func SomeKindOfSlice() interface{} {
      return []int64{0,1,2,3,4,5,6,7,8,9}
    }
    func SomeKindOfArray() interface{} {
      return [10]int64{0,1,2,3,4,5,6,7,8,9}
    }
    func main() {
      log.Println(reflect.ValueOf(SomeKindOfSlice()).Len())
      log.Println(reflect.ValueOf(SomeKindOfArray()).Type().Len())
    }