effective go: extract and test a couple more examples.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/4937045
diff --git a/doc/progs/eff_bytesize.go b/doc/progs/eff_bytesize.go
new file mode 100644
index 0000000..bcfde1a
--- /dev/null
+++ b/doc/progs/eff_bytesize.go
@@ -0,0 +1,47 @@
+// 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))
+}