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
} 

 

posted on 2020-12-02 14:46  孤灯引路人  阅读(83)  评论(0编辑  收藏  举报

导航