<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<meta name="description" content="Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#00ADD8">
{{with .TabTitle}}
  <title>{{.}} - The Go Programming Language</title>
{{else}}
  <title>The Go Programming Language</title>
{{end}}
<link href="https://fonts.googleapis.com/css?family=Work+Sans:600|Roboto:400,700" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Product+Sans&text=Supported%20by%20Google&display=swap" rel="stylesheet">
<link type="text/css" rel="stylesheet" href="/lib/godoc/style.css">
<script>window.initFuncs = [];</script>
{{with .GoogleAnalytics}}
<script>
var _gaq = _gaq || [];
_gaq.push(["_setAccount", "{{.}}"]);
window.trackPageview = function() {
  _gaq.push(["_trackPageview", location.pathname+location.hash]);
};
window.trackPageview();
window.trackEvent = function(category, action, opt_label, opt_value, opt_noninteraction) {
  _gaq.push(["_trackEvent", category, action, opt_label, opt_value, opt_noninteraction]);
};
</script>
{{end}}
<script src="/lib/godoc/jquery.js" defer></script>

<script src="/lib/godoc/playground.js" defer></script>
{{with .Version}}<script>var goVersion = {{printf "%q" .}};</script>{{end}}
<script src="/lib/godoc/godocs.js" defer></script>

<body class="Site">
<header class="Header js-header">
  <div class="Header-banner">
    Black Lives Matter.
    <a href="https://support.eji.org/give/153413/#!/donation/checkout"
       target="_blank"
       rel="noopener">Support the Equal Justice Initiative.</a>
  </div>
  <nav class="Header-nav {{if .Title}}Header-nav--wide{{end}}">
    <a href="/"><img class="Header-logo" src="/lib/godoc/images/go-logo-blue.svg" alt="Go"></a>
    <button class="Header-menuButton js-headerMenuButton" aria-label="Main menu" aria-expanded="false">
      <div class="Header-menuButtonInner"></div>
    </button>
    <ul class="Header-menu">
      <li class="Header-menuItem"><a href="/doc/">Documents</a></li>
      <li class="Header-menuItem"><a href="/pkg/">Packages</a></li>
      <li class="Header-menuItem"><a href="/project/">The Project</a></li>
      <li class="Header-menuItem"><a href="/help/">Help</a></li>
      {{if not .GoogleCN}}
        <li class="Header-menuItem"><a href="/blog/">Blog</a></li>
        <li class="Header-menuItem"><a href="https://play.golang.org/">Play</a></li>
      {{end}}
    </ul>
  </nav>
</header>

<main id="page" class="Site-content{{if .Title}} wide{{end}}">
<div class="container">

{{define "srcBreadcrumb"}}
	{{$elems := split . "/"}}
	{{$prefix := slice $elems 0 (sub (len $elems) 1)}}
	{{if hasSuffix . "/"}}
		{{$prefix = slice $elems 0 (sub (len $elems) 2)}}
	{{end}}
	{{range $i, $elem := $prefix -}}
		<a href="/{{join (slice $prefix 0 (add $i 1)) "/"}}">{{$elem}}</a>/
	{{- end -}}
	<span class="text-muted">{{join (slice $elems (len $prefix) (len $elems)) "/"}} {{len $prefix}} {{len $elems}}</span>
{{end}}

{{if or .Title .SrcPath}}
  <h1>
    {{.Title}}
    {{template "srcBreadcrumb" .SrcPath}}
  </h1>
{{end}}

{{with .Subtitle}}
  <h2>{{.}}</h2>
{{end}}

{{if hasPrefix .SrcPath "src/"}}
  <h2>
    Documentation:
    {{$path := trimPrefix .SrcPath "src/"}}
    {{if $path}}
      <a href="/pkg/{{$path}}">{{$path}}</a>
    {{else}}
      <a href="/pkg">Index</a>
    {{end}}
  </h2>
{{end}}

{{/* The Table of Contents is automatically inserted in this <div>.
     Do not delete this <div>. */}}
<div id="nav"></div>

{{.HTML}}

</div><!-- .container -->
</main><!-- #page -->
<footer>
  <div class="Footer {{if .Title}}Footer--wide{{end}}">
    <img class="Footer-gopher" src="/lib/godoc/images/footer-gopher.jpg" alt="The Go Gopher">
    <ul class="Footer-links">
      <li class="Footer-link"><a href="/doc/copyright.html">Copyright</a></li>
      <li class="Footer-link"><a href="/doc/tos.html">Terms of Service</a></li>
      <li class="Footer-link"><a href="http://www.google.com/intl/en/policies/privacy/">Privacy Policy</a></li>
      <li class="Footer-link"><a href="http://golang.org/issues/new?title=x/website:" target="_blank" rel="noopener">Report a website issue</a></li>
    </ul>
    <a class="Footer-supportedBy" href="https://google.com">Supported by Google</a>
  </div>
</footer>
{{if .GoogleAnalytics}}
<script>
(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>
{{end}}
