...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
19 package attribute
20
21 import (
22 "reflect"
23 )
24
25
26 func BoolSliceValue(v []bool) interface{} {
27 var zero bool
28 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero)))
29 copy(cp.Elem().Slice(0, len(v)).Interface().([]bool), v)
30 return cp.Elem().Interface()
31 }
32
33
34 func Int64SliceValue(v []int64) interface{} {
35 var zero int64
36 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero)))
37 copy(cp.Elem().Slice(0, len(v)).Interface().([]int64), v)
38 return cp.Elem().Interface()
39 }
40
41
42 func Float64SliceValue(v []float64) interface{} {
43 var zero float64
44 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero)))
45 copy(cp.Elem().Slice(0, len(v)).Interface().([]float64), v)
46 return cp.Elem().Interface()
47 }
48
49
50 func StringSliceValue(v []string) interface{} {
51 var zero string
52 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero)))
53 copy(cp.Elem().Slice(0, len(v)).Interface().([]string), v)
54 return cp.Elem().Interface()
55 }
56
57
58 func AsBoolSlice(v interface{}) []bool {
59 rv := reflect.ValueOf(v)
60 if rv.Type().Kind() != reflect.Array {
61 return nil
62 }
63 var zero bool
64 correctLen := rv.Len()
65 correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
66 cpy := reflect.New(correctType)
67 _ = reflect.Copy(cpy.Elem(), rv)
68 return cpy.Elem().Slice(0, correctLen).Interface().([]bool)
69 }
70
71
72 func AsInt64Slice(v interface{}) []int64 {
73 rv := reflect.ValueOf(v)
74 if rv.Type().Kind() != reflect.Array {
75 return nil
76 }
77 var zero int64
78 correctLen := rv.Len()
79 correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
80 cpy := reflect.New(correctType)
81 _ = reflect.Copy(cpy.Elem(), rv)
82 return cpy.Elem().Slice(0, correctLen).Interface().([]int64)
83 }
84
85
86 func AsFloat64Slice(v interface{}) []float64 {
87 rv := reflect.ValueOf(v)
88 if rv.Type().Kind() != reflect.Array {
89 return nil
90 }
91 var zero float64
92 correctLen := rv.Len()
93 correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
94 cpy := reflect.New(correctType)
95 _ = reflect.Copy(cpy.Elem(), rv)
96 return cpy.Elem().Slice(0, correctLen).Interface().([]float64)
97 }
98
99
100 func AsStringSlice(v interface{}) []string {
101 rv := reflect.ValueOf(v)
102 if rv.Type().Kind() != reflect.Array {
103 return nil
104 }
105 var zero string
106 correctLen := rv.Len()
107 correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
108 cpy := reflect.New(correctType)
109 _ = reflect.Copy(cpy.Elem(), rv)
110 return cpy.Elem().Slice(0, correctLen).Interface().([]string)
111 }
112
View as plain text