这个问题的答案是:不会。如果你还想了解更多信息,就往下看吧。^_^有时候我们希望有这样的写法:定义一个参数为[]interface的函数,在程序运行的过程中传入[]int或者其他类型的slice,从而达到少写的目的代码。比如下面的弱智切片求和例子:packagemainimport"fmt"funcsliceSum(inters[]interface{})(resinterface{}){nums:=inters.([]int)sum:=0for_,num:=rangenums{sum+=num}returnsum}funcmain(){is:=[]int{7,8,9,10}fmt.Println(sliceSum(is))}为了让这个程序更通用,无论是参数还是返回值are是使用的接口类型。编译时会报错:./inter.go:6:16:invalidtypeassertion:inters.([]int)(non-interfacetype[]interface{}onleft)./inter.go:19:22:cannotuseis(type[]int)astype[]interface{}inargumenttosliceSum第一个错误:不能把左边的[]interface{}转换成右边的[]int,因为[]interface本身不是接口类型,所以不能断言。第二个错误:sliceSum函数不能接受[]int类型的参数,因为[]int不是[]interface类型。首先将程序更改为正确的程序:packagemainimport"fmt"funcsliceSum(inters[]interface{})(resinterface{}){sum:=0for_,inter:=rangeinters{sum+=inter.(int)}returnsum}funcmain(){is:=[]int{7,8,9,10}iis:=make([]interface{},len(is))fori:=0;i
