-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconv_any.go
More file actions
247 lines (208 loc) · 4.66 KB
/
conv_any.go
File metadata and controls
247 lines (208 loc) · 4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
package conv
import (
"encoding/hex"
"fmt"
"reflect"
"time"
)
// Byte 任意类型转 byte.
func Byte(i any) byte {
return Uint8(i)
}
// Bytes 任意类型转 []byte.
func Bytes(i any) []byte {
return toBytes(i)
}
// BytesZ 字节拓展
func BytesZ(i any) Bytes2 {
return toBytes(i)
}
// Rune 任意类型转 rune.
func Rune(i any) rune {
return Int32(i)
}
// Runes 任意类型转 []rune.
func Runes(i any) []rune {
return []rune(String(i))
}
// String 任意类型转 string.
func String(i any) string {
return toString(i)
}
// Strings 任意类型转 []string
func Strings(i any) (list []string) {
for _, v := range Interfaces(i) {
list = append(list, String(v))
}
return
}
// Int 任意类型转 int.
func Int(i any) int {
return int(Int64(i))
}
// Ints 任意类型转 []int.
func Ints(i any) (list []int) {
for _, v := range Interfaces(i) {
list = append(list, Int(v))
}
return
}
// Int8 任意类型转 int8.
func Int8(i any) int8 {
return int8(Int64(i))
}
// Int16 任意类型转 int16.
func Int16(i any) int16 {
return int16(Int64(i))
}
// Int32 任意类型转 int32.
func Int32(i any) int32 {
return int32(Int64(i))
}
// Int64 任意类型转 int64.
func Int64(i any) int64 {
return toInt64(i)
}
// Int64s 任意类型转 []int64.
func Int64s(i any) (list []int64) {
for _, v := range Interfaces(i) {
list = append(list, Int64(v))
}
return
}
// Uint 任意类型转 uint.
func Uint(i any) uint {
return uint(Uint64(i))
}
// Uint8 任意类型转 uint8.
func Uint8(i any) uint8 {
return uint8(Uint64(i))
}
// Uint16 任意类型转 uint16.
func Uint16(i any) uint16 {
return uint16(Uint64(i))
}
// Uint32 任意类型转 uint32.
// 去除支持IEEE754标准 1.01 >>> 1094057984 使用 math.Float32bits(value)
func Uint32(i any) uint32 {
return uint32(Uint64(i))
}
// Uint64 任意类型转 uint64.
// 去除支持IEEE754标准 1.01 >>> 4622593173774925824 使用 math.Float64bits(value)
func Uint64(i any) uint64 {
return toUint64(i)
}
// Float32 任意类型转 float32.
func Float32(i any) float32 {
return float32(Float64(i))
}
// Float64 任意类型转 float64.
func Float64(i any) float64 {
return toFloat64(i)
}
// Bool 任意类型转 bool.
func Bool(i any) bool {
return toBool(i)
}
// GMap 任意类型转 map[string]any
func GMap(i any) map[string]any {
return toGMap(i)
}
// SMap 任意类型转 map[string]string
func SMap(i any) map[string]string {
return toSMap(i)
}
// IMap 任意类型转 map[any]any
func IMap(i any) map[any]any {
return toIMap(i)
}
// DMap 解析任意数据
func DMap(i any) *Map {
return NewMap(i)
}
// Interfaces 任意类型转 []Interface.
func Interfaces(i any) []any {
return toInterfaces(i)
}
// Array 任意类型转 []Interface.
func Array(i any) []any {
return toInterfaces(i)
}
// Duration 任意类型转 time.Duration
func Duration(i any) time.Duration {
return time.Duration(Int64(i))
}
// BINBool 任意类型转二进制 []bool 返回长度8的倍数且大于0,true代表二进制的1.
func BINBool(i any) []bool {
return toBIN(i)
}
// BIN 任意类型转 []bool 返回长度8的倍数且大于0,true代表二进制的1.
// +1 >>> "00000001"
// -1 >>> "11111111"
func BIN(i any) string {
result := ""
for _, v := range toBIN(i) {
result += func() string {
if v {
return "1"
}
return "0"
}()
}
return result
}
// BINStr 任意类型转 string 长度8的倍数且大于0,由'1'和'0'组成,
// +1 >>> "00000001"
// -1 >>> "11111111"
func BINStr(i any) string {
return BIN(i)
}
// OCT 任意类型转8进制 string 长度固定22,8进制,'0'-'7'.
// -1 >>> "1777777777777777777777"
// +1 >>> "0000000000000000000001"
func OCT(i any) string {
return toOCT(i)
}
// OCTStr 任意类型转 string 长度固定22,8进制,'0'-'7'.
// -1 >>> "1777777777777777777777"
// +1 >>> "0000000000000000000001"
func OCTStr(i any) string {
return toOCT(i)
}
// HEX 转16进制字符串
func HEX(i any) string {
return hex.EncodeToString(Bytes(i))
}
// HEXStr 转16进制字符串
func HEXStr(i any) string {
return hex.EncodeToString(Bytes(i))
}
// Unmarshal 任意类型i转到ptr
func Unmarshal(i any, ptr any, param ...UnmarshalParam) (err error) {
defer func() {
if e := recover(); e != nil {
err = fmt.Errorf("%v", e)
}
}()
return unmarshal(i, ptr, param...)
}
// Copy 复制任意数据
func Copy(i any) any {
if i == nil {
return nil
}
switch v := i.(type) {
case int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64,
float32, float64, complex64, complex128,
string, bool:
return v
case apiCopy:
return v.Copy()
default:
original := reflect.ValueOf(i)
result := reflect.New(original.Type()).Elem()
copySameKind(result, original)
return result.Interface()
}
}