有更好的方法吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 | var collection []string anyFunc(&collection) // valid anyFunc(collection) // invalid anyFunc(nil) // invalid anyFunc("test") // invalid func anyFunc(collection interface{}) error { rv := reflect.ValueOf(collection) if rv.Kind() != reflect.Ptr || rv.IsNil() || reflect.Indirect(reflect.ValueOf(collection)).Kind() != reflect.Slice { return errors.New("Invalid collection type, need pointer to slice.") } return nil } |
在play.golang.org上的完整示例
- play.golang.org/p/q4hlv8aQmGU吗?
- 没有反思是不可能的,不是吗?
- 如果知道什么类型的切片,则可以使用类型断言而不是反射,但是如果知道任何类型的切片,则可以,而不是没有反射。
- 好的,我不知道具体的类型。 谢谢!
[此答案的文字最初是由mkopriva撰写的]
1 2 3 4 5 6 7 | func loadData(collection interface{}) error { rv := reflect.ValueOf(collection) if rv.Kind() == reflect.Ptr && rv.Elem().Kind() == reflect.Slice { return nil } return errors.New("Invalid collection type, need pointer to slice.") } |