在学习 go web编程那本书的时候,里面有一段,是判断用户复选框是否合法,采用以下代码
slice:=[]string{"football","basketball","tennis"}
a:=Slice_diff(r.Form["interest"],slice)
if a == nil{
return true
}
return false
我用的时候,发现Slice_diff 不是标准函数,好像是第三方的,于是我也建个包,把这个函数弄过来:
func Slice_diff(slice1, slice2 []interface{}) (diffslice []interface{}) {
for _, v := range slice1 {
if !In_slice(v, slice2) {
diffslice = append(diffslice, v)
}
}
return
}
然后,我就加入自己代码
//复选框验证
slice2 := []string{"football", "basketball", "tennis"}
a := beeku.Slice_diff(r.Form["interest"], slice2)
if a != nil {
fmt.Fprintf(w, "复选框选择错误")
return
}
但是一直报错,就是这句
beeku.Slice_diff(r.Form["interest"], slice2)
提示
Cannot use r.Form["interest"] (type []string) as type []interface{}
意思应该是不能把字符串切片转换为interface,interface这东西不是通用类型么,怎么会出现这样的错误,谁明白呢?
因为[]interface{}是切片,类型为interface{},所以只能接收interface{}类型的切片。
而[]string是string类型的切片,所以不能使用。
你所说的通用类型即interface{},如果函数Slice_diff的参数是interface{}类型,就可以 接收任何类型的数据。
区别:[]interface{}是interface{}类型的切片(即切片的元素可以是任何类型);interface{}是空接口类型、不要混淆了!
#1