master
go 45 lines 616 Bytes
Raw
1 package unit
2
3 import "fmt"
4
5 type Information int64
6
7 const (
8 _ Information = iota // ignore first value by assigning to blank identifier
9 KB = 1 << (10 * iota)
10 MB
11 GB
12 TB
13 PB
14 EB
15 )
16
17 func (i Information) String() string {
18 tmp := int64(i)
19
20 // default
21 d := tmp
22 symbol := "B"
23
24 switch {
25 case i > EB:
26 d = tmp / EB
27 symbol = "EB"
28 case i > PB:
29 d = tmp / PB
30 symbol = "PB"
31 case i > TB:
32 d = tmp / TB
33 symbol = "TB"
34 case i > GB:
35 d = tmp / GB
36 symbol = "GB"
37 case i > MB:
38 d = tmp / MB
39 symbol = "MB"
40 case i > KB:
41 d = tmp / KB
42 symbol = "KB"
43 }
44 return fmt.Sprintf("%d %s", d, symbol)
45 }