title: Convert array to interface{} to slice, but the result can not use len() and other method
body: <p>I tried :</p>
  
  <pre><code>var a [100]int
  func fun1(src interface{}) interface{} {
      src, _ = src.([100]int) // changed []int to [100]int
      fmt.Println(reflect.TypeOf(src)) // result: []int
      dest := make([]int, len(src))
      return dest
  }
  </code></pre>
  
  <p>there is an error: </p>
  
  <pre><code>message: 'invalid argument src (type interface {}) for len'
  </code></pre>
  
  <p>But if I redefine a variable:</p>
  
  <pre><code>var a [100]int
  func fun1(src interface{}) interface{} {
      slice_src, _ := src.([100]int) //changed []int to [100]int
      fmt.Println(reflect.TypeOf(slice_src)) // result: []int
      dest := make([]int, len(slice_src))
      return dest
  }
  </code></pre>
  
  <p>it will be ok.</p>
  
  <p>why <code>reflect.TypeOf(src)</code> will print []int after I used <code>src.([]int)</code> but error shows src is still interface{} ?
  I have checked this <a href="https://stackoverflow.com/questions/18041334/convert-interface-to-int-in-golang">convert interface{} to int</a>, but I still don't understand how to use correct conversion. </p>
  
  <p>There is another question:</p>
  
  <p>I changed the <code>[]int</code> to <code>[100]int</code> since the type assertion before will return <code>[]</code> and <code>false</code>. </p>
  
  <p>But if I don't know the type of <code>a</code>, how can I use type assertion to transfer an array (like<code>[99]int</code>) as a <code>interface{}</code> to function and return slice (<code>[]int</code>)?</p>