-
Notifications
You must be signed in to change notification settings - Fork 311
/
converter.go
130 lines (118 loc) · 2.48 KB
/
converter.go
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
// Package converter 格式, 类型转换包
package converter
import (
"fmt"
"strconv"
"unsafe"
)
const (
// B byte
B = (int64)(1 << (10 * iota))
// KB kilobyte
KB
// MB megabyte
MB
// GB gigabyte
GB
// TB terabyte
TB
// PB petabyte
PB
)
// ConvertFileSize 文件大小格式化输出
func ConvertFileSize(size int64, precision ...int) string {
pint := "6"
if len(precision) == 1 {
pint = fmt.Sprint(precision[0])
}
if size < 0 {
return "0B"
}
if size < KB {
return fmt.Sprintf("%dB", size)
}
if size < MB {
return fmt.Sprintf("%."+pint+"fKB", float64(size)/float64(KB))
}
if size < GB {
return fmt.Sprintf("%."+pint+"fMB", float64(size)/float64(MB))
}
if size < TB {
return fmt.Sprintf("%."+pint+"fGB", float64(size)/float64(GB))
}
if size < PB {
return fmt.Sprintf("%."+pint+"fTB", float64(size)/float64(TB))
}
return fmt.Sprintf("%."+pint+"fPB", float64(size)/float64(PB))
}
// ToString unsafe 转换, 将 []byte 转换为 string
func ToString(p []byte) string {
return *(*string)(unsafe.Pointer(&p))
}
// ToBytes unsafe 转换, 将 string 转换为 []byte
func ToBytes(str string) []byte {
return *(*[]byte)(unsafe.Pointer(&str))
}
// IntToBool int 类型转换为 bool
func IntToBool(i int) bool {
return i != 0
}
// SliceInt64ToString []int64 转换为 []string
func SliceInt64ToString(si []int64) (ss []string) {
ss = make([]string, 0, len(si))
for k := range si {
ss = append(ss, strconv.FormatInt(si[k], 10))
}
return ss
}
// SliceStringToInt64 []string 转换为 []int64
func SliceStringToInt64(ss []string) (si []int64) {
si = make([]int64, 0, len(ss))
var (
i int64
err error
)
for k := range ss {
i, err = strconv.ParseInt(ss[k], 10, 64)
if err != nil {
continue
}
si = append(si, i)
}
return
}
// SliceStringToInt []string 转换为 []int
func SliceStringToInt(ss []string) (si []int) {
si = make([]int, 0, len(ss))
var (
i int
err error
)
for k := range ss {
i, err = strconv.Atoi(ss[k])
if err != nil {
continue
}
si = append(si, i)
}
return
}
// MustInt 将string转换为int, 忽略错误
func MustInt(s string) (n int) {
n, _ = strconv.Atoi(s)
return
}
// MustInt64 将string转换为int64, 忽略错误
func MustInt64(s string) (i int64) {
i, _ = strconv.ParseInt(s, 10, 64)
return
}
// ShortDisplay 缩略显示字符串s, 显示长度为num, 缩略的内容用"..."填充
func ShortDisplay(s string, num int) string {
for k := range s {
if k >= num {
return string(s[:k]) + "..."
}
}
return s
}