| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package main | |
| import "fmt" | |
| type ByteSize float64 | |
| const ( | |
| _ = iota // ignore first value by assigning to blank identifier | |
| KB ByteSize = 1 << (10 * iota) | |
| MB | |
| GB | |
| TB | |
| PB | |
| EB | |
| ZB | |
| YB | |
| ) | |
| func (b ByteSize) String() string { | |
| switch { | |
| case b >= YB: | |
| return fmt.Sprintf("%.2fYB", b/YB) | |
| case b >= ZB: | |
| return fmt.Sprintf("%.2fZB", b/ZB) | |
| case b >= EB: | |
| return fmt.Sprintf("%.2fEB", b/EB) | |
| case b >= PB: | |
| return fmt.Sprintf("%.2fPB", b/PB) | |
| case b >= TB: | |
| return fmt.Sprintf("%.2fTB", b/TB) | |
| case b >= GB: | |
| return fmt.Sprintf("%.2fGB", b/GB) | |
| case b >= MB: | |
| return fmt.Sprintf("%.2fMB", b/MB) | |
| case b >= KB: | |
| return fmt.Sprintf("%.2fKB", b/KB) | |
| } | |
| return fmt.Sprintf("%.2fB", b) | |
| } | |
| func main() { | |
| fmt.Println(YB, ByteSize(1e13)) | |
| } |