Commit 089ce170 authored by James Fysh's avatar James Fysh Committed by Rob Pike

Documentation: Fix a bug in the example in Constants subsection

	Not a bug per-se, the issue is that the fmt.Sprintf method inside the
	ByteSize.String() method ends up calling itself to generate the String
	representation of the ByteSize value.  Infinite loops are bad.

    Updated as per review comments

R=r
CC=golang-dev
https://golang.org/cl/1974046
parent b5664ee3
...@@ -1539,26 +1539,29 @@ automatically for printing, even as part of a general type. ...@@ -1539,26 +1539,29 @@ automatically for printing, even as part of a general type.
func (b ByteSize) String() string { func (b ByteSize) String() string {
switch { switch {
case b >= YB: case b >= YB:
return fmt.Sprintf("%.2fYB", b/YB) return fmt.Sprintf("%.2fYB", float64(b/YB))
case b >= ZB: case b >= ZB:
return fmt.Sprintf("%.2fZB", b/ZB) return fmt.Sprintf("%.2fZB", float64(b/ZB))
case b >= EB: case b >= EB:
return fmt.Sprintf("%.2fEB", b/EB) return fmt.Sprintf("%.2fEB", float64(b/EB))
case b >= PB: case b >= PB:
return fmt.Sprintf("%.2fPB", b/PB) return fmt.Sprintf("%.2fPB", float64(b/PB))
case b >= TB: case b >= TB:
return fmt.Sprintf("%.2fTB", b/TB) return fmt.Sprintf("%.2fTB", float64(b/TB))
case b >= GB: case b >= GB:
return fmt.Sprintf("%.2fGB", b/GB) return fmt.Sprintf("%.2fGB", float64(b/GB))
case b >= MB: case b >= MB:
return fmt.Sprintf("%.2fMB", b/MB) return fmt.Sprintf("%.2fMB", float64(b/MB))
case b >= KB: case b >= KB:
return fmt.Sprintf("%.2fKB", b/KB) return fmt.Sprintf("%.2fKB", float64(b/KB))
} }
return fmt.Sprintf("%.2fB", b) return fmt.Sprintf("%.2fB", float64(b))
} }
</pre> </pre>
<p> <p>
(The <code>float64</code> conversions prevent <code>Sprintf</code>
from recurring back through the <code>String</code> method for
<code>ByteSize</code>.)
The expression <code>YB</code> prints as <code>1.00YB</code>, The expression <code>YB</code> prints as <code>1.00YB</code>,
while <code>ByteSize(1e13)</code> prints as <code>9.09TB</code>. while <code>ByteSize(1e13)</code> prints as <code>9.09TB</code>.
</p> </p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment