package main

import (
	"fmt"
	"reflect"
)

// interface{}转为 []interface{}
func CreateAnyTypeSlice(slice interface{}) ([]interface{}, bool) {
	val, ok := isSlice(slice)

	if !ok {
		return nil, false
	}

	sliceLen := val.Len()

	out := make([]interface{}, sliceLen)

	for i := 0; i < sliceLen; i++ {
		out[i] = val.Index(i).Interface()
	}

	return out, true
}

// 判断是否为slcie数据
func isSlice(arg interface{}) (val reflect.Value, ok bool) {
	val = reflect.ValueOf(arg)

	if val.Kind() == reflect.Slice {
		ok = true
	}

	return
}


// 看需求写的代码
func faa(arg interface{}) {
	slice, ok := CreateAnyTypeSlice(arg)
	if !ok {
		return
	}
	for index,value := range slice {
		fmt.Println(index,value)
	}
}

func main() {

	intSlice := []int{1,2,3,4,5,6,7,8}
	strSlice := []string{"a","b","c","d"}
	boolSlice := []bool{true,true,false,true}


	faa(intSlice)
	faa(strSlice)
	faa(boolSlice)
}