<!DOCTYPE html> <html> <head> <meta http-eqiv="content-type" content="text/html;charset=utf-8"> <title>Go by Example: String Formatting</title> <link rel=stylesheet href="site.css"> </head> <script type="text/javascript"> if (window.location.host == "gobyexample.com") { var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-34996217-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); } </script> <body> <div class="example" id="string-formatting"> <h2><a href="./">Go by Example</a>: String Formatting</h2> <table> <tr> <td class="docs"> <p>Go offers excellent support for string formatting in the <code>printf</code> tradition. Here are some examples of common string formatting tasks.</p> </td> <td class="code empty leading"> </td> </tr> <tr> <td class="docs"> </td> <td class="code leading"> <div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span> </pre></div> </td> </tr> <tr> <td class="docs"> </td> <td class="code leading"> <div class="highlight"><pre><span class="kn">import</span> <span class="s">"fmt"</span> <span class="kn">import</span> <span class="s">"os"</span> </pre></div> </td> </tr> <tr> <td class="docs"> </td> <td class="code leading"> <div class="highlight"><pre><span class="kd">type</span> <span class="nx">point</span> <span class="kd">struct</span> <span class="p">{</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span> <span class="p">}</span> </pre></div> </td> </tr> <tr> <td class="docs"> </td> <td class="code leading"> <div class="highlight"><pre><span class="kd">func</span> <span class="nx">main</span><span class="p">()</span> <span class="p">{</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>Go offers several printing “verbs” designed to format general Go values. For example, this prints an instance of our <code>point</code> struct.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">p</span> <span class="o">:=</span> <span class="nx">point</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">}</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%v\n"</span><span class="p">,</span> <span class="nx">p</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>If the value is a struct, the <code>%+v</code> variant will include the struct’s field names.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%+v\n"</span><span class="p">,</span> <span class="nx">p</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>The <code>%#v</code> variant prints a Go syntax representation of the value, i.e. the source code snippet that would produce that value.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%#v\n"</span><span class="p">,</span> <span class="nx">p</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>To print the type of a value, use <code>%T</code>.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%T\n"</span><span class="p">,</span> <span class="nx">p</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>Formatting booleans is straight-forward.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%t\n"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>There are many options for formatting integers. Use <code>%d</code> for standard, base-10 formatting.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%d\n"</span><span class="p">,</span> <span class="mi">123</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>This prints a binary representation.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%b\n"</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>This prints the character corresponding to the given integer.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%c\n"</span><span class="p">,</span> <span class="mi">33</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p><code>%x</code> provides hex encoding.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%x\n"</span><span class="p">,</span> <span class="mi">456</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>There are also several formatting options for floats. For basic decimal formatting use <code>%f</code>.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%f\n"</span><span class="p">,</span> <span class="mf">78.9</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p><code>%e</code> and <code>%E</code> format the float in (slightly different versions of) scientific notation.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%e\n"</span><span class="p">,</span> <span class="mf">123400000.0</span><span class="p">)</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%E\n"</span><span class="p">,</span> <span class="mf">123400000.0</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>For basic string printing use <code>%s</code>.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%s\n"</span><span class="p">,</span> <span class="s">"\"string\""</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>To double-quote strings as in Go source, use <code>%q</code>.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%q\n"</span><span class="p">,</span> <span class="s">"\"string\""</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>As with integers as seen earlier, <code>%x</code> renders the string in base-16, with two output characters per byte of input.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%x\n"</span><span class="p">,</span> <span class="s">"hex this"</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>To print a representation of a pointer, use <code>%p</code>.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"%p\n"</span><span class="p">,</span> <span class="o">&</span><span class="nx">p</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>When formatting numbers you will often want to control the width and precision of the resulting figure. To specify the width of an integer, use a number after the <code>%</code> in the verb. By default the result will be right-justified and padded with spaces.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"|%6d|%6d|\n"</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">345</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>You can also specify the width of printed floats, though usually you’ll also want to restrict the decimal precision at the same time with the width.precision syntax.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"|%6.2f|%6.2f|\n"</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">,</span> <span class="mf">3.45</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>To left-justify, use the <code>-</code> flag.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"|%-6.2f|%-6.2f|\n"</span><span class="p">,</span> <span class="mf">1.2</span><span class="p">,</span> <span class="mf">3.45</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>You may also want to control width when formatting strings, especially to ensure that they align in table-like output. For basic right-justified width.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"|%6s|%6s|\n"</span><span class="p">,</span> <span class="s">"foo"</span><span class="p">,</span> <span class="s">"b"</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>To left-justify use the <code>-</code> flag as with numbers.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Printf</span><span class="p">(</span><span class="s">"|%-6s|%-6s|\n"</span><span class="p">,</span> <span class="s">"foo"</span><span class="p">,</span> <span class="s">"b"</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>So far we’ve seen <code>Printf</code>, which prints the formatted string to <code>os.Stdout</code>. <code>Sprintf</code> formats and returns a string without printing it anywhere.</p> </td> <td class="code leading"> <div class="highlight"><pre> <span class="nx">s</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Sprintf</span><span class="p">(</span><span class="s">"a %s"</span><span class="p">,</span> <span class="s">"string"</span><span class="p">)</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="nx">s</span><span class="p">)</span> </pre></div> </td> </tr> <tr> <td class="docs"> <p>You can format+print to <code>io.Writers</code> other than <code>os.Stdout</code> using <code>Fprintf</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Fprintf</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stderr</span><span class="p">,</span> <span class="s">"an %s\n"</span><span class="p">,</span> <span class="s">"error"</span><span class="p">)</span> <span class="p">}</span> </pre></div> </td> </tr> </table> <table> <tr> <td class="docs"> </td> <td class="code"> <div class="highlight"><pre><span class="gp">$</span> go run string-formatting.go <span class="go">{1 2}</span> <span class="go">{x:1 y:2}</span> <span class="go">main.point{x:1, y:2}</span> <span class="go">main.point</span> <span class="go">true</span> <span class="go">123</span> <span class="go">1110</span> <span class="go">!</span> <span class="go">1c8</span> <span class="go">78.900000</span> <span class="go">1.234000e+08</span> <span class="go">1.234000E+08</span> <span class="go">"string"</span> <span class="go">"\"string\""</span> <span class="go">6865782074686973</span> <span class="go">0x42135100</span> <span class="go">| 12| 345|</span> <span class="go">| 1.20| 3.45|</span> <span class="go">|1.20 |3.45 |</span> <span class="go">| foo| b|</span> <span class="go">|foo |b |</span> <span class="go">a string</span> <span class="go">an error</span> </pre></div> </td> </tr> </table> <p class="next"> Next example: <a href="regular-expressions">Regular Expressions</a>. </p> <p class="footer"> <a href="https://twitter.com/gobyexample">@gobyexample</a> | <a href="mailto:mmcgrana@gmail.com">feedback</a> | <a href="https://github.com/mmcgrana/gobyexample/blob/master/examples/string-formatting">source</a> | <a href="https://github.com/mmcgrana/gobyexample#license">license</a> </p> </div> </body> </html>