| // 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)) |
| } |