{{/* This template is combined with other templates to render blog pages. */}}

{{define "root"}}
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#00ADD8">
<meta name="description" content="Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.">
<title>{{template "title" .}}</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Work+Sans:600|Roboto:400,700|Source+Code+Pro">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Product+Sans&text=Supported%20by%20Google&display=swap">
<link rel="stylesheet" href="/lib/godoc/style.css">
<link rel="stylesheet" href="/fonts.css">
<link rel="alternate" type="application/atom+xml" title="blog.golang.org - Atom Feed" href="https://blog.golang.org/feed.atom" />
<script>window.initFuncs = [];</script>
<style>
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-family: 'Work Sans', sans-serif;
    font-weight: 600;
  }
  h2 { /* Reset from style.js in x/website */
    background: none;
    clear: none;
    font-size: 1.5em;
    font-weight: 600;
    line-height: inherit;
    overflow-wrap: normal;
    padding: 0;
  }
  #sidebar {
    float: right;
    padding-left: 20px;
    width: 40%;
    max-width: 250px;
    background: #f8f9f9;
    margin: 20px 0 20px 20px;
  }
  #sidebar h2 {
    font-size: 1rem;
  }
  #sidebar ul {
    padding: 0;
  }
  #sidebar li {
    list-style-type: none;
  }
  #content .author {
    font-style: italic;
  }
  #content .article {
    margin-bottom: 50px;
  }
  #content .date {
    color: #6e7072;
  }
  #content .tags {
    color: #999;
    font-size: smaller;
  }
  #content .iframe, #content .image {
    margin: 20px;
  }
  #content .title {
    margin: 20px 0;
  }
  #content img {
    max-width: 100%;
  }
  .article[data-slug='/go-fonts'] {
    font-family: Go, sans-serif;
  }
  .article[data-slug='/go-fonts'] pre,
  .article[data-slug='/go-fonts'] code {
    font-family: 'Go Mono', monospace;
  }
</style>
<body class="Site">
  <header class="Header js-header">
    <nav class="Header-nav">
      <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">
      </button>
      <ul class="Header-menu">
        <li class="Header-menuItem"><a href="{{.GodocURL}}/doc/">Documents</a></li>
        <li class="Header-menuItem"><a href="{{.GodocURL}}/pkg/">Packages</a></li>
        <li class="Header-menuItem"><a href="{{.GodocURL}}/project/">The Project</a></li>
        <li class="Header-menuItem"><a href="{{.GodocURL}}/help/">Help</a></li>
        <li class="Header-menuItem"><a href="{{.BasePath}}/">Blog</a></li>
        <li class="Header-menuItem"><a href="https://play.golang.org/">Play</a></li>
        <li class="Header-menuItem Header-menuItem--search">
          <form class="HeaderSearch" role="search" action="{{.GodocURL}}/search">
            <input class="HeaderSearch-input"
                  type="search"
                  name="q"
                  placeholder="Search"
                  aria-label="Search"
                  autocapitalize="off"
                  autocomplete="off"
                  autocorrect="off"
                  spellcheck="false"
                  required>
            <button class="HeaderSearch-submit" aria-label="Search">
              <!-- magnifying glass: --><svg class="HeaderSearch-icon" width="24" height="24" viewBox="0 0 24 24"><title>Search</title><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
            </button>
          </form>
        </li>
      </ul>
    </nav>
  </header>

  <main class="Site-content" id="page">
    <div class="container">
      <aside id="sidebar">
        {{with .Doc}}
          {{with .Newer}}
            <h2>Next article</h2>
            <p><a href="{{.Path}}">{{.Title}}</a></p>
          {{end}}

          {{with .Older}}
            <h2>Previous article</h2>
            <p><a href="{{.Path}}">{{.Title}}</a></p>
          {{end}}
        {{end}}

        <h2>Links</h2>
        <ul>
          <li><a href='//golang.org/'>golang.org</a></li>
          <li><a href='//golang.org/doc/install.html'>Install Go</a></li>
          <li><a href='//tour.golang.org/'>A Tour of Go</a></li>
          <li><a href='//golang.org/doc/'>Go Documentation</a></li>
          <li><a href='//groups.google.com/group/golang-nuts'>Go Mailing List</a></li>
          <li><a href='//twitter.com/golang'>Go on Twitter</a></li>
        </ul>

        <p><a href="{{.BasePath}}/index">Blog index</a></p>
      </aside><!-- #sidebar -->

      <div id="content">
        <h1><a href="{{.BasePath}}/">The Go Blog</a></h1>
        {{template "content" .}}
      </div><!-- #content -->

    </div><!-- .container -->
  </main><!-- #page -->

  <footer>
    <div class="Footer">
      <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="{{.GodocURL}}/doc/copyright.html">Copyright</a></li>
        <li class="Footer-link"><a href="{{.GodocURL}}/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/blog:" target="_blank" rel="noopener">Report issue</a></li>
      </ul>
      <a class="Footer-supportedBy" href="https://google.com">Supported by Google</a>
    </div>
  </footer>

  <script src="/lib/godoc/jquery.js"></script>
  <script src="/lib/godoc/playground.js"></script>
  <script src="/lib/godoc/play.js"></script>
  <script src="/lib/godoc/godocs.js"></script>
  <script>
  $(function() {
    // Insert line numbers for all playground elements.
    $('.playground > pre.numbers, .code > pre.numbers').each(function() {
      var $spans = $(this).find('> span');

      // Compute width of number column (including trailing space).
      var max = 0;
      $spans.each(function() {
        var n = $(this).attr('num')*1;
        if (n > max) max = n;
      });
      var width = 2;
      while (max > 10) {
        max = max / 10;
        width++;
      }

      // Insert line numbers with space padding.
      $spans.each(function() {
        var n = $(this).attr('num')+' ';
        while (n.length < width) n = ' '+n;
        $('<span class="number">').text(n).insertBefore(this);
      });
    });

    initPlayground(new HTTPTransport());
  });
  </script>
{{end}}

{{define "doc"}}
  <div class="article" data-slug="{{.Path}}">
    <h2 class="title"><a href="{{.Path}}">{{.Title}}</a></h2>
    <p class="author">
    {{with .Authors}}{{authors .}}<br>{{end}}
    {{.Time.Format "2 January 2006"}}
    </p>
    {{.HTML}}
  </div>
{{end}}
