func ConvertInterfaceToSliceInterface(in interface{}) ([]interface{}, error) {
	inType := reflect.TypeOf(in)
	inValue := reflect.ValueOf(in)
	if inType.Kind() != reflect.Slice {
		return nil, errors.New("argument must be array or slice")
	}
	inLength := inValue.Len()
	sliceInterface := make([]interface{}, inLength)
	for i := 0; i < inLength; i++ {
		sliceInterface[i] = inValue.Index(i).Interface()
	}
	return sliceInterface, nil
}
ConvertInterfaceToSliceInterface converts input data which must be slice type to interface slice,
it means each element in the slice is interface type.
package common
import (
	"fmt"
	"reflect"
	"strconv"
	"strings"
	"time"
	"unsafe"
	"github.com/pkg/errors"
	"github.com/siddontang/go/hack"
	"github.com/romberli/go-util/constant"
)
func StringToBytes(s string) []byte {
	x := (*[2]uintptr)(unsafe.Pointer(&s))
	h := [3]uintptr{x[0], x[1], x[1]}
	return *(*[]byte)(unsafe.Pointer(&h))
}
func BytesToString(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}
func ConvertNumberToString(in interface{}) (string, error) {
	inType := reflect.TypeOf(in)
	switch inType.Kind() {
	case reflect.String:
		return in.(string), nil
	case reflect.Bool:
		if in.(bool) == true {
			return constant.TrueString, nil
		}
		return constant.FalseString, nil
	case reflect.Float32, reflect.Float64,
		reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
		return fmt.Sprintf("%v", in), nil
	default:
		return constant.EmptyString, errors.New(
			fmt.Sprintf("convert %s to string is not supported. ONLY accept string, float, int, bool.",
				inType.String()))
	}
}