go类型转换

go:interface{}、断言与类型转换

 

interface{}可用于向函数传递任意类型的变量,但对于函数内部,该变量仍然为interface{}类型(空接口类型)

不清楚这点将可能导致错误。如以下代码:

package main
import "fmt"
/*
**用于输出数组元素
*/
func echoArray(a interface{}){
  for _,v:=range a{
    fmt.Print(v," ")
  }
  fmt.Println()
  return
}
func main(){
  a:=[]int{2,1,3,5,4}
  echoArray(a)
}
//以上代码将会报错,因为对于echoArray()而言,a是interface{}类型,而不是[]int类型

接口类型向普通类型的转换称为类型断言(运行期确定)-------摘自《Go语言的类型转换和类型断言》  http://my.oschina.net/chai2010/blog/161418

其它参考http://blog.csdn.net/jonnyhsu/article/details/41148753

所以前面代码中,将echoArray()做如下修改即可:

func echoArray(a interface{}){
    b,_:=a.([]int)//通过断言实现类型转换
  for _,v:=range b{
    fmt.Print(v," ")
  }
  fmt.Println()
  return
} 
原文地址:https://www.cnblogs.com/zh718594493/p/14073759.html