1
0
mirror of https://github.com/golang/go synced 2024-11-22 16:54:48 -07:00
go/doc/progs/eff_bytesize.go

48 lines
987 B
Go
Raw Normal View History

// 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", float64(b/YB))
case b >= ZB:
return fmt.Sprintf("%.2fZB", float64(b/ZB))
case b >= EB:
return fmt.Sprintf("%.2fEB", float64(b/EB))
case b >= PB:
return fmt.Sprintf("%.2fPB", float64(b/PB))
case b >= TB:
return fmt.Sprintf("%.2fTB", float64(b/TB))
case b >= GB:
return fmt.Sprintf("%.2fGB", float64(b/GB))
case b >= MB:
return fmt.Sprintf("%.2fMB", float64(b/MB))
case b >= KB:
return fmt.Sprintf("%.2fKB", float64(b/KB))
}
return fmt.Sprintf("%.2fB", float64(b))
}
func main() {
fmt.Println(YB, ByteSize(1e13))
}