Если у меня есть такая функция:
func AcceptsAnything(v ...interface{}){
args =: FlattenDeep(v); // flatten any arrays or slices
}
Я пытаюсь реализовать FlattenDeep:
func getKind(v interface{}) string {
rt := reflect.TypeOf(v)
switch rt.Kind() {
case reflect.Slice:
return "slice"
case reflect.Array:
return "array"
default:
return "unknown"
}
}
func FlattenDeep(args ...interface{}) []interface{} {
list := []interface{}{}
for _, v := range args {
kind := getKind(v);
if kind != "unknown" {
list = append(list, FlattenDeep(v)...) // does not compile
} else{
list = append(list, v);
}
}
return list;
}
, но я не знаю, как добавить несколько элементов в списокоднажды.Должен ли я просто просмотреть результаты FlattenDeep или есть способ распространить результаты и добавить их в список?
Это может сработать:
func FlattenDeep(args ...interface{}) []interface{} {
list := []interface{}{}
for _, v := range args {
kind := getKind(v);
if kind != "unknown" {
for _, z := range FlattenDeep((v.([]interface{})...) {
list = append(list, z)
}
} else {
list = append(list, v);
}
}
return list;
}
, но я что-то ищучуть менее многословно, если это возможно