问题描述
GO语言实现in_array的问题,即判断一个值是否在slice中存在
问题出现的环境背景及自己尝试过哪些方法
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
func main() {
str1 := "dd"
strArr := []string{"aa","bb","cc","dd"}
exists := inArray(str1, strArr)
fmt.Println(exists)
}
func inArray(need interface{}, needArr []interface{}) bool {
for _,v := range needArr{
if need == v{
return true
}
}
return false
}
你期待的结果是什么?实际看到的错误信息又是什么?
期待结果是 need是可传入的任何类型的值, needArr 传入一个任何类型的slice,检查结果返回true或false,
实现错误是:
# command-line-arguments
srctestinarray.go:14:19: cannot use strArr (type []string) as type []interface {} in argument to inArray
这是对基础语法有误解了。
inArray 函数参数类型为
[]interface{}
表示元素类型为 interface{}
的切片,是说里面每个元素都可以是不同的类型,比如a := []interface{}{"test", 123, map[int]string{2:"bb"}}
里面的三个元素类型均不一致。而如果传入的是指定类型像你的写
[]string{}
, 那么就是说切片里每一个元素都必须是string
类型,这显然与 inArray 的形参[]interface{}
要表达的意思不符。所以,实参类型还得是
[]interface{}
,里面元素可以是任意类型的。