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 }