1
0
mirror of https://github.com/golang/go synced 2024-11-25 01:57:56 -07:00

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
This commit is contained in:
James Fysh 2010-08-28 07:54:16 +10:00 committed by Rob Pike
parent b5664ee320
commit 089ce17093

View File

@ -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>