content/static/doc: improve getting started docs with install topic and tutorials

The existing install topic includes content that is likely not needed by
most new users, including system requirements, content on installing
multiple versions, and so on. This change separates the most common install
case content into its own topic and moves some of the less commonly used
content into a separate topic.

This change also includes an introductory tutorial that might be useful for
new users, particularly those coming from a different language. A second
multi-part tutorial continues the introduction with fundamental programming
topics connected by a narrative thread and featuring links to other related
parts of the docs.

This change includes:

- A simpler "Download and install" topic that replaces Getting started.
Topic is designed to help users focus on what they need for a given OS.
- A new "Managing Go installations" topic that holds content about
installing that is likely not in the most common workflow (including
uninstall, multiple versions).
- A minor change that adds a link to the install-source topic.
- A single-page Hello World tutorial.
- A multi-part tutorial that introduces fundamental programming concepts
from a Go perspective (functions, loops, errors, slices, maps, and so on).
- An index file that lists the tutorials.
- CSS to style "Note" sections, tabbed sections, table, and highlighted
code.
- A JavaScript file with code for the install page.

This change also creates on golang/website a version of install.html and
install-source.html, which would be deleted from the golang/go repository
(effectively moving the files).

For golang/go#40496

Change-Id: I2af6f5fbbcfcf887c8698919666155cc40ce0d03
Reviewed-on: https://go-review.googlesource.com/c/website/+/246499
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/content/static/doc/docs.html b/content/static/doc/docs.html
index 80a4a3f..99a5bcf 100644
--- a/content/static/doc/docs.html
+++ b/content/static/doc/docs.html
@@ -21,14 +21,22 @@
 
 <div id="manual-nav"></div>
 
-<h2>Installing Go</h2>
+<h2 id="getting-started">Getting started</h2>
 
-<h3><a href="/doc/install">Getting Started</a></h3>
+<h3 id="installing"><a href="/doc/install">Installing Go</a></h3>
 <p>
-Instructions for downloading and installing the Go compilers, tools, and
-libraries.
+Instructions for downloading and installing Go.
 </p>
 
+<h3 id="get-started-tutorial"><a href="/doc/tutorial/getting-started.html">Tutorial: Getting started</a></h3>
+<p>
+A brief Hello, World tutorial to get started. Learn a bit about Go code, tools, packages, and modules.
+</p>
+
+<h3 id="create-module-tutorial"><a href="/doc/tutorial/create-module.html">Tutorial: Create a module</a></h3>
+<p>
+A tutorial of short topics introducing functions, error handling, arrays, maps, unit testing, and compiling.
+</p>
 
 <h2 id="learning">Learning Go</h2>
 
@@ -86,6 +94,11 @@
 Answers to common questions about Go.
 </p>
 
+<h3 id="tutorials"><a href="/doc/tutorial/">Tutorials</a></h3>
+<p>
+A list of tutorials to get started with Go.
+</p>
+
 <h3 id="wiki"><a href="/wiki">The Go Wiki</a></h3>
 <p>A wiki maintained by the Go community.</p>
 
diff --git a/content/static/doc/download.js b/content/static/doc/download.js
new file mode 100644
index 0000000..3f463ad
--- /dev/null
+++ b/content/static/doc/download.js
@@ -0,0 +1,125 @@
+class DownloadsController {
+  constructor() {
+    // Parts of tabbed section.
+    this.tablist = document.querySelector('.js-tabSection');
+    this.tabs = this.tablist.querySelectorAll('[role="tab"]');
+    this.panels = document.querySelectorAll('[role="tabpanel"]');
+
+    // OS for which to display download and install steps.
+    this.osName = 'Unknown OS';
+
+    // URL to JSON containing list of installer downloads.
+    const fileListUrl = 'https://golang.org/dl/?mode=json';
+    this.activeTabIndex = 0;
+
+    // Get the install file list, then get names and sizes
+    // for each OS supported on the install page.
+    fetch(fileListUrl)
+      .then((response) => response.json())
+      .then((data) => {
+        const files = data[0]['files'];
+        for (var i = 0; i < files.length; i++) {
+          let file = files[i].filename;
+          let fileSize = files[i].size;
+          if (file.match('.linux-amd64.tar.gz$')) {
+            this.linuxFileName = file;
+            this.linuxFileSize = Math.round(fileSize / Math.pow(1024, 2));
+          }
+          if (file.match('.darwin-amd64(-osx10.8)?.pkg$')) {
+            this.macFileName = file;
+            this.macFileSize = Math.round(fileSize / Math.pow(1024, 2));
+          }
+          if (file.match('.windows-amd64.msi$')) {
+            this.windowsFileName = file;
+            this.windowsFileSize = Math.round(fileSize / Math.pow(1024, 2));
+          }
+        }
+        this.detectOS();
+        document.getElementById(this.osName).click();
+        this.setDownloadForOS(this.osName);
+      })
+      .catch(console.error);
+      this.setEventListeners();
+  }
+
+  setEventListeners() {
+    this.tabs.forEach((tabEl) => {
+      tabEl.addEventListener('click', e => this.handleTabClick((e)));
+    });
+  }
+
+  // Set the download button UI for a specific OS.
+  setDownloadForOS(osName) {
+    const baseURL = 'https://golang.org/dl/';
+    let download;
+
+    switch(osName){
+      case 'linux':
+        document.querySelector('.js-downloadButton').textContent =
+          'Download Go for Linux';
+        document.querySelector('.js-downloadDescription').textContent =
+          this.linuxFileName + ' (' + this.linuxFileSize + ' MB)';
+        document.querySelector('.js-download').href = baseURL + this.linuxFileName;
+        break;
+      case 'mac':
+        document.querySelector('.js-downloadButton').textContent =
+          'Download Go for Mac';
+        document.querySelector('.js-downloadDescription').textContent =
+          this.macFileName + ' (' + this.macFileSize + ' MB)';
+        document.querySelector('.js-download').href = baseURL + this.macFileName;
+        break;
+      case 'windows':
+        document.querySelector('.js-downloadButton').textContent =
+          'Download Go for Windows';
+        document.querySelector('.js-downloadDescription').textContent =
+          this.windowsFileName + ' (' + this.windowsFileSize + ' MB)';
+        document.querySelector('.js-download').href = baseURL + this.windowsFileName;
+        break;
+      default:
+        document.querySelector('.js-downloadButton').textContent = 'Download Go';
+        document.querySelector('.js-downloadDescription').textContent =
+          'Visit the downloads page.';
+        document.querySelector('.js-download').href = baseURL;
+        break;
+    }
+  }
+
+  // Detect the users OS for installation default.
+  detectOS() {
+    if (navigator.appVersion.indexOf('Linux') !== -1) {
+      this.osName = 'linux';
+    }
+    if (navigator.appVersion.indexOf('Mac') !== -1) {
+      this.osName = 'mac';
+    }
+    if (navigator.appVersion.indexOf('X11') !== -1) {
+      this.osName = 'unix';
+    }
+    if (navigator.appVersion.indexOf('Win') !== -1) {
+      this.osName = 'windows';
+    }
+  }
+
+  // Activates the tab at the given index.
+  activateTab(index) {
+    this.tabs[this.activeTabIndex].setAttribute('aria-selected', 'false');
+    this.tabs[this.activeTabIndex].setAttribute('tabindex', '-1');
+    this.panels[this.activeTabIndex].setAttribute('hidden', '');
+    this.tabs[index].setAttribute('aria-selected', 'true');
+    this.tabs[index].setAttribute('tabindex', '0');
+    this.panels[index].removeAttribute('hidden');
+    this.tabs[index].focus();
+    this.activeTabIndex = index;
+  }
+
+  // Handles clicks on tabs.
+  handleTabClick(e) {
+    const el = (e.target);
+    this.activateTab(Array.prototype.indexOf.call(this.tabs, el));
+    this.setDownloadForOS(el.id);
+  }
+
+}
+
+// Instantiate controller for page event handling.
+new DownloadsController();
diff --git a/content/static/doc/install-source.html b/content/static/doc/install-source.html
new file mode 100644
index 0000000..9f7b6c5
--- /dev/null
+++ b/content/static/doc/install-source.html
@@ -0,0 +1,755 @@
+<!--{
+	"Title": "Installing Go from source",
+	"Path": "/doc/install/source"
+}-->
+
+<p>This topic describes how to build and run Go from source code. To install with an installer, see <a href="/doc/install.html">Download and install</a>.</p>
+
+<h2 id="introduction">Introduction</h2>
+
+<p>
+Go is an open source project, distributed under a
+<a href="/LICENSE">BSD-style license</a>.
+This document explains how to check out the sources,
+build them on your own machine, and run them.
+</p>
+
+<p>
+Most users don't need to do this, and will instead install
+from precompiled binary packages as described in
+<a href="/doc/install">Download and install</a>,
+a much simpler process.
+If you want to help develop what goes into those precompiled
+packages, though, read on.
+</p>
+
+<div class="detail">
+
+<p>
+There are two official Go compiler toolchains.
+This document focuses on the <code>gc</code> Go
+compiler and tools.
+For information on how to work on <code>gccgo</code>, a more traditional
+compiler using the GCC back end, see
+<a href="/doc/install/gccgo">Setting up and using gccgo</a>.
+</p>
+
+<p>
+The Go compilers support the following instruction sets:
+
+<dl>
+<dt>
+  <code>amd64</code>, <code>386</code>
+</dt>
+<dd>
+  The <code>x86</code> instruction set, 64- and 32-bit.
+</dd>
+<dt>
+  <code>arm64</code>, <code>arm</code>
+</dt>
+<dd>
+  The <code>ARM</code> instruction set, 64-bit (<code>AArch64</code>) and 32-bit.
+</dd>
+<dt>
+  <code>mips64</code>, <code>mips64le</code>, <code>mips</code>,  <code>mipsle</code>
+</dt>
+<dd>
+  The <code>MIPS</code> instruction set, big- and little-endian, 64- and 32-bit.
+</dd>
+<dt>
+  <code>ppc64</code>, <code>ppc64le</code>
+</dt>
+<dd>
+  The 64-bit PowerPC instruction set, big- and little-endian.
+</dd>
+<dt>
+  <code>riscv64</code>
+</dt>
+<dd>
+  The 64-bit RISC-V instruction set.
+</dd>
+<dt>
+  <code>s390x</code>
+</dt>
+<dd>
+  The IBM z/Architecture.
+</dd>
+<dt>
+  <code>wasm</code>
+</dt>
+<dd>
+  <a href="https://webassembly.org">WebAssembly</a>.
+</dd>
+</dl>
+</p>
+
+<p>
+The compilers can target the AIX, Android, DragonFly BSD, FreeBSD,
+Illumos, Linux, macOS/iOS (Darwin), NetBSD, OpenBSD, Plan 9, Solaris,
+and Windows operating systems (although not all operating systems
+support all architectures).
+</p>
+
+<p>
+A list of ports which are considered "first class" is available at the
+<a href="/wiki/PortingPolicy#first-class-ports">first class ports</a>
+wiki page.
+</p>
+
+<p>
+The full set of supported combinations is listed in the
+discussion of <a href="#environment">environment variables</a> below.
+</p>
+
+<p>
+See the main installation page for the <a href="/doc/install#requirements">overall system requirements</a>.
+The following additional constraints apply to systems that can be built only from source:
+</p>
+
+<ul>
+<li>For Linux on PowerPC 64-bit, the minimum supported kernel version is 2.6.37, meaning that
+Go does not support CentOS 6 on these systems.
+</li>
+</ul>
+ 
+</div>
+
+<h2 id="go14">Install Go compiler binaries for bootstrap</h2>
+
+<p>
+The Go toolchain is written in Go. To build it, you need a Go compiler installed.
+The scripts that do the initial build of the tools look for a "go" command
+in <code>$PATH</code>, so as long as you have Go installed in your
+system and configured in your <code>$PATH</code>, you are ready to build Go
+from source. 
+Or if you prefer you can set <code>$GOROOT_BOOTSTRAP</code> to the
+root of a Go installation to use to build the new Go toolchain;
+<code>$GOROOT_BOOTSTRAP/bin/go</code> should be the go command to use.</p>
+
+<h3 id="bootstrapFromBinaryRelease">Bootstrap toolchain from binary release</h3>
+
+<p>
+To use a binary release as a bootstrap toolchain, see
+<a href="/dl/">the downloads page</a> or use any other
+packaged Go distribution.
+</p>
+
+<h3 id="bootstrapFromSource">Bootstrap toolchain from source</h3>
+
+<p>
+To build a bootstrap toolchain from source, use
+either the git branch <code>release-branch.go1.4</code> or
+<a href="https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz">go1.4-bootstrap-20171003.tar.gz</a>,
+which contains the Go 1.4 source code plus accumulated fixes
+to keep the tools running on newer operating systems.
+(Go 1.4 was the last distribution in which the toolchain was written in C.)
+After unpacking the Go 1.4 source, <code>cd</code> to
+the <code>src</code> subdirectory, set <code>CGO_ENABLED=0</code> in
+the environment, and run <code>make.bash</code> (or,
+on Windows, <code>make.bat</code>).
+</p>
+
+<p>
+Once the Go 1.4 source has been unpacked into your GOROOT_BOOTSTRAP directory,
+you must keep this git clone instance checked out to branch
+<code>release-branch.go1.4</code>.  Specifically, do not attempt to reuse
+this git clone in the later step named "Fetch the repository."  The go1.4
+bootstrap toolchain <b>must be able</b> to properly traverse the go1.4 sources
+that it assumes are present under this repository root.
+</p>
+
+<h3 id="bootstrapFromCrosscompiledSource">Bootstrap toolchain from cross-compiled source</h3>
+
+<p>
+To cross-compile a bootstrap toolchain from source, which is
+necessary on systems Go 1.4 did not target (for
+example, <code>linux/ppc64le</code>), install Go on a different system
+and run <a href="/src/bootstrap.bash">bootstrap.bash</a>.
+</p>
+
+<p>
+When run as (for example)
+</p>
+
+<pre>
+$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
+</pre>
+
+<p>
+<code>bootstrap.bash</code> cross-compiles a toolchain for that <code>GOOS/GOARCH</code>
+combination, leaving the resulting tree in <code>../../go-${GOOS}-${GOARCH}-bootstrap</code>.
+That tree can be copied to a machine of the given target type
+and used as <code>GOROOT_BOOTSTRAP</code> to bootstrap a local build.
+</p>
+
+<h3 id="bootstrapFromGccgo">Bootstrap toolchain using gccgo</h3>
+
+<p>
+To use gccgo as the bootstrap toolchain, you need to arrange
+for <code>$GOROOT_BOOTSTRAP/bin/go</code> to be the go tool that comes
+as part of gccgo 5. For example on Ubuntu Vivid:
+</p>
+
+<pre>
+$ sudo apt-get install gccgo-5
+$ sudo update-alternatives --set go /usr/bin/go-5
+$ GOROOT_BOOTSTRAP=/usr ./make.bash
+</pre>
+
+<h2 id="git">Install Git, if needed</h2>
+
+<p>
+To perform the next step you must have Git installed. (Check that you
+have a <code>git</code> command before proceeding.)
+</p>
+
+<p>
+If you do not have a working Git installation,
+follow the instructions on the
+<a href="https://git-scm.com/downloads">Git downloads</a> page.
+</p>
+
+<h2 id="ccompiler">(Optional) Install a C compiler</h2>
+
+<p>
+To build a Go installation
+with <code><a href="/cmd/cgo">cgo</a></code> support, which permits Go
+programs to import C libraries, a C compiler such as <code>gcc</code>
+or <code>clang</code> must be installed first. Do this using whatever
+installation method is standard on the system.
+</p>
+
+<p>
+To build without <code>cgo</code>, set the environment variable
+<code>CGO_ENABLED=0</code> before running <code>all.bash</code> or
+<code>make.bash</code>.
+</p>
+
+<h2 id="fetch">Fetch the repository</h2>
+
+<p>Change to the directory where you intend to install Go, and make sure
+the <code>goroot</code> directory does not exist. Then clone the repository
+and check out the latest release tag (<code class="versionTag">go1.12</code>,
+for example):</p>
+
+<pre>
+$ git clone https://go.googlesource.com/go goroot
+$ cd goroot
+$ git checkout <span class="versionTag"><i>&lt;tag&gt;</i></span>
+</pre>
+
+<p class="whereTag">
+Where <code>&lt;tag&gt;</code> is the version string of the release.
+</p>
+
+<p>Go will be installed in the directory where it is checked out. For example,
+if Go is checked out in <code>$HOME/goroot</code>, executables will be installed
+in <code>$HOME/goroot/bin</code>. The directory may have any name, but note
+that if Go is checked out in <code>$HOME/go</code>, it will conflict with
+the default location of <code>$GOPATH</code>.
+See <a href="#gopath"><code>GOPATH</code></a> below.</p>
+
+<p>
+Reminder: If you opted to also compile the bootstrap binaries from source (in an
+earlier section), you still need to <code>git clone</code> again at this point
+(to checkout the latest <code>&lt;tag&gt;</code>), because you must keep your
+go1.4 repository distinct.
+</p>
+
+<h2 id="head">(Optional) Switch to the master branch</h2>
+
+<p>If you intend to modify the go source code, and
+<a href="/doc/contribute.html">contribute your changes</a>
+to the project, then move your repository
+off the release branch, and onto the master (development) branch.
+Otherwise, skip this step.</p>
+
+<pre>
+$ git checkout master
+</pre>
+
+<h2 id="install">Install Go</h2>
+
+<p>
+To build the Go distribution, run
+</p>
+
+<pre>
+$ cd src
+$ ./all.bash
+</pre>
+
+<p>
+(To build under Windows use <code>all.bat</code>.)
+</p>
+
+<p>
+If all goes well, it will finish by printing output like:
+</p>
+
+<pre>
+ALL TESTS PASSED
+
+---
+Installed Go for linux/amd64 in /home/you/go.
+Installed commands in /home/you/go/bin.
+*** You need to add /home/you/go/bin to your $PATH. ***
+</pre>
+
+<p>
+where the details on the last few lines reflect the operating system,
+architecture, and root directory used during the install.
+</p>
+
+<div class="detail">
+<p>
+For more information about ways to control the build, see the discussion of
+<a href="#environment">environment variables</a> below.
+<code>all.bash</code> (or <code>all.bat</code>) runs important tests for Go,
+which can take more time than simply building Go. If you do not want to run
+the test suite use <code>make.bash</code> (or <code>make.bat</code>)
+instead.
+</p>
+</div>
+
+
+<h2 id="testing">Testing your installation</h2>
+
+<p>
+Check that Go is installed correctly by building a simple program.
+</p>
+
+<p>
+Create a file named <code>hello.go</code> and put the following program in it:
+</p>
+
+<pre>
+package main
+
+import "fmt"
+
+func main() {
+	fmt.Printf("hello, world\n")
+}
+</pre>
+
+<p>
+Then run it with the <code>go</code> tool:
+</p>
+
+<pre>
+$ go run hello.go
+hello, world
+</pre>
+
+<p>
+If you see the "hello, world" message then Go is installed correctly.
+</p>
+
+<h2 id="gopath">Set up your work environment</h2>
+
+<p>
+You're almost done.
+You just need to do a little more setup.
+</p>
+
+<p>
+<a href="/doc/code.html" class="download" id="start">
+<span class="big">How to Write Go Code</span>
+<span class="desc">Learn how to set up and use the Go tools</span>
+</a>
+</p>
+
+<p>
+The <a href="/doc/code.html">How to Write Go Code</a> document
+provides <b>essential setup instructions</b> for using the Go tools.
+</p>
+
+
+<h2 id="tools">Install additional tools</h2>
+
+<p>
+The source code for several Go tools (including <a href="/cmd/godoc/">godoc</a>)
+is kept in <a href="https://golang.org/x/tools">the go.tools repository</a>.
+To install one of the tools (<code>godoc</code> in this case):
+</p>
+
+<pre>
+$ go get golang.org/x/tools/cmd/godoc
+</pre>
+
+<p>
+To install these tools, the <code>go</code> <code>get</code> command requires
+that <a href="#git">Git</a> be installed locally.
+</p>
+
+<p>
+You must also have a workspace (<code>GOPATH</code>) set up;
+see <a href="/doc/code.html">How to Write Go Code</a> for the details.
+</p>
+
+<h2 id="community">Community resources</h2>
+
+<p>
+The usual community resources such as
+<code>#go-nuts</code> on the <a href="https://freenode.net/">Freenode</a> IRC server
+and the
+<a href="//groups.google.com/group/golang-nuts">Go Nuts</a>
+mailing list have active developers that can help you with problems
+with your installation or your development work.
+For those who wish to keep up to date,
+there is another mailing list, <a href="//groups.google.com/group/golang-checkins">golang-checkins</a>,
+that receives a message summarizing each checkin to the Go repository.
+</p>
+
+<p>
+Bugs can be reported using the <a href="//golang.org/issue/new">Go issue tracker</a>.
+</p>
+
+
+<h2 id="releases">Keeping up with releases</h2>
+
+<p>
+New releases are announced on the
+<a href="//groups.google.com/group/golang-announce">golang-announce</a>
+mailing list.
+Each announcement mentions the latest release tag, for instance,
+<code class="versionTag">go1.9</code>.
+</p>
+
+<p>
+To update an existing tree to the latest release, you can run:
+</p>
+
+<pre>
+$ cd go/src
+$ git fetch
+$ git checkout <span class="versionTag"><i>&lt;tag&gt;</i></psan>
+$ ./all.bash
+</pre>
+
+<p class="whereTag">
+Where <code>&lt;tag&gt;</code> is the version string of the release.
+</p>
+
+
+<h2 id="environment">Optional environment variables</h2>
+
+<p>
+The Go compilation environment can be customized by environment variables.
+<i>None is required by the build</i>, but you may wish to set some
+to override the defaults.
+</p>
+
+<ul>
+<li><code>$GOROOT</code>
+<p>
+The root of the Go tree, often <code>$HOME/go1.X</code>.
+Its value is built into the tree when it is compiled, and
+defaults to the parent of the directory where <code>all.bash</code> was run.
+There is no need to set this unless you want to switch between multiple
+local copies of the repository.
+</p>
+</li>
+
+<li><code>$GOROOT_FINAL</code>
+<p>
+The value assumed by installed binaries and scripts when
+<code>$GOROOT</code> is not set explicitly.
+It defaults to the value of <code>$GOROOT</code>.
+If you want to build the Go tree in one location
+but move it elsewhere after the build, set
+<code>$GOROOT_FINAL</code> to the eventual location.
+</p>
+</li>
+
+<li id="gopath"><code>$GOPATH</code>
+<p>
+The directory where Go projects outside the Go distribution are typically
+checked out. For example, <code>golang.org/x/tools</code> might be checked out
+to <code>$GOPATH/src/golang.org/x/tools</code>. Executables outside the
+Go distribution are installed in <code>$GOPATH/bin</code> (or
+<code>$GOBIN</code>, if set). Modules are downloaded and cached in
+<code>$GOPATH/pkg/mod</code>.
+</p>
+
+<p>The default location of <code>$GOPATH</code> is <code>$HOME/go</code>,
+and it's not usually necessary to set <code>GOPATH</code> explicitly. However,
+if you have checked out the Go distribution to <code>$HOME/go</code>,
+you must set <code>GOPATH</code> to another location to avoid conflicts.
+</p>
+</li>
+
+<li><code>$GOBIN</code>
+<p>
+The directory where executables outside the Go distribution are installed
+using the <a href="/cmd/go">go command</a>. For example,
+<code>go get golang.org/x/tools/cmd/godoc</code> downloads, builds, and
+installs <code>$GOBIN/godoc</code>. By default, <code>$GOBIN</code> is
+<code>$GOPATH/bin</code> (or <code>$HOME/go/bin</code> if <code>GOPATH</code>
+is not set). After installing, you will want to add this directory to
+your <code>$PATH</code> so you can use installed tools.
+</p>
+
+<p>
+Note that the Go distribution's executables are installed in
+<code>$GOROOT/bin</code> (for executables invoked by people) or
+<code>$GOTOOLDIR</code> (for executables invoked by the go command;
+defaults to <code>$GOROOT/pkg/$GOOS_GOARCH</code>) instead of
+<code>$GOBIN</code>.
+</p>
+</li>
+
+<li><code>$GOOS</code> and <code>$GOARCH</code>
+<p>
+The name of the target operating system and compilation architecture.
+These default to the values of <code>$GOHOSTOS</code> and
+<code>$GOHOSTARCH</code> respectively (described below).
+</li>
+
+<p>
+Choices for <code>$GOOS</code> are
+<code>android</code>, <code>darwin</code> (macOS/iOS),
+<code>dragonfly</code>, <code>freebsd</code>, <code>illumos</code>, <code>js</code>,
+<code>linux</code>, <code>netbsd</code>, <code>openbsd</code>,
+<code>plan9</code>, <code>solaris</code> and <code>windows</code>.
+</p>
+
+<p>
+Choices for <code>$GOARCH</code> are
+<code>amd64</code> (64-bit x86, the most mature port),
+<code>386</code> (32-bit x86), <code>arm</code> (32-bit ARM), <code>arm64</code> (64-bit ARM),
+<code>ppc64le</code> (PowerPC 64-bit, little-endian), <code>ppc64</code> (PowerPC 64-bit, big-endian),
+<code>mips64le</code> (MIPS 64-bit, little-endian), <code>mips64</code> (MIPS 64-bit, big-endian),
+<code>mipsle</code> (MIPS 32-bit, little-endian), <code>mips</code> (MIPS 32-bit, big-endian),
+<code>s390x</code> (IBM System z 64-bit, big-endian), and
+<code>wasm</code> (WebAssembly 32-bit).
+</p>
+
+<p>
+The valid combinations of <code>$GOOS</code> and <code>$GOARCH</code> are:
+<table cellpadding="0">
+<tr>
+<th width="50"></th><th align="left" width="100"><code>$GOOS</code></th> <th align="left" width="100"><code>$GOARCH</code></th>
+</tr>
+<tr>
+<td></td><td><code>aix</code></td> <td><code>ppc64</code></td>
+</tr>
+<tr>
+<td></td><td><code>android</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>android</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>android</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>android</code></td> <td><code>arm64</code></td>
+</tr>
+<tr>
+<td></td><td><code>darwin</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>darwin</code></td> <td><code>arm64</code></td>
+</tr>
+<tr>
+<td></td><td><code>dragonfly</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>freebsd</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>freebsd</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>freebsd</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>illumos</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>js</code></td> <td><code>wasm</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>arm64</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>ppc64</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>ppc64le</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>mips</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>mipsle</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>mips64</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>mips64le</code></td>
+</tr>
+<tr>
+<td></td><td><code>linux</code></td> <td><code>s390x</code></td>
+</tr>
+<tr>
+<td></td><td><code>netbsd</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>netbsd</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>netbsd</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>openbsd</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>openbsd</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>openbsd</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>openbsd</code></td> <td><code>arm64</code></td>
+</tr>
+<tr>
+<td></td><td><code>plan9</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>plan9</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>plan9</code></td> <td><code>arm</code></td>
+</tr>
+<tr>
+<td></td><td><code>solaris</code></td> <td><code>amd64</code></td>
+</tr>
+<tr>
+<td></td><td><code>windows</code></td> <td><code>386</code></td>
+</tr>
+<tr>
+<td></td><td><code>windows</code></td> <td><code>amd64</code></td>
+</tr>
+</table>
+<br>
+
+<li><code>$GOHOSTOS</code> and <code>$GOHOSTARCH</code>
+<p>
+The name of the host operating system and compilation architecture.
+These default to the local system's operating system and
+architecture.
+</p>
+</li>
+
+<p>
+Valid choices are the same as for <code>$GOOS</code> and
+<code>$GOARCH</code>, listed above.
+The specified values must be compatible with the local system.
+For example, you should not set <code>$GOHOSTARCH</code> to
+<code>arm</code> on an x86 system.
+</p>
+
+<li><code>$GO386</code> (for <code>386</code> only, default is auto-detected
+if built on either <code>386</code> or <code>amd64</code>, <code>387</code> otherwise)
+<p>
+This controls the code generated by gc to use either the 387 floating-point unit
+(set to <code>387</code>) or SSE2 instructions (set to <code>sse2</code>) for
+floating point computations.
+</p>
+<ul>
+	<li><code>GO386=387</code>: use x87 for floating point operations; should support all x86 chips (Pentium MMX or later).</li>
+	<li><code>GO386=sse2</code>: use SSE2 for floating point operations; has better performance than 387, but only available on Pentium 4/Opteron/Athlon 64 or later.</li>
+</ul>
+</li>
+
+<li><code>$GOARM</code> (for <code>arm</code> only; default is auto-detected if building
+on the target processor, 6 if not)
+<p>
+This sets the ARM floating point co-processor architecture version the run-time
+should target. If you are compiling on the target system, its value will be auto-detected.
+</p>
+<ul>
+	<li><code>GOARM=5</code>: use software floating point; when CPU doesn't have VFP co-processor</li>
+	<li><code>GOARM=6</code>: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)</li>
+	<li><code>GOARM=7</code>: use VFPv3; usually Cortex-A cores</li>
+</ul>
+<p>
+If in doubt, leave this variable unset, and adjust it if required
+when you first run the Go executable.
+The <a href="//golang.org/wiki/GoArm">GoARM</a> page
+on the <a href="//golang.org/wiki">Go community wiki</a>
+contains further details regarding Go's ARM support.
+</p>
+</li>
+
+<li><code>$GOMIPS</code> (for <code>mips</code> and <code>mipsle</code> only) <br> <code>$GOMIPS64</code> (for <code>mips64</code> and <code>mips64le</code> only)
+<p>
+	These variables set whether to use floating point instructions. Set to "<code>hardfloat</code>" to use floating point instructions; this is the default.  Set to "<code>softfloat</code>" to use soft floating point.
+</p>
+</li>
+
+<li><code>$GOPPC64</code> (for <code>ppc64</code> and <code>ppc64le</code> only)
+<p>
+This variable sets the processor level (i.e. Instruction Set Architecture version)
+for which the compiler will target. The default is <code>power8</code>.
+</p>
+<ul>
+	<li><code>GOPPC64=power8</code>: generate ISA v2.07 instructions</li>
+	<li><code>GOPPC64=power9</code>: generate ISA v3.00 instructions</li>
+</ul>
+</li>
+
+
+<li><code>$GOWASM</code> (for <code>wasm</code> only)
+	<p>
+	This variable is a comma separated list of <a href="https://github.com/WebAssembly/proposals">experimental WebAssembly features</a> that the compiled WebAssembly binary is allowed to use.
+	The default is to use no experimental features.
+	</p>
+	<ul>
+		<li><code>GOWASM=satconv</code>: generate <a href="https://github.com/WebAssembly/nontrapping-float-to-int-conversions/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md">saturating (non-trapping) float-to-int conversions</a></li>
+		<li><code>GOWASM=signext</code>: generate <a href="https://github.com/WebAssembly/sign-extension-ops/blob/master/proposals/sign-extension-ops/Overview.md">sign-extension operators</a></li>
+	</ul>
+</li>
+
+</ul>
+
+<p>
+Note that <code>$GOARCH</code> and <code>$GOOS</code> identify the
+<em>target</em> environment, not the environment you are running on.
+In effect, you are always cross-compiling.
+By architecture, we mean the kind of binaries
+that the target environment can run:
+an x86-64 system running a 32-bit-only operating system
+must set <code>GOARCH</code> to <code>386</code>,
+not <code>amd64</code>.
+</p>
+
+<p>
+If you choose to override the defaults,
+set these variables in your shell profile (<code>$HOME/.bashrc</code>,
+<code>$HOME/.profile</code>, or equivalent). The settings might look
+something like this:
+</p>
+
+<pre>
+export GOARCH=amd64
+export GOOS=linux
+</pre>
+
+<p>
+although, to reiterate, none of these variables needs to be set to build,
+install, and develop the Go tree.
+</p>
diff --git a/content/static/doc/install.html b/content/static/doc/install.html
new file mode 100644
index 0000000..86f1bc2
--- /dev/null
+++ b/content/static/doc/install.html
@@ -0,0 +1,204 @@
+<!--{
+    "Title": "Download and install",
+    "Path":  "/doc/install"
+}-->
+<p>
+  Download and install Go quickly with the steps described here.
+</p>
+<p>For other content on installing, you might be interested in:</p>
+<ul>
+  <li>
+    <a href="/doc/manage-install.html">Managing Go installations</a> -- How to
+    install multiple versions and uninstall.
+  </li>
+  <li>
+    <a href="/doc/install-source.html">Installing Go from source</a> -- How to
+    check out the sources, build them on your own machine, and run them.
+  </li>
+</ul>
+<h2 id="download">1. Go download.</h2>
+<p>
+  Click the button below to download the Go installer.
+</p>
+<p>
+  <a href="/dl/" id="start" class="download js-download">
+    <span id="download-button" class="big js-downloadButton">Download Go</span>
+    <span id="download-description" class="desc js-downloadDescription"></span>
+  </a>
+</p>
+<p>
+  Don't see your operating system here? Try one of the
+  <a href="https://golang.org/dl/">other downloads</a>.
+</p>
+<aside class="Note">
+  <strong>Note:</strong> By default, the <code>go</code> command downloads and
+  authenticates modules using the Go module mirror and Go checksum database
+  run by Google. <a href="https://golang.org/dl">Learn more.</a>
+</aside>
+<h2 id="install">2. Go install.</h2>
+<p>
+  Select the tab for your computer's operating system below, then follow its
+  installation instructions.
+</p>
+<div id="os-install-tabs" class="TabSection js-tabSection">
+  <div id="os-install-tablist" class="TabSection-tabList" role="tablist">
+    <button
+      role="tab"
+      aria-selected="true"
+      aria-controls="linux-tab"
+      id="linux"
+      tabindex="0"
+      class="TabSection-tab active"
+    >
+      Linux
+    </button>
+    <button
+      role="tab"
+      aria-selected="false"
+      aria-controls="mac-tab"
+      id="mac"
+      tabindex="-1"
+      class="TabSection-tab"
+    >
+      Mac
+    </button>
+    <button
+      role="tab"
+      aria-selected="false"
+      aria-controls="windows-tab"
+      id="windows"
+      tabindex="-1"
+      class="TabSection-tab"
+    >
+      Windows
+    </button>
+  </div>
+  <div
+    role="tabpanel"
+    id="linux-tab"
+    class="TabSection-tabPanel"
+    aria-labelledby="linux"
+  >
+    <p>
+      If you have a previous version of Go installed, be sure to
+      <a href="manage-install">remove it</a> before installing another.
+    </p>
+    <ol>
+      <li>
+        Download the archive and extract it into /usr/local, creating a Go tree
+        in /usr/local/go.
+        <p>
+          For example, run the following as root or through <code>sudo</code>:
+        </p>
+        <pre>
+tar -C /usr/local -xzf go1.14.3.linux-amd64.tar.gz
+</pre
+        >
+      </li>
+      <li>
+        Add /usr/local/go/bin to the <code>PATH</code> environment variable.
+        <p>
+          You can do this by adding the following line to your $HOME/.profile or
+          /etc/profile (for a system-wide installation):
+        </p>
+        <pre>
+export PATH=$PATH:/usr/local/go/bin
+</pre
+        >
+        <p>
+          <strong>Note:</strong> Changes made to a profile file may not apply
+          until the next time you log into your computer. To apply the changes
+          immediately, just run the shell commands directly or execute them from
+          the profile using a command such as
+          <code>source $HOME/.profile</code>.
+        </p>
+      </li>
+      <li>
+        Verify that you've installed Go by opening a command prompt and typing
+        the following command:
+        <pre>
+$ go version
+</pre
+        >
+      </li>
+      <li>Confirm that the command prints the installed version of Go.</li>
+    </ol>
+  </div>
+  <div
+    role="tabpanel"
+    id="mac-tab"
+    class="TabSection-tabPanel"
+    aria-labelledby="mac"
+    hidden
+  >
+    <ol>
+      <li>
+        Open the package file you downloaded and follow the prompts to install
+        Go.
+        <p>
+          The package installs the Go distribution to /usr/local/go. The package
+          should put the /usr/local/go/bin directory in your
+          <code>PATH</code> environment variable. You may need to restart any
+          open Terminal sessions for the change to take effect.
+        </p>
+      </li>
+      <li>
+        Verify that you've installed Go by opening a command prompt and typing
+        the following command:
+        <pre>
+$ go version
+</pre
+        >
+      </li>
+      <li>Confirm that the command prints the installed version of Go.</li>
+    </ol>
+  </div>
+  <div
+    role="tabpanel"
+    id="windows-tab"
+    class="TabSection-tabPanel"
+    aria-labelledby="windows"
+    hidden
+  >
+    <ol>
+      <li>
+        Open the MSI file you downloaded and follow the prompts to install Go.
+        <p>
+          By default, the installer will install Go to C:\Go. You can change the
+          location as needed. After installing, you will need to close and
+          reopen any open command prompts so that changes to the environment
+          made by the installer are reflected at the command prompt.
+        </p>
+      </li>
+      <li>
+        Verify that you've installed Go.
+        <ol>
+          <li>
+            In <strong>Windows</strong>, click the <strong>Start</strong> menu.
+          </li>
+          <li>
+            In the menu's search box, type <code>cmd</code>, then press the
+            <strong>Enter</strong> key.
+          </li>
+          <li>
+            In the Command Prompt window that appears, type the following
+            command:
+            <pre>
+$ go version
+</pre
+            >
+          </li>
+          <li>Confirm that the command prints the installed version of Go.</li>
+        </ol>
+      </li>
+    </ol>
+  </div>
+</div>
+<h2 id="code">3. Go code.</h2>
+<p>
+  You're set up! Visit the
+  <a href="tutorial/getting-started.html">Getting Started tutorial</a> to write
+  some simple Go code. It takes about 10 minutes to complete.
+</p>
+
+<script async src="/doc/download.js"></script>
\ No newline at end of file
diff --git a/content/static/doc/manage-install.html b/content/static/doc/manage-install.html
new file mode 100644
index 0000000..80deef3
--- /dev/null
+++ b/content/static/doc/manage-install.html
@@ -0,0 +1,117 @@
+<!--{
+    "Title": "Managing Go installations",
+    "Path":  "/doc/manage-install"
+}-->
+
+<p>
+This topic describes how to install multiple versions of Go on the same machine, as well as how to uninstall Go.
+</p>
+
+<p>For other content on installing, you might be interested in:</p>
+<ul>
+<li><a href="/doc/install.html">Download and install</a> -- The simplest way to get installed and running.</li>
+<li><a href="/doc/install-source.html">Installing Go from source</a> -- How to check out the sources, build them on your own machine, and run them.</li>
+</ul>
+
+<h2 id="installing-multiple">Installing multiple Go versions</h2>
+
+<p>
+You can install multiple Go versions on the same machine. For example, you might want to test your code on multiple Go versions. For a list of versions you can install this way, see the <a href="https://golang.org/dl/">download page</a>.
+</p>
+
+<p>
+<strong>Note:</strong> To install using the method described here, you'll need to have <a href="https://git-scm.com/">git</a> installed.
+</p>
+
+<p>
+To install additional Go versions, run the <a href="/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them"><code>go get</code> command</a>, specifying the download location of the version you want to install. The following example illustrates with version 1.10.7:
+</p>
+
+<pre>
+$ go get golang.org/dl/go1.10.7
+$ go1.10.7 download
+</pre>
+
+<p>
+To run <code>go</code> commands with the newly-downloaded version, append the version number to the <code>go</code> command, as follows:
+</p>
+
+<pre>
+$ go1.10.7 version
+go version go1.10.7 linux/amd64
+</pre>
+
+<p>
+When you have multiple versions installed, you can discover where each is installed, look at the version's <code>GOROOT</code> value. For example, run a command such as the following:
+</p>
+
+<pre>
+$ go1.10.7 env GOROOT
+</pre>
+
+<p>
+To uninstall a downloaded version, just remove the directory specified by its <code>GOROOT</code> environment variable and the goX.Y.Z binary.
+</p>
+
+<h2 id="uninstalling">Uninstalling Go</h2>
+
+<p>
+You can remove Go from your system using the steps described in this topic.
+</p>
+
+<h3 id="linux-mac-bsd">Linux / macOS / FreeBSD</h3>
+
+<ol>
+
+<li>Delete the go directory.
+
+<p>
+This is usually /usr/local/go.
+</p>
+
+</li>
+
+<li>Remove the Go bin directory from your <code>PATH</code> environment variable.
+
+<p>
+Under Linux and FreeBSD, edit /etc/profile or $HOME/.profile. If you installed Go with the macOS package, remove the /etc/paths.d/go file.
+</p>
+
+</li>
+
+</ol>
+
+<h3 id="windows">Windows</h3>
+
+<p>
+The simplest way to remove Go is via Add/Remove Programs in the Windows control panel:
+</p>
+
+<ol>
+
+<li>In Control Panel, double-click <strong>Add/Remove Programs</strong>.</li>
+<li>In <strong>Add/Remove Programs</strong>, select <strong>Go Programming Language,</strong> click Uninstall, then follow the prompts.</li>
+
+</ol>
+
+<p>
+For removing Go with tools, you can also use the command line:
+</p>
+
+<ul>
+
+<li>Uninstall using the command line by running the following command:
+
+<pre>
+msiexec /x go{{version}}.windows-{{cpu-arch}}.msi /q
+</pre>
+
+<p>
+
+<strong>Note:</strong> Using this uninstall process for Windows will automatically remove windows environment variables created by the original installation.
+</p>
+
+</li>
+
+</ul>
+
diff --git a/content/static/doc/tutorial/add-a-test.html b/content/static/doc/tutorial/add-a-test.html
new file mode 100644
index 0000000..d52f3d3
--- /dev/null
+++ b/content/static/doc/tutorial/add-a-test.html
@@ -0,0 +1,217 @@
+<!--{
+    "Title": "Add a test",
+    "Path":  "/doc/tutorial/add-a-test"
+}-->
+
+<p>
+  Now that you've gotten your code to a stable place (nicely done, by the way),
+  add a test. Testing your code during development can expose bugs that find
+  their way in as you make changes. In this topic, you add a test for the
+  <code>Hello</code> function.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<p>
+  Go's built-in support for unit testing makes it easier to test as you go.
+  Specifically, using naming conventions, Go's <code>testing</code> package, and
+  the <code>go test</code> command, you can quickly write and execute tests.
+</p>
+
+<ol>
+  <li>
+    In the greetings directory, create a file called greetings_test.go.
+
+    <p>
+      Ending a file's name with _test.go tells the <code>go test</code> command
+      that this file contains test functions.
+    </p>
+  </li>
+
+  <li>
+    In greetings_test.go, paste the following code and save the file.
+
+    <pre>
+package greetings
+
+import (
+    "testing"
+    "regexp"
+)
+
+// TestHelloName calls greetings.Hello with a name, checking 
+// for a valid return value.
+func TestHelloName(t *testing.T) {
+    name := "Gladys"
+    want := regexp.MustCompile(`\b`+name+`\b`)
+    msg, err := Hello("Gladys")
+    if !want.MatchString(msg) || err != nil {
+        t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
+    }
+}
+
+// TestHelloEmpty calls greetings.Hello with an empty string, 
+// checking for an error.
+func TestHelloEmpty(t *testing.T) {
+    msg, err := Hello("")
+    if msg != "" || err == nil {
+        t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
+    }
+}
+</pre
+    >
+
+    <p>
+      If this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Implement test functions in the same package as the code you're testing.
+      </li>
+      <li>
+        Create two test functions to test the
+        <code>greetings.Hello</code> function. Test function names have the form
+        <code>Test<em>Name</em></code
+        >, where <em>Name</em> is specific to the test. Also, test functions
+        take a pointer to the
+        <a href="https://golang.org/pkg/testing/"
+          ><code>testing</code> package's</a
+        >
+        <code>testing.T</code> as a parameter. You use this parameter's methods
+        for reporting and logging from your test.
+      </li>
+      <li>
+        Implement two tests:
+
+        <ul>
+          <li>
+            <code>TestHelloName</code> calls the <code>Hello</code> function,
+            passing a <code>name</code> value with which the function should be
+            able to return a valid response message. If the call returns an
+            error or an unexpected response message (one that doesn't include
+            the name you passed in), you use the <code>t</code> parameter's
+            <code>Fatalf</code> method to print a message to the console and end
+            execution.
+          </li>
+          <li>
+            <code>TestHelloEmpty</code> calls the <code>Hello</code> function
+            with an empty string. This test is designed to confirm that your
+            error handling works. If the call returns a non-empty string or no
+            error, you use the <code>t</code> parameter's
+            <a href="https://golang.org/pkg/testing/#T.Fatalf"
+              ><code>Fatalf</code> method</a
+            >
+            to print a message to the console and end execution.
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    At the command line in the greetings directory, run the
+    <a href="https://golang.org/cmd/go/#hdr-Test_packages"
+      ><code>go test</code> command</a
+    >
+    to execute the test.
+
+    <p>
+      The <code>go test</code> command executes test functions (whose names
+      begin with <code>Test</code>) in test files (whose names end with
+      _test.go). You can add the <code>-v</code> flag to get verbose output that
+      lists all of the tests and their results.
+    </p>
+
+    <p>
+      The tests should pass.
+    </p>
+
+    <pre>
+$ go test
+PASS
+ok      example.com/greetings   0.364s
+
+$ go test -v
+=== RUN   TestHelloName
+--- PASS: TestHelloName (0.00s)
+=== RUN   TestHelloEmpty
+--- PASS: TestHelloEmpty (0.00s)
+PASS
+ok      example.com/greetings   0.372s
+</pre
+    >
+  </li>
+
+  <li>
+    Break the <code>greetings.Hello</code> function to view a failing test.
+
+    <p>
+      The <code>TestHelloName</code> test function checks the return value for
+      the name you specified as a <code>Hello</code> function parameter. To view
+      a failing test result, change the <code>greetings.Hello</code> function so
+      that it no longer includes the name.
+    </p>
+
+    <p>
+      In greetings/greetings.go, paste the following code in place of the
+      <code>Hello</code> function. Note that the highlighted lines change the
+      value that the function returns, as if the <code>name</code> argument had
+      been accidentally removed.
+    </p>
+
+    <pre>
+// Hello returns a greeting for the named person.
+func Hello(name string) (string, error) {
+    // If no name was given, return an error with a message.
+    if name == "" {
+        return name, errors.New("empty name")
+    }
+    // Create a message using a random format.
+    <ins>// message := fmt.Sprintf(randomFormat(), name)
+    message := fmt.Sprint(randomFormat())</ins>
+    return message, nil
+}
+</pre>
+  </li>
+
+  <li>
+    At the command line in the greetings directory, run <code>go test</code> to
+    execute the test.
+
+    <p>
+      This time, run <code>go test</code> without the <code>-v</code> flag. The
+      output will include results for only the tests that failed, which can be
+      useful when you have a lot of tests. The <code>TestHelloName</code> test
+      should fail -- <code>TestHelloEmpty</code> still passes.
+    </p>
+
+    <pre>
+$ go test
+--- FAIL: TestHelloName (0.00s)
+    greetings_test.go:15: Hello("Gladys") = "Hail, %v! Well met!", &lt;nil>, want match for `\bGladys\b`, nil
+FAIL
+exit status 1
+FAIL    example.com/greetings   0.182s
+</pre
+    >
+  </li>
+</ol>
+
+<p>
+  This topic introduced Go's built-in support for unit testing. In the
+  tutorial's <a href="compile-install.html">next topic</a>, you'll see how to
+  compile and install your code to run it locally.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="greetings-multiple-people.html"
+    >&lt; Return greetings for multiple people</a
+  >
+  <a class="Navigation-next" href="compile-install.html"
+    >Compile and install the application &gt;</a
+  >
+</p>
diff --git a/content/static/doc/tutorial/call-module-code.html b/content/static/doc/tutorial/call-module-code.html
new file mode 100644
index 0000000..284a1d1
--- /dev/null
+++ b/content/static/doc/tutorial/call-module-code.html
@@ -0,0 +1,237 @@
+<!--{
+    "Title": "Call your code from another module",
+    "Path":  "/doc/tutorial/call-module-code"
+}-->
+
+<p>
+  In the <a href="create-module.html">previous section</a>, you created a
+  <code>greetings</code> module. In this section, you'll write code to make
+  calls to the <code>Hello</code> function in the module you just wrote. You'll
+  write code you can execute as an application, and which calls code in the
+  <code>greetings</code> module.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<ol>
+  <li>
+    Create a <code>hello</code> directory for your Go module source code. This
+    is where you'll write your caller.
+
+    <p>
+      For example, if your current directory in the command prompt is the
+      greetings directory, you could use the following commands:
+    </p>
+
+    <pre>
+cd ..
+mkdir hello
+cd hello
+</pre
+    >
+  </li>
+
+  <li>
+    In your text editor (in the hello directory), create a file in which to
+    write your code and call it hello.go.
+  </li>
+
+  <li>
+    Write code to call the <code>Hello</code> function, then print the
+    function's return value.
+
+    <p>
+      To do that, paste the following code into hello.go.
+    </p>
+
+    <pre>
+package main
+
+import (
+    "fmt"
+
+    "example.com/greetings"
+)
+
+func main() {
+    // Get a greeting message and print it.
+    message := greetings.Hello("Gladys")
+    fmt.Println(greeting)
+}
+</pre
+    >
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Declare a <code>main</code> package. In Go, code executed as an
+        application must go in a <code>main</code> package.
+      </li>
+      <li>
+        Import two packages: <code>example.com/greetings</code> and
+        <code>fmt</code>. This gives your code access to functions in those
+        packages. Importing <code>example.com/greetings</code> (the package
+        contained in the module you created earlier) gives you access to the
+        <code>Hello</code> function. You also import <code>fmt</code>, with
+        functions for handling input and output text (such as printing text to
+        the console).
+      </li>
+      <li>
+        Get a greeting by calling the <code>greetings</code> package’s
+        <code>Hello</code> function.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    Create a new module for this hello package.
+
+    <p>
+      From the command line at the hello directory, run the
+      <code>go mod init</code> command, giving it the name of the module your
+      code will be in (here, just use "hello").
+    </p>
+
+    <pre>
+$ go mod init hello
+go: creating new go.mod: module hello
+</pre
+    >
+  </li>
+
+  <li>
+    Edit the <code>hello</code> module to use the unpublished greetings module.
+
+    <p>
+      For production use, you’d publish your modules on a server, either inside
+      your company or on the internet, and the Go command will download them
+      from there. For now, you need to adapt the caller's module so it can find
+      the greetings code on your local file system.
+    </p>
+
+    <p>
+      To do that, make a small change to <code>hello</code> module’s go.mod
+      file.
+    </p>
+
+    <ol>
+      <li>
+        In the hello directory, open the go.mod file, change it so that it looks
+        like the following, and save the file.
+
+        <pre>
+module hello
+
+go 1.14
+
+<ins>replace example.com/greetings => ../greetings</ins>
+</pre>
+
+        <p>
+          Here, the
+          <a href="https://golang.org/ref/mod#tmp_15"
+            ><code>replace</code> directive</a
+          >
+          tells Go to replace the module path (the URL
+          <code>example.com/greetings</code>) with a path you specify. In this
+          case, that's a greetings directory next to the hello directory.
+        </p>
+      </li>
+
+      <li>
+        In the hello directory, run <code>go build</code> to make Go locate the
+        module and add it as a dependency to the go.mod file.
+
+        <pre>
+$ go build
+go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000
+</pre
+        >
+      </li>
+
+      <li>
+        Look at go.mod again to see the changes made by <code>go build</code>,
+        including the <code>require</code> directive Go added.
+
+        <pre>
+module hello
+
+go 1.14
+
+replace example.com/greetings => ../greetings
+
+<ins>require example.com/greetings v0.0.0-00010101000000-000000000000</ins>
+</pre>
+
+        <p>
+          To build the module, Go found the local code in the ../greetings
+          directory, then added a
+          <a href="https://golang.org/ref/mod#tmp_13"
+            ><code>require</code> directive</a
+          >
+          to specify that <code>hello</code> is dependent on (requires)
+          <code>example.com/greetings</code>. You created this dependency when
+          you imported the <code>greetings</code> package (contained in the
+          greetings module) in hello.go. The <code>replace</code> directive
+          tells Go where to find the <code>greetings</code> module, because it
+          isn't published yet.
+        </p>
+
+        <p>
+          To reference a published module, a go.mod file would omit the
+          <code>replace</code> directive and use a
+          <code>require</code> directive with a tagged version number at the
+          end.
+        </p>
+
+        <pre>require example.com/greetings v1.1.0</pre>
+      </li>
+    </ol>
+  </li>
+
+  <li>
+    In the <code>hello</code> directory, run the <code>hello</code> executable
+    (created by <code>go build</code>) to confirm that the code works.
+    <ul>
+      <li>
+        On Linux or Mac:
+
+        <pre>
+$ ./hello
+Hi, Gladys. Welcome!
+</pre
+        >
+      </li>
+
+      <li>
+        On Windows:
+
+        <pre>
+$ hello.exe
+Hi, Gladys. Welcome!
+</pre
+        >
+      </li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  Congrats! You've written two functioning modules. In the tutorial's
+  <a href="handle-errors.html">next topic</a>, you'll add some error handling.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="create-module.html"
+    >&lt; Create a Go module</a
+  >
+  <a class="Navigation-next" href="handle-errors.html"
+    >Return and handle an error &gt;</a
+  >
+</p>
diff --git a/content/static/doc/tutorial/compile-install.html b/content/static/doc/tutorial/compile-install.html
new file mode 100644
index 0000000..5395ae5
--- /dev/null
+++ b/content/static/doc/tutorial/compile-install.html
@@ -0,0 +1,134 @@
+<!--{
+    "Title": "Compile and install the application",
+    "Path":  "/doc/tutorial/compile-install"
+}-->
+
+<p>
+  In the last section, you'll learn a new <code>go</code> command. While the
+  <code>go run</code> command is a useful shortcut for compiling and running a
+  single-file program, it doesn't generate a binary executable you can easily
+  run again. If you want one of those, a good choice is to run the
+  <a
+    href="https://golang.org/cmd/go/#hdr-Compile_and_install_packages_and_dependencies"
+    ><code>go install</code> command</a
+  >, which compiles your code and installs the resulting binary executable where
+  you can run it.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<ol>
+  <li>
+    At the command line, change to the directory that contains hello/hello.go.
+  </li>
+
+  <li>
+    Discover the Go install path, where the <code>go</code> command will install
+    the current package.
+
+    <p>
+      You can discover the install path by running the
+      <a href="https://golang.org/cmd/go/#hdr-List_packages_or_modules"
+        ><code>go list</code> command</a
+      >, as in the following example:
+    </p>
+
+    <pre>
+go list -f '{{.Target}}'
+</pre
+    >
+
+    <p>
+      For example, the command's output might say
+      <code>/home/gopher/bin/hello</code>, meaning that binaries are installed
+      to /home/gopher/bin. This is the install directory you'll need in the next
+      step.
+    </p>
+  </li>
+
+  <li>
+    Add the Go install directory to your system's shell path.
+
+    <p>
+      That way, you'll be able to run your program's executable without
+      specifying where the executable is.
+    </p>
+
+    <ul>
+      <li>
+        On Linux or Mac, run the following command:
+
+        <pre>
+export PATH=$PATH:/path/to/your/install/directory
+</pre
+        >
+      </li>
+
+      <li>
+        On Windows, run the following command:
+
+        <pre>
+set PATH=%PATH%;C:\path\to\your\install\directory
+</pre
+        >
+      </li>
+    </ul>
+
+    <p>
+      As an alternative, if you already have a directory like
+      <code>$HOME/bin</code> in your shell path and you'd like to install your
+      Go programs there, you can change the install target by setting the GOBIN
+      variable using the
+      <a href="https://golang.org/cmd/go/#hdr-Print_Go_environment_information"
+        ><code>go env</code> command</a
+      >:
+    </p>
+
+    <pre>
+go env -w GOBIN=/path/to/your/bin
+</pre
+    >
+
+    <p>
+      or
+    </p>
+
+    <pre>
+go env -w GOBIN=C:\path\to\your\bin
+</pre
+    >
+  </li>
+
+  <li>
+    Once you've updated the shell path, run the <code>go install</code> command
+    to compile and install the package.
+
+    <pre>
+$ go install
+</pre
+    >
+  </li>
+
+  <li>
+    Run your application by simply typing its name.
+
+    <pre>
+$ hello
+map[Darrin:Hail, Darrin! Well met! Gladys:Great to see you, Gladys! Samantha:Hail, Samantha! Well met!]
+</pre
+    >
+  </li>
+</ol>
+
+<p>
+  That wraps up this Go tutorial! For a next step that introduces many more of
+  Go features, check out the
+  <a href="https://tour.golang.org/welcome/1">Tour of Go</a>.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="add-a-test.html">&lt; Add a test</a>
+</p>
diff --git a/content/static/doc/tutorial/create-module.html b/content/static/doc/tutorial/create-module.html
new file mode 100644
index 0000000..26f817a
--- /dev/null
+++ b/content/static/doc/tutorial/create-module.html
@@ -0,0 +1,259 @@
+<!--{
+    "Title": "Tutorial: Create a Go module",
+    "Path":  "/doc/tutorial/create-module"
+}-->
+
+<p>
+  This is the first part of a tutorial that introduces a few fundamental
+  features of the Go language. If you're just getting started with Go, be sure
+  to take a look at the
+  <a href="getting-started.html">getting started</a> tutorial, which introduces
+  the <code>go</code> command, Go modules, and very simple Go code.
+</p>
+
+<p>
+  In this tutorial you'll create two modules. The first is a library which is
+  intended to be imported by other libraries or applications. The second is a
+  caller application which will use the first.
+</p>
+
+<p>
+  This tutorial's sequence includes six brief topics that each illustrate a
+  different part of the language.
+</p>
+
+<ol>
+  <li>
+    Create a module -- Write a small module with functions you can call from
+    another module.
+  </li>
+  <li>
+    <a href="call-module-code.html">Call your code from another module</a> --
+    Add simple error handling.
+  </li>
+  <li>
+    <a href="handle-errors.html">Return and handle an error</a> -- Add simple
+    error handling.
+  </li>
+  <li>
+    <a href="random-greeting.html">Return a random greeting</a> -- Handle data
+    in slices (Go's dynamically-sized arrays).
+  </li>
+  <li>
+    <a href="greetings-multiple-people.html"
+      >Return greetings for multiple people</a
+    >
+    -- Store key/value pairs in a map.
+  </li>
+  <li>
+    <a href="add-a-test.html">Add a test</a> -- Use Go's built-in unit testing
+    features to test your code.
+  </li>
+  <li>
+    <a href="compile-install.html">Compile and install the application</a> --
+    Compile and install your code locally.
+  </li>
+</ol>
+
+<aside class="Note">
+  <strong>Note:</strong> For other tutorials, see
+  <a href="index.html">Tutorials</a>.
+</aside>
+
+<h2 id="prerequisites">Prerequisites</h2>
+
+<ul>
+  <li>
+    <strong>Some programming experience.</strong> The code here is pretty
+    simple, but it helps to know something about functions, loops, and arrays.
+  </li>
+  <li>
+    <strong>A tool to edit your code.</strong> Any text editor you have will
+    work fine. Most text editors have good support for Go. The most popular are
+    VSCode (free), GoLand (paid), and Vim (free).
+  </li>
+  <li>
+    <strong>A command terminal.</strong> Go works well using any terminal on
+    Linux and Mac, and on PowerShell or cmd in Windows.
+  </li>
+</ul>
+
+<h2 id="start">Start a module that others can use</h2>
+
+<p>
+  Start by creating a
+  <a href="https://golang.org/doc/code.html#Organization">Go module</a>. In a
+  module, you collect one or more related packages for a discrete and useful set
+  of functions. For example, you might create a module with packages that have
+  functions for doing financial analysis so that others writing financial
+  applications can use your work.
+</p>
+
+<p>
+  Go code is grouped into packages, and packages are grouped into modules. Your
+  package's module specifies the context Go needs to run the code, including the
+  Go version the code is written for and the set of other modules it requires.
+</p>
+
+<p>
+  As you add or improve functionality in your module, you publish new versions
+  of the module. Developers writing code that calls functions in your module can
+  import the module's updated packages and test with the new version before
+  putting it into production use.
+</p>
+
+<ol>
+  <li>
+    Open a command prompt and <code>cd</code> to your home directory.
+
+    <p>
+      On Linux or Mac:
+    </p>
+
+    <pre>
+cd
+</pre
+    >
+
+    <p>
+      On Windows:
+    </p>
+
+    <pre>
+cd %HOMEPATH%
+</pre
+    >
+  </li>
+
+  <li>
+    Create a <code>greetings</code> directory for your Go module source code.
+    This is where you'll write your module code.
+
+    <p>
+      For example, from your home directory use the following commands:
+    </p>
+
+    <pre>
+mkdir greetings
+cd greetings
+</pre
+    >
+  </li>
+
+  <li>
+    Start your module using the
+    <a
+      href="https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory"
+      ><code>go mod init</code> command</a
+    >
+    to create a go.mod file.
+
+    <p>
+      Run the <code>go mod init</code> command, giving it the path of the module
+      your code will be in. Here, use <code>example.com/greetings</code> for the
+      module path -- in production code, this would be the URL from which your
+      module can be downloaded.
+    </p>
+
+    <pre>
+$ go mod init example.com/greetings
+go: creating new go.mod: module example.com/greetings
+</pre
+    >
+
+    <p>
+      The <code>go mod init</code> command creates a go.mod file that identifies
+      your code as a module that might be used from other code. The file you
+      just created includes only the name of your module and the Go version your
+      code supports. But as you add dependencies -- meaning packages from other
+      modules -- the go.mod file will list the specific module versions to use.
+      This keeps builds reproducible and gives you direct control over which
+      module versions to use.
+    </p>
+  </li>
+
+  <li>
+    In your text editor, create a file in which to write your code and call it
+    greetings.go.
+  </li>
+
+  <li>
+    Paste the following code into your greetings.go file and save the file.
+
+    <pre>
+package greetings
+
+import "fmt"
+
+// Hello returns a greeting for the named person.
+func Hello(name string) string {
+// Return a greeting that embeds the name in a message.
+    message := fmt.Sprintf("Hi, %v. Welcome!", name)
+    return message
+}
+</pre
+    >
+
+    <p>
+      This is the first code for your module. It returns a greeting to any
+      caller that asks for one. You'll write code that calls this function in
+      the next step.
+    </p>
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Declare a <code>greetings</code> package to collect related functions.
+      </li>
+      <li>
+        Implement a <code>Hello</code> function to return the greeting.
+        <p>
+          This function takes a <code>name</code> parameter whose type is
+          <code>string</code>, and returns a <code>string</code>. In Go, a
+          function whose name starts with a capital letter can be called by a
+          function not in the same package. This is known in Go as an
+          <a href="https://tour.golang.org/basics/3"><em>exported</em> name</a>.
+        </p>
+        <img src="images/function-syntax.png" width="300px" />
+      </li>
+
+      <li>
+        Declare a <code>message</code> variable to hold your greeting.
+        <p>
+          In Go, the <code>:=</code> operator is a shortcut for declaring and
+          initializing a variable in one line (Go uses the value on the right to
+          determine the variable's type). Taking the long way, you might have
+          written this as:
+        </p>
+        <pre>
+var message string
+message = fmt.Sprintf("Hi, %v. Welcome!", name)
+</pre
+        >
+      </li>
+
+      <li>
+        Use the <code>fmt</code> package's <code>Sprintf</code> function to
+        create a greeting message. The first argument is a format string, and
+        <code>Sprintf</code> substitutes the <code>name</code> parameter's value
+        for the <code>%v</code> format verb. Inserting the value of the
+        <code>name</code> parameter completes the greeting text.
+      </li>
+      <li>Return the formatted greeting text to the caller.</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  In the <a href="call-module-code.html">next step</a>, you'll call this
+  function from another module.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-next" href="call-module-code.html"
+    >Call your code from another module &gt;</a
+  >
+</p>
diff --git a/content/static/doc/tutorial/getting-started.html b/content/static/doc/tutorial/getting-started.html
new file mode 100644
index 0000000..0ae3a63
--- /dev/null
+++ b/content/static/doc/tutorial/getting-started.html
@@ -0,0 +1,282 @@
+<!--{
+    "Title": "Tutorial: Get started with Go",
+    "Path":  "/doc/tutorial/getting-started"
+}-->
+
+<p>
+  In this tutorial, you'll get a brief introduction to Go programming. Along the
+  way, you will:
+</p>
+
+<ul>
+  <li>Install Go (if you haven't already).</li>
+  <li>Write some simple "Hello, world" code.</li>
+  <li>Use the <code>go</code> command to run your code.</li>
+  <li>
+    Use the Go package discovery tool to find packages you can use in your own
+    code.
+  </li>
+  <li>Call functions of an external module.</li>
+</ul>
+
+<aside class="Note">
+  <strong>Note:</strong> For other tutorials, see
+  <a href="index.html">Tutorials</a>.
+</aside>
+
+<h2 id="prerequisites">Prerequisites</h2>
+
+<ul>
+  <li>
+    <strong>Some programming experience.</strong> The code here is pretty
+    simple, but it helps to know something about functions.
+  </li>
+  <li>
+    <strong>A tool to edit your code.</strong> Any text editor you have will
+    work fine. Most text editors have good support for Go. The most popular are
+    VSCode (free), GoLand (paid), and Vim (free).
+  </li>
+  <li>
+    <strong>A command terminal.</strong> Go works well using any terminal on
+    Linux and Mac, and on PowerShell or cmd in Windows.
+  </li>
+</ul>
+
+<h2 id="install">Install Go</h2>
+
+<p>Just use the <a href="/doc/install">Download and install</a> steps.</p>
+
+<h2 id="code">Write some code</h2>
+
+<p>
+  Get started with Hello, World.
+</p>
+
+<ol>
+  <li>
+    Open a command prompt and cd to your home directory.
+
+    <p>
+      On Linux or Mac:
+    </p>
+
+    <pre>
+cd
+</pre
+    >
+
+    <p>
+      On Windows:
+    </p>
+
+    <pre>
+cd %HOMEPATH%
+</pre
+    >
+  </li>
+
+  <li>
+    Create a hello directory for your first Go source code.
+
+    <p>
+      For example, use the following commands:
+    </p>
+
+    <pre>
+mkdir hello
+cd hello
+</pre
+    >
+  </li>
+
+  <li>
+    In your text editor, create a file hello.go in which to write your code.
+  </li>
+
+  <li>
+    Paste the following code into your hello.go file and save the file.
+
+    <pre>
+package main
+
+import "fmt"
+
+func main() {
+    fmt.Println("Hello, World!")
+}
+</pre
+    >
+
+    <p>
+      This is your Go code. In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Declare a <code>main</code> package (a package is a way to group
+        functions).
+      </li>
+      <li>
+        Import the popular
+        <a href="https://golang.org/pkg/fmt/"><code>fmt</code> package</a>,
+        which contains functions for formatting text, including printing to the
+        console. This package is one of the
+        <a href="https://golang.org/pkg/">standard library</a> packages you got
+        when you installed Go.
+      </li>
+      <li>
+        Implement a <code>main</code> function to print a message to the
+        console. A <code>main</code> function executes by default when you run
+        code in the file.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    Run your code to see the greeting.
+
+    <pre>
+$ go run hello.go
+Hello, World!
+</pre
+    >
+
+    <p>
+      The
+      <a href="https://golang.org/cmd/go/#hdr-Compile_and_run_Go_program"
+        ><code>go run</code> command</a
+      >
+      is one of many <code>go</code> commands you'll use to get things done with
+      Go. Use the following command to get a list of the others:
+    </p>
+
+    <pre>
+$ go help
+</pre
+    >
+  </li>
+</ol>
+
+<h2 id="call">Call code in an external package</h2>
+
+<p>
+  When you need your code to do something that might have been implemented by
+  someone else, you can look for a package that has functions you can use in
+  your code.
+</p>
+
+<ol>
+  <li>
+    Make your printed message a little more interesting with a function from an
+    external module.
+
+    <ol>
+      <li>
+        Visit pkg.go.dev and
+        <a href="https://pkg.go.dev/search?q=quote"
+          >search for a "quote" package</a
+        >.
+      </li>
+      <li>
+        Locate and click the <code>rsc.io/quote</code> package in search results
+        (if you see <code>rsc.io/quote/v3</code>, ignore it for now).
+      </li>
+      <li>
+        On the <strong>Doc</strong> tab, under <strong>Index</strong>, note the
+        list of functions you can call from your code. You'll use the
+        <code>Go</code> function.
+      </li>
+      <li>
+        At the top of this page, note that package <code>quote</code> is
+        included in the <code>rsc.io/quote</code> module.
+      </li>
+    </ol>
+
+    <p>
+      You can use the pkg.go.dev site to find published modules whose packages
+      have functions you can use in your own code. Packages are published in
+      modules -- like <code>rsc.io/quote</code> -- where others can use them.
+      Modules are improved with new versions over time, and you can upgrade your
+      code to use the improved versions.
+    </p>
+  </li>
+
+  <li>
+    In your Go code, import the <code>rsc.io/quote</code> package and add a call
+    to its <code>Go</code> function.
+
+    <p>
+      After adding the highlighted lines, your code should include the
+      following:
+    </p>
+
+    <pre>
+package main
+
+import "fmt"
+
+<ins>import "rsc.io/quote"</ins>
+
+func main() {
+    <ins>fmt.Println(quote.Go())</ins>
+}
+</pre>
+  </li>
+
+  <li>
+    Put your own code in a module for tracking dependencies.
+
+    <p>
+      When your code imports packages from another module, a go.mod file lists
+      the specific modules and versions providing those packages. That file
+      stays with your code, including in your source code repository.
+    </p>
+
+    <p>
+      To create a go.mod file, run the
+      <a
+        href="https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory"
+        ><code>go mod init</code> command</a
+      >, giving it the name of the module your code will be in (here, just use
+      "hello"):
+    </p>
+
+    <pre>
+$ go mod init hello
+go: creating new go.mod: module hello
+</pre
+    >
+  </li>
+
+  <li>
+    Run your code to see the message generated by the function you're calling.
+
+    <pre>
+$ go run hello.go
+go: finding module for package rsc.io/quote
+go: found rsc.io/quote in rsc.io/quote v1.5.2
+Don't communicate by sharing memory, share memory by communicating.
+</pre
+    >
+
+    <p>
+      Notice that your code calls the <code>Go</code> function, printing a
+      clever message about communication.
+    </p>
+
+    <p>
+      But before it ran the code, <code>go run</code> located and downloaded the
+      <code>rsc.io/quote</code> module that contains the package you imported.
+      By default, it downloaded the latest version -- v1.5.2. Go build commands
+      are designed to locate the modules required for packages you import.
+    </p>
+  </li>
+</ol>
+
+<h2 id="write-more">Write more code</h2>
+
+<p>
+  With this quick introduction, you got Go installed and learned some of the
+  basics. To write some more code with another tutorial, take a look at
+  <a href="create-module.html">Create a Go module</a>.
+</p>
diff --git a/content/static/doc/tutorial/greetings-multiple-people.html b/content/static/doc/tutorial/greetings-multiple-people.html
new file mode 100644
index 0000000..b0ddcf8
--- /dev/null
+++ b/content/static/doc/tutorial/greetings-multiple-people.html
@@ -0,0 +1,227 @@
+<!--{
+    "Title": "Return greetings for multiple people",
+    "Path":  "/doc/tutorial/greetings-multiple-people"
+}-->
+
+<p>
+  In the last changes you'll make to your module's code, you'll add support for
+  getting greetings for multiple people in one request. In other words, you'll
+  handle a multiple-value input and pair values with a multiple-value output.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<p>
+  To do this, you'll need to pass a set of names to a function that can return a
+  greeting for each of them. Changing the <code>Hello</code> function's
+  parameter from a single name to a set of names would change the function
+  signature. If you had already published the <code>greetings</code> module and
+  users had already written code calling <code>Hello</code>, that change would
+  break their programs. In this situation, a better choice is to give new
+  functionality a new name.
+</p>
+
+<p>
+  In the last code you'll add with this tutorial, update the code as if you've
+  already published a version of the <code>greetings</code> module. Instead of
+  changing the <code>Hello</code> function, add a new function
+  <code>Hellos</code> that takes a set of names. Then, for the sake of
+  simplicity, have the new function call the existing one. Keeping both
+  functions in the package leaves the original for existing callers (or future
+  callers who only need one greeting) and adds a new one for callers that want
+  the expanded functionality.
+</p>
+
+<ol>
+  <li>
+    In greetings/greetings.go, change your code so it looks like the following.
+
+    <pre>
+package greetings
+
+import (
+    "errors"
+    "fmt"
+    "math/rand"
+    "time"
+)
+
+// Hello returns a greeting for the named person.
+func Hello(name string) (string, error) {
+    // If no name was given, return an error with a message.
+    if name == "" {
+        return name, errors.New("empty name")
+    }
+    // Create a message using a random format.
+    message := fmt.Sprintf(randomFormat(), name)
+    return message, nil
+}
+
+<ins>// Hellos returns a map that associates each of the named people
+// with a greeting message.
+func Hellos(names []string) (map[string]string, error) {
+    // A map to associate names with messages.
+    messages := make(map[string]string)
+    // Loop through the received slice of names, calling
+    // the Hello function to get a message for each name.
+    for _, name := range names {
+        message, err := Hello(name)
+        if err != nil {
+            return nil, err
+        }
+        // In the map, associate the retrieved message with 
+        // the name.
+        messages[name] = message
+    }
+    return messages, nil
+}</ins>
+
+// Init sets initial values for variables used in the function.
+func init() {
+    rand.Seed(time.Now().UnixNano())
+}
+
+// randomFormat returns one of a set of greeting messages. The returned
+// message is selected at random.
+func randomFormat() string {
+    // A slice of message formats.
+    formats := []string{
+        "Hi, %v. Welcome!",
+        "Great to see you, %v!",
+        "Hail, %v! Well met!",
+    }
+
+    // Return one of the message formats selected at random.
+    return formats[rand.Intn(len(formats))]
+}
+</pre>
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Add a <code>Hellos</code> function whose parameter is a slice of names
+        rather than a single name. Also, you change one of its return types from
+        a <code>string</code> to a <code>map</code> so you can return names
+        mapped to greeting messages.
+      </li>
+      <li>
+        Have the new Hellos function call the existing Hello function. This
+        leaves both functions in place.
+      </li>
+      <li>
+        Create a <code>messages</code>
+        <a href="https://blog.golang.org/maps">map</a> to associate each of the
+        received names (as a key) with a generated message (as a value). In Go,
+        you initialize a map with the following syntax:
+        <code>make(map[<em>key-type</em>]<em>value-type</em>)</code>. You have
+        the <code>Hello</code> function return this map to the caller.
+      </li>
+      <li>
+        Loop through the names your function received, checking that each has a
+        non-empty value, then associate a message with each. In this
+        <code>for</code> loop, <code>range</code> returns two values: the index
+        of the current item in the loop and a copy of the item's value. You
+        don't need the index, so you use the Go
+        <a href="https://golang.org/doc/effective_go.html#blank"
+          >blank identifier (an underscore)</a
+        >
+        to ignore it.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    In your hello/hello.go calling code, pass a slice of names, then print the
+    contents of the names/messages map you get back.
+
+    <p>
+      In hello.go, change your code so it looks like the following.
+    </p>
+
+    <pre>
+package main
+
+import (
+    "fmt"
+    "log"
+
+    "example.com/greetings"
+)
+
+func main() {
+    // Set properties of the predefined Logger, including
+    // the log entry prefix and a flag to disable printing
+    // the time, source file, and line number.
+    log.SetPrefix("greetings: ")
+    log.SetFlags(0)
+
+    <ins>// A slice of names.
+    names := []string{"Gladys", "Samantha", "Darrin"}</ins>
+
+    // Request greeting messages for the names.
+    messages, err := greetings.Hellos(names)
+    if err != nil {
+        log.Fatal(err)
+    }
+    // If no error was returned, print the returned map of
+    // messages to the console.
+    fmt.Println(messages)
+}
+</pre>
+
+    <p>
+      With these changes, you:
+    </p>
+
+    <ul>
+      <li>
+        Create a <code>names</code> variable as a slice type holding three
+        names.
+      </li>
+      <li>
+        Pass the <code>names</code> variable as the argument to the
+        <code>Hello</code> function.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    At the command line, change to the directory that contains hello/hello.go,
+    then run hello.go to confirm that the code works.
+
+    <p>
+      The output should be a string representation of the map associating names
+      with messages, something like the following:
+    </p>
+
+    <pre>
+$ go run hello.go
+map[Darrin:Hail, Darrin! Well met! Gladys:Hi, Gladys. Welcome! Samantha:Hail, Samantha! Well met!]
+</pre
+    >
+  </li>
+</ol>
+
+<p>
+  This topic introduced maps for representing name/value pairs. It also
+  introduced the idea of
+  <a href="https://blog.golang.org/module-compatibility"
+    >preserving backward compatibility</a
+  >
+  by implementing a new function for new or changed functionality in a module.
+  In the tutorial's <a href="add-a-test.html">next topic</a>, you'll use
+  built-in features to create a unit test for your code.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="random-greeting.html"
+    >&lt; Return a random greeting</a
+  >
+  <a class="Navigation-next" href="add-a-test.html">Add a test &gt;</a>
+</p>
diff --git a/content/static/doc/tutorial/handle-errors.html b/content/static/doc/tutorial/handle-errors.html
new file mode 100644
index 0000000..f419d0d
--- /dev/null
+++ b/content/static/doc/tutorial/handle-errors.html
@@ -0,0 +1,188 @@
+<!--{
+    "Title": "Return and handle an error",
+    "Path":  "/doc/tutorial/handle-errors"
+}-->
+
+<p>
+  Handling errors is an essential feature of solid code. In this section, you'll
+  add a bit of code to return an error from the greetings module, then handle it
+  in the caller.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<ol>
+  <li>
+    In greetings/greetings.go, add the code highlighted below.
+
+    <p>
+      There's no sense sending a greeting back if you don't know who to greet.
+      Return an error to the caller if the name is empty. Copy the following
+      code into greetings.go and save the file.
+    </p>
+
+    <pre>
+package greetings
+
+import (
+    <ins>"errors"</ins>
+    "fmt"
+)
+
+// Hello returns a greeting for the named person.
+func Hello(name string) (string, error) {
+    <ins>// If no name was given, return an error with a message.
+    if name == "" {
+        return "", errors.New("empty name")
+    }</ins>
+
+    // If a name was received, return a value that embeds the name 
+    // in a greeting message.
+    message := fmt.Sprintf("Hi, %v. Welcome!", name)
+    return message, nil
+}
+</pre>
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Change the function so that it returns two values: a
+        <code>string</code> and an <code>error</code>. Your caller will check
+        the second value to see if an error occurred. (Any Go function can
+        <a href="https://golang.org/doc/effective_go.html#multiple-returns"
+          >return multiple values</a
+        >.)
+      </li>
+      <li>
+        Import the Go standard library <code>errors</code> package so you can
+        use its
+        <a href="https://golang.org/pkg/errors/#example_New"
+          ><code>errors.New</code> function</a
+        >.
+      </li>
+      <li>
+        Add an <code>if</code> statement to check for an invalid request (an
+        empty string where the name should be) and return an error if the
+        request is invalid. The <code>errors.New</code> function returns an
+        <code>error</code> with your message inside.
+      </li>
+      <li>
+        Add <code>nil</code> (meaning no error) as a second value in the
+        successful return. That way, the caller can see that the function
+        succeeded.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    In your hello/hello.go file, handle the error now returned by the
+    <code>Hello</code> function, along with the non-error value.
+
+    <p>
+      Paste the following code into hello.go.
+    </p>
+
+    <pre>
+package main
+
+import (
+    "fmt"
+    <ins>"log"</ins>
+
+    "example.com/greetings"
+)
+
+func main() {
+    <ins>// Set properties of the predefined Logger, including
+    // the log entry prefix and a flag to disable printing
+    // the time, source file, and line number.
+    log.SetPrefix("greetings: ")
+    log.SetFlags(0)</ins>
+
+    // Request a greeting message.
+    message, err := greetings.Hello("")
+    <ins>// If an error was returned, print it to the console and
+    // exit the program.
+    if err != nil {
+        log.Fatal(err)
+    }
+
+    // If no error was returned, print the returned message
+    // to the console.</ins>
+    fmt.Println(message)
+}
+</pre>
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Configure the
+        <a href="https://golang.org/pkg/log/"><code>log</code> package</a> to
+        print the command name ("greetings: ") at the start of its log messages,
+        without a time stamp or source file information.
+      </li>
+      <li>
+        Assign both of the <code>Hello</code> return values, including the
+        <code>error</code>, to variables.
+      </li>
+      <li>
+        Change the <code>Hello</code> argument from Gladys’s name to an empty
+        string, so you can try out your error-handling code.
+      </li>
+      <li>
+        Look for a non-nil <code>error</code> value. There's no sense continuing
+        in this case.
+      </li>
+      <li>
+        Use the functions in the standard library's <code>log package</code> to
+        output error information. If you get an error, you use the
+        <code>log</code> package's
+        <a href="https://pkg.go.dev/log?tab=doc#Fatal"
+          ><code>Fatal</code> function</a
+        >
+        to print the error and stop the program.
+      </li>
+    </ul>
+  </li>
+
+  <li>
+    At the command line in the <code>hello</code> directory, run hello.go to
+    confirm that the code works.
+
+    <p>
+      Now that you're passing in an empty name, you'll get an error.
+    </p>
+
+    <pre>
+$ go run hello.go
+greetings: empty name
+exit status 1
+</pre
+    >
+  </li>
+</ol>
+
+<p>
+  That's essentially how error handling in Go works: Return an error as a value
+  so the caller can check for it. It's pretty simple. In the tutorial's
+  <a href="random-greeting.html">next topic</a>, you'll use a Go slice to return
+  a randomly-selected greeting.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="call-module-code.html"
+    >&lt; Call your code from another module</a
+  >
+  <a class="Navigation-next" href="random-greeting.html"
+    >Return a random greeting &gt;</a
+  >
+</p>
diff --git a/content/static/doc/tutorial/images/function-syntax.graffle b/content/static/doc/tutorial/images/function-syntax.graffle
new file mode 100644
index 0000000..dd2fcdd
--- /dev/null
+++ b/content/static/doc/tutorial/images/function-syntax.graffle
Binary files differ
diff --git a/content/static/doc/tutorial/images/function-syntax.png b/content/static/doc/tutorial/images/function-syntax.png
new file mode 100644
index 0000000..63d29b6
--- /dev/null
+++ b/content/static/doc/tutorial/images/function-syntax.png
Binary files differ
diff --git a/content/static/doc/tutorial/index.html b/content/static/doc/tutorial/index.html
new file mode 100644
index 0000000..80f9c01
--- /dev/null
+++ b/content/static/doc/tutorial/index.html
@@ -0,0 +1,45 @@
+<!--{
+    "Title": "Tutorials",
+    "Path":  "/doc/tutorial/"
+}-->
+
+<p>If you're new to a part of Go, take a look at the tutorials linked below.</p>
+
+<p>
+  If you haven't installed Go yet, see
+  <a href="/doc/install">Download and install</a>.
+</p>
+
+<table id="tutorials-list" class="DocTable">
+  <thead>
+    <tr class="DocTable-head">
+      <th class="DocTable-cell" width="20%">Tutorial</th>
+      <th class="DocTable-cell">Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr class="DocTable-row">
+      <td class="DocTable-cell">
+        <a href="getting-started.html">Getting started</a>
+      </td>
+      <td class="DocTable-cell">Say Hello, World with Go.</td>
+    </tr>
+    <tr class="DocTable-row">
+      <td class="DocTable-cell">
+        <a href="create-module.html">Create a module</a>
+      </td>
+      <td class="DocTable-cell">
+        A multi-part tutorial that introduces common programming language
+        features from the Go perspective.
+      </td>
+    </tr>
+    <tr class="DocTable-row">
+      <td class="DocTable-cell">
+        <a href="https://tour.golang.org/welcome/1">A Tour of Go</a>
+      </td>
+      <td class="DocTable-cell">
+        An interactive introduction to Go: basic syntax and data structures; methods and interfaces; and Go's concurrency primitives.
+      </td>
+    </tr>
+  </tbody>
+</table>
diff --git a/content/static/doc/tutorial/random-greeting.html b/content/static/doc/tutorial/random-greeting.html
new file mode 100644
index 0000000..d5a45be
--- /dev/null
+++ b/content/static/doc/tutorial/random-greeting.html
@@ -0,0 +1,156 @@
+<!--{
+    "Title": "Return a random greeting",
+    "Path":  "/doc/tutorial/random-greeting"
+}-->
+
+<p>
+  In this section, you'll change your code so that instead of returning a single
+  greeting every time, it returns one of several predefined greeting messages.
+</p>
+
+<aside class="Note">
+  <strong>Note:</strong> This topic is part of a multi-part tutorial that begins
+  with <a href="create-module.html">Create a Go module</a>.
+</aside>
+
+<p>
+  To do this, you'll use a Go slice. A
+  <a href="https://blog.golang.org/slices-intro"><em>slice</em></a> is like an
+  array, except that it's dynamically sized as you add and remove items. It's
+  one of the most useful types in Go. You'll add a small slice to contain three
+  greeting messages, then have your code return one of the messages randomly.
+</p>
+
+<ol>
+  <li>
+    In greetings/greetings.go, change your code so it looks like the following.
+
+    <pre>
+package greetings
+
+import (
+    "errors"
+    "fmt"
+    <ins>"math/rand"
+    "time"</ins>
+)
+
+// Hello returns a greeting for the named person.
+func Hello(name string) (string, error) {
+    // If no name was given, return an error with a message.
+    if name == "" {
+        return name, errors.New("empty name")
+    }
+    // Create a message using a random format.
+    message := fmt.Sprintf(<ins>randomFormat()</ins>, name)
+    return message, nil
+}
+
+<ins>// init sets initial values for variables used in the function.
+func init() {
+    rand.Seed(time.Now().UnixNano())
+}
+
+// randomFormat returns one of a set of greeting messages. The returned
+// message is selected at random.
+func randomFormat() string {
+    // A slice of message formats.
+    formats := []string{
+        "Hi, %v. Welcome!",
+        "Great to see you, %v!",
+        "Hail, %v! Well met!",
+    }
+
+    // Return a randomly selected message format by specifying
+    // a random index for the slice of formats.
+    return formats[rand.Intn(len(formats))]
+}</ins>
+</pre>
+
+    <p>
+      In this code, you:
+    </p>
+
+    <ul>
+      <li>
+        Add a <code>randomFormat</code> function that returns a randomly
+        selected format for a greeting message. Note that
+        <code>randomFormat</code> starts with a lowercase letter, making it
+        accessible only to code in its own package (in other words, it's not
+        exported).
+      </li>
+      <li>
+        In <code>randomFormat</code>, declare a <code>formats</code> slice with
+        three message formats. When declaring a slice, you omit its size in the
+        brackets, like this: <code>[]string</code>. This tells Go that the array
+        underlying a slice can be dynamically sized.
+      </li>
+      <li>
+        Use the
+        <a href="https://golang.org/pkg/math/rand/"
+          ><code>math/rand</code> package</a
+        >
+        to generate a random number for selecting an item from the slice.
+      </li>
+      <li>
+        Add an
+        <a href="https://golang.org/doc/effective_go.html#init"
+          ><code>init</code> function</a
+        >
+        to seed the <code>rand</code> package with the current time. Go executes
+        <code>init</code> functions automatically at program startup, after
+        global variables have been initialized.
+      </li>
+      <li>
+        In <code>Hello</code>, call the <code>randomFormat</code> function to
+        get a format for the message you'll return, then use the format and
+        <code>name</code> value together to create the message.
+      </li>
+      <li>Return the message (or an error) as you did before.</li>
+    </ul>
+
+    <p>
+      Your hello.go needn't change.
+    </p>
+  </li>
+
+  <li>
+    At the command line, change to the hello directory, then run hello.go to
+    confirm that the code works. Run it multiple times, noticing that the
+    greeting changes.
+
+    <p>
+      Oh -- don't forget to add Gladys's name (or a different name, if you like)
+      as an argument to the <code>Hello</code> function call in hello.go:
+      <code>greetings.Hello("Gladys")</code>
+    </p>
+
+    <pre>
+$ go build
+$ ./hello
+Great to see you, Gladys!
+
+$ ./hello
+Hi, Gladys. Welcome!
+
+$ ./hello
+Hail, Gladys! Well met!
+</pre
+    >
+  </li>
+</ol>
+
+<p>
+  That's an introduction to a Go slice. To get even more use out of this type,
+  you'll use a slice to greet multiple people. That's in the tutorial's
+  <a href="greetings-multiple-people.html">next topic</a>.
+</p>
+
+<p class="Navigation">
+  <a class="Navigation-prev" href="handle-errors.html"
+    >&lt; Return and handle an error</a
+  >
+  <a class="Navigation-next" href="greetings-multiple-people.html"
+    >Return greetings for multiple people &gt;</a
+  >
+</p>
diff --git a/content/static/internal/gen/gen.go b/content/static/internal/gen/gen.go
index 0cc170f..456b951 100644
--- a/content/static/internal/gen/gen.go
+++ b/content/static/internal/gen/gen.go
@@ -49,7 +49,11 @@
 	"doc/devel/release.html",
 	"doc/devel/weekly.html",
 	"doc/docs.html",
+	"doc/download.js",
 	"doc/gopath_code.html",
+	"doc/install.html",
+	"doc/install-source.html",
+	"doc/manage-install.html",
 	"doc/mvs/buildlist.svg",
 	"doc/mvs/downgrade.svg",
 	"doc/mvs/exclude.svg",
@@ -57,6 +61,16 @@
 	"doc/mvs/upgrade.svg",
 	"doc/root.html",
 	"doc/security.html",
+	"doc/tutorial/add-a-test.html",
+	"doc/tutorial/call-module-code.html",
+	"doc/tutorial/compile-install.html",
+	"doc/tutorial/create-module.html",
+	"doc/tutorial/getting-started.html",
+	"doc/tutorial/greetings-multiple-people.html",
+	"doc/tutorial/handle-errors.html",
+	"doc/tutorial/images/function-syntax.png",
+	"doc/tutorial/index.html",
+	"doc/tutorial/random-greeting.html",
 	"error.html",
 	"example.html",
 	"godoc.html",
diff --git a/content/static/static.go b/content/static/static.go
index 58572a9..21ddc9f 100644
--- a/content/static/static.go
+++ b/content/static/static.go
@@ -59,10 +59,18 @@
 
 	"doc/devel/weekly.html": "<!--{\x0a\x09\"Title\":\x20\"Weekly\x20Snapshot\x20History\"\x0a}-->\x0a\x0a<p>This\x20page\x20summarizes\x20the\x20changes\x20between\x20tagged\x20weekly\x20snapshots\x20of\x20Go.\x0aSuch\x20snapshots\x20are\x20no\x20longer\x20created.\x20This\x20page\x20remains\x20as\x20a\x20historical\x20reference\x20only.</p>\x0a\x0a<p>For\x20recent\x20information,\x20see\x20the\x20<a\x20href=\"//golang.org/change\">change\x20log</a>\x20and\x20<a\x20href=\"//groups.google.com/group/golang-dev/\">development\x20mailing\x20list</a>.</p>\x0a\x0a<h2\x20id=\"2012-03-27\">2012-03-27\x20(<a\x20href=\"release.html#go1\">Go\x201</a>)</h2>\x0a\x0a<pre>\x0a*\x20cmd/dist:\x20fix\x20detection\x20of\x20go1\x20version.\x0a*\x20cmd/go:\x20add\x20missing\x20error\x20check\x20(thanks\x20Evan\x20Shaw),\x0a\x09allow\x20underscores\x20in\x20tool\x20name\x20(thanks\x20Shenghou\x20Ma),\x0a\x09bug\x20fixes,\x0a\x09copy\x20tag_test.go\x20from\x20goinstall,\x0a\x09explain\x20versions\x20better,\x0a\x09respect\x20$GOBIN\x20always,\x0a\x09update\x20for\x20go1\x20tag\x20format.\x0a*\x20cmd/godoc:\x20canonicalize\x20custom\x20path\x20redirects,\x0a\x09fix\x20app\x20engine\x20version,\x0a\x09use\x20virtual\x20filesystem\x20to\x20implement\x20-templates\x20flag.\x0a*\x20codewalk/sharemem.xml:\x20fix\x20references\x20to\x20files.\x0a*\x20crypto/tls:\x20don't\x20select\x20ECC\x20ciphersuites\x20with\x20no\x20mutual\x20curve.\x0a*\x20doc:\x20add\x20JSON-RPC:\x20a\x20tale\x20of\x20interfaces\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09describe\x20the\x20Windows\x20MSI\x20installer\x20as\x20experimental,\x0a\x09link\x20to\x20Go\x20Project\x20Dashboard\x20from\x20package\x20list,\x0a\x09update\x20wiki\x20tutorial\x20templates\x20and\x20template\x20discussion,\x0a\x09and\x20many\x20minor\x20fixes.\x0a*\x20exp/types:\x20generalized\x20GCImporter\x20API.\x0a*\x20go/build:\x20cgoEnabled\x20is\x20not\x20known\x20to\x20cmd/dist\x20anymore\x20(thanks\x20Shenghou\x20Ma),\x0a\x09fix\x20import\x20check.\x0a*\x20godoc:\x20make\x20'Overview'\x20section\x20collapsible.\x0a*\x20misc/dist:\x20many\x20fixes\x20and\x20tweaks.\x0a*\x20misc/emacs:\x20fix\x20indentation\x20bug.\x0a*\x20misc/goplay:\x20fix\x20error\x20on\x20IE8\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20net:\x20ignore\x20ECONNABORTED\x20from\x20syscall.Accept\x20(thanks\x20Devon\x20H.\x20O'Dell).\x0a*\x20os:\x20add\x20missing\x20byte\x20to\x20FileMode\x20buffer\x20(thanks\x20Stefan\x20Nilsson).\x0a*\x20path/filepath:\x20convert\x20drive\x20letter\x20to\x20upper\x20case\x20in\x20windows\x20EvalSymlinks\x20(thanks\x20Alex\x20Brainman),\x0a\x09correct\x20comment\x20in\x20EvalSymlinks\x20(thanks\x20Alex\x20Brainman),\x0a\x09use\x20windows\x20GetShortPathName\x20api\x20to\x20force\x20GetLongPathName\x20to\x20do\x20its\x20work\x20(thanks\x20Alex\x20Brainman),\x0a\x09windows\x20drive\x20letter\x20cannot\x20be\x20a\x20digit\x20(thanks\x20Alex\x20Brainman).\x0a*\x20run.bash:\x20compile\x20the\x20codewalks.\x0a*\x20runtime:\x20restore\x20deadlock\x20detection\x20in\x20the\x20simplest\x20case\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09work\x20around\x20false\x20negative\x20in\x20deadlock\x20detection.\x0a*\x20text/template:\x20fix\x20typo\x20in\x20package\x20comment.\x0a*\x20windows:\x20installer\x20fixes\x20(thanks\x20Joe\x20Poirier).\x0a</pre>\x0a\x0a<h2\x20id=\"2012-03-22\">2012-03-22\x20(Go\x201\x20Release\x20Candidate\x202)</h2>\x0a\x0a<pre>\x0aAs\x20with\x20last\x20week's\x20snapshot,\x20this\x20snapshot\x20is\x20another\x20Go\x201\x20release\x20candidate.\x0aA\x20notable\x20change\x20in\x20this\x20snapshot\x20are\x20Windows\x20installer\x20fixes.\x0a\x0aChanges\x20in\x20this\x20snapshot:\x0a*\x205l,\x206l,\x208l:\x20fix\x20stack\x20split\x20logic\x20for\x20stacks\x20near\x20default\x20segment\x20size.\x0a*\x20archive/zip:\x20move\x20r.zip\x20off\x20disk,\x20into\x20reader_test.go.\x0a*\x20build:\x20catch\x20API\x20changes\x20during\x20build,\x0a\x09do\x20more\x20during\x20windows\x20build\x20(thanks\x20Alex\x20Brainman),\x0a\x09lengthen\x20timeout\x20for\x20the\x20lengthy\x20runtime\x20test\x20(thanks\x20Shenghou\x20Ma),\x0a\x09unset\x20GOPATH\x20before\x20tests\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cmd/cgo:\x20add\x20support\x20for\x20function\x20export\x20for\x20gccgo\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20handling\x20of\x20errno\x20for\x20gccgo.\x0a*\x20cmd/go:\x20add\x20-fno-common\x20by\x20default\x20on\x20Darwin\x20(thanks\x20Shenghou\x20Ma),\x0a\x09don't\x20add\x20detail\x20to\x20errPrintedOutput,\x0a\x09fix\x20directory->import\x20path\x20conversion,\x0a\x09make\x20build\x20errors\x20more\x20visible,\x0a\x09use\x20.o,\x20not\x20.{5,6,8},\x20for\x20gccgo\x20created\x20object\x20files,\x0a\x09work\x20around\x20occasional\x20ETXTBSY\x20running\x20cgo.\x0a*\x20cmd/godoc:\x20add\x20toys,\x20tour\x20button\x20to\x20playground,\x0a\x09inform\x20users\x20that\x20the\x20playground\x20doesn't\x20work\x20via\x20local\x20godoc,\x0a\x09style\x20example\x20headings\x20like\x20links,\x0a\x09use\x20*goroot\x20as\x20base\x20path\x20in\x20zip\x20file,\x0a\x09use\x20FormatText\x20for\x20formating\x20code\x20in\x20html\x20template,\x0a\x09use\x20shorter\x20titles\x20for\x20tabs.\x0a*\x20cmd/gofmt:\x20show\x20ascii\x20in\x20usage\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20cmd/pack:\x20also\x20recognize\x20'\\\\'\x20as\x20path\x20separator\x20in\x20filenames\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20crypto/tls:\x20always\x20send\x20a\x20Certificate\x20message\x20if\x20one\x20was\x20requested.\x0a*\x20doc/install:\x20remove\x20reference\x20to\x20\"Go\x20Tutorial\"\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20doc/play:\x20use\x20[]rune\x20instead\x20of\x20[]int\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20doc:\x20add\x20Go\x20Concurrency\x20Patterns:\x20Timing\x20out,\x20moving\x20on\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09add\x20Go\x20image/draw\x20package\x20article\x20and\x20convert\x20code\x20snippets\x20to\x20Go1,\x0a\x09add\x20Gobs\x20of\x20data\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09add\x20Godoc:\x20documenting\x20Go\x20code\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09add\x20JSON\x20and\x20Go\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09general\x20update\x20of\x20gccgo\x20installation\x20instructions,\x0a\x09minor\x20updates\x20to\x20most\x20docs.\x0a*\x20flag:\x20add\x20examples.\x0a*\x20gc:\x20fix\x20struct\x20and\x20array\x20comparisons\x20for\x20new\x20bool\x20rules\x20(thanks\x20Anthony\x20Martin),\x0a\x09use\x20quoted\x20string\x20format\x20in\x20import\x20error,\x0a\x09when\x20expanding\x20append\x20inline,\x20preserve\x20arguments.\x0a*\x20go/build:\x20clarify\x20why\x20we\x20exclude\x20files\x20starting\x20with\x20'_'\x20or\x20'.'\x20(thanks\x20Shenghou\x20Ma),\x0a\x09clearer\x20argument\x20name\x20for\x20Import\x20(src\x20->\x20srcDir),\x0a\x09do\x20not\x20report\x20Target\x20for\x20local\x20imports,\x0a\x09fix\x20match.\x0a*\x20go/printer,\x20gofmt:\x20fix\x20multi-line\x20logic.\x0a*\x20html/template:\x20add\x20Templates\x20and\x20XXXEscape\x20functions,\x0a\x09fix\x20nil\x20pointer\x20bug,\x0a\x09fix\x20panic\x20on\x20Clone.\x0a*\x20io/ioutil:\x20fix\x20crash\x20when\x20Stat\x20fails.\x0a*\x20make.bat:\x20fix\x20for\x20old\x20files\x20(thanks\x20Christopher\x20Redden),\x0a\x09don't\x20show\x20error\x20message\x20if\x20old\x20generated\x20files\x20do\x20not\x20exist\x20(thanks\x20Shenghou\x20Ma),\x0a\x09properly\x20handle\x20directories\x20with\x20spaces\x20(thanks\x20Alex\x20Brainman).\x0a*\x20misc/cgo/gmp:\x20update\x20for\x20Go\x201\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20misc/dashboard:\x20remove\x20old\x20python\x20package\x20dashboard.\x0a*\x20misc/dist:\x20don't\x20ship\x20cmd/cov\x20or\x20cmd/prof,\x0a\x09force\x20modes\x20to\x200755\x20or\x200644\x20in\x20tarballs,\x0a\x09remove\x20exp\x20and\x20old\x20before\x20building.\x0a*\x20misc/vim:\x20restore\x20fileencodings\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20net/http:\x20couple\x20more\x20triv.go\x20modernizations,\x0a\x09ensure\x20triv.go\x20compiles\x20and\x20runs\x20(thanks\x20Robert\x20Hencke).\x0a*\x20net:\x20drop\x20unnecessary\x20type\x20assertions\x20and\x20fix\x20leak\x20in\x20test\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20IsNotExist()\x20should\x20also\x20consider\x20ERROR_PATH_NOT_FOUND\x20on\x20Windows\x20(thanks\x20Shenghou\x20Ma),\x0a\x09do\x20not\x20assume\x20syscall.Write\x20will\x20write\x20everything,\x0a\x09remove\x20document\x20duplication\x20in\x20error\x20predicate\x20functions\x20(thanks\x20Shenghou\x20Ma),\x0a\x09return\x20some\x20invented\x20data\x20from\x20Stat(DevNull)\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20path/filepath:\x20implement\x20Match\x20and\x20Glob\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20document\x20PkgPath,\x20Method,\x20StructField,\x0a\x09panic\x20if\x20MakeSlice\x20is\x20given\x20bad\x20len/cap\x20arguments.\x0a*\x20run.bat:\x20disable\x20test\x20in\x20test\\bench\\go1\x20to\x20fix\x20build\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime/cgo:\x20darwin\x20signal\x20masking\x20(thanks\x20Mikio\x20Hara),\x0a\x09linux\x20signal\x20masking\x20(thanks\x20Mikio\x20Hara).\x0a*\x20runtime:\x20do\x20not\x20handle\x20signals\x20before\x20configuring\x20handler,\x0a\x09manage\x20stack\x20by\x20ourselves\x20for\x20badcallback\x20on\x20windows/amd64\x20(thanks\x20Shenghou\x20Ma),\x0a\x09remove\x20unused\x20goc2c.c\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20sort:\x20add\x20time\x20complexity\x20to\x20doc\x20(thanks\x20Stefan\x20Nilsson),\x0a\x09fix\x20computation\x20of\x20maxDepth\x20to\x20avoid\x20infinite\x20loop\x20(thanks\x20Stefan\x20Nilsson).\x0a*\x20spec:\x20delete\x20references\x20to\x20unsafe.Reflect,Typeof,Unreflect.\x0a*\x20syscall:\x20Test\x20SCM_CREDENTIALS,\x20SO_PASSCRED\x20on\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x09add\x20a\x20test\x20for\x20passing\x20an\x20fd\x20over\x20a\x20unix\x20socket,\x0a\x09delete\x20passfd_test.go.\x0a*\x20test:\x20use\x20testlib\x20in\x20a\x20few\x20more\x20cases\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20text/template:\x20fix\x20a\x20couple\x20of\x20parse\x20bugs\x20around\x20identifiers,\x0a\x09variables\x20do\x20not\x20take\x20arguments.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-03-13\">2012-03-13\x20(Go\x201\x20Release\x20Candidate\x201)</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20is\x20very\x20close\x20to\x20what\x20we\x20expect\x20will\x20be\x20the\x20contents\x20of\x0athe\x20Go\x201\x20release.\x20There\x20are\x20still\x20a\x20few\x20minor\x20documentation\x20issues\x20to\x20resolve,\x0aand\x20a\x20handful\x20of\x20bugs\x20that\x20should\x20be\x20addressed\x20before\x20the\x20release,\x20but\x20the\x20vast\x0amajority\x20of\x20Go\x20programs\x20should\x20be\x20completely\x20unaffected\x20by\x20any\x20changes\x20we\x20make\x0abetween\x20now\x20and\x20the\x20full\x20release.\x0a\x0aIf\x20you're\x20interested\x20in\x20helping\x20us\x20test,\x20eager\x20to\x20try\x20out\x20Go\x201,\x20or\x20just\x0acurious,\x20this\x20weekly\x20snapshot\x20is\x20the\x20one\x20to\x20try.\x20We'll\x20issue\x20a\x20new\x20App\x20Engine\x0aGo\x201\x20beta\x20SDK\x20very\x20soon,\x20so\x20if\x20you're\x20an\x20App\x20Engine\x20user\x20you\x20can\x20try\x20it\x20there\x0atoo.\x0a\x0aTo\x20help\x20us\x20focus\x20on\x20any\x20remaining\x20bugs\x20and\x20avoid\x20introducing\x20new\x20ones,\x20we\x20will\x0arestrict\x20our\x20attention\x20to\x20critical\x20fixes\x20and\x20issues\x20marked\x20Go1-Must\x20in\x20the\x0aissue\x20tracker.\x20Everything\x20non-essential\x20will\x20be\x20held\x20until\x20after\x20the\x20Go\x201\x0arelease\x20is\x20cut\x20and\x20in\x20the\x20field\x20for\x20a\x20while.\x0a\x0aChanges\x20in\x20this\x20snapshot:\x0a*\x20archive/zip:\x20verify\x20CRC32s\x20in\x20non-streamed\x20files,\x0a\x09write\x20data\x20descriptor\x20signature\x20for\x20OS\x20X;\x20fix\x20bugs\x20reading\x20it.\x0a*\x20build:\x20build\x20correct\x20cmd/dist\x20matching\x20GOHOSTARCH\x20(thanks\x20Shenghou\x20Ma),\x0a\x09re-enable\x20some\x20broken\x20tests\x20in\x20run.bash\x20(thanks\x20Shenghou\x20Ma),\x0a\x09remove\x20some\x20references\x20to\x20Make.inc\x20etc.\x0a\x09use\x20run.go\x20for\x20running\x20tests.\x0a*\x20builder:\x20use\x20short\x20test\x20for\x20subrepos\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cgo,\x20runtime:\x20diagnose\x20callback\x20on\x20non-Go\x20thread.\x0a*\x20cmd/api:\x20set\x20compiler\x20for\x20all\x20build\x20contexts,\x0a\x09work\x20on\x20Windows\x20again,\x20and\x20make\x20gccgo\x20files\x20work\x20a\x20bit\x20more.\x0a*\x20cmd/cgo:\x20document\x20CGO_LDFLAGS\x20and\x20CGO_CFLAGS,\x0a\x09silence\x20const\x20warnings.\x0a*\x20cmd/dist,\x20cmd/go:\x20move\x20CGO_ENABLED\x20from\x20'go\x20tool\x20dist\x20env'\x20to\x20'go\x20env'\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cmd/dist:\x20fix\x20build\x20for\x20Linux/ARM\x20(thanks\x20Shenghou\x20Ma),\x0a\x09use\x20correct\x20hg\x20tag\x20for\x20go\x20version\x20(thanks\x20Alex\x20Brainman).\x0a*\x20cmd/fix:\x20add\x20rules\x20for\x20net/http\x20->\x20net/http/httputil\x20renames.\x0a*\x20cmd/gc:\x20allow\x20~\x20in\x20import\x20paths,\x0a\x09delete\x20old\x20map\x20delete\x20in\x20walk,\x0a\x09do\x20not\x20confuse\x20unexported\x20methods\x20of\x20same\x20name,\x0a\x09if\x20$GOROOT_FINAL\x20is\x20set,\x20rewrite\x20file\x20names\x20in\x20object\x20files,\x0a\x09implement\x20len(array)\x20/\x20cap(array)\x20rule,\x0a\x09import\x20path\x20cannot\x20start\x20with\x20slash\x20on\x20Windows\x20(thanks\x20Shenghou\x20Ma),\x0a\x09must\x20not\x20inline\x20panic,\x20recover,\x0a\x09show\x20duplicate\x20key\x20in\x20error,\x0a\x09unnamed\x20struct\x20types\x20can\x20have\x20methods.\x0a*\x20cmd/go:\x20add\x20-compiler,\x0a\x09add\x20env\x20command,\x20use\x20to\x20fix\x20misc/cgo/testso,\x0a\x09allow\x20go\x20get\x20with\x20arbitrary\x20URLs,\x0a\x09allow\x20ssh\x20tunnelled\x20bzr,\x20git\x20and\x20svn\x20(thanks\x20Ingo\x20Oeser),\x0a\x09always\x20provide\x20.exe\x20suffix\x20on\x20windows\x20(thanks\x20Shenghou\x20Ma),\x0a\x09document\x20import\x20path\x20meta\x20tag\x20discovery\x20in\x20go\x20help\x20remote,\x0a\x09honor\x20buildflags\x20in\x20run,\x20test\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09local\x20import\x20fixes,\x0a\x09make\x20go\x20get\x20new.code/...\x20work,\x0a\x09rebuild\x20external\x20test\x20package\x20dependencies,\x0a\x09respect\x20$GOBIN\x20always,\x0a\x09support\x20-compiler\x20for\x20go\x20list,\x20fix\x20isStale\x20for\x20gccgo\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/godoc:\x20add\x20support\x20for\x20serving\x20templates.\x0a\x09fix\x20codewalk\x20handler\x20(thanks\x20Francisco\x20Souza).\x0a\x09remove\x20extra\x20/\x20in\x20paths\x20(thanks\x20Ugorji\x20Nwoke),\x0a\x09support\x20$GOPATH,\x20simplify\x20file\x20system\x20code,\x0a\x09switch\x20on\x20+1\x20buttons.\x0a*\x20cmd/gofmt:\x20fix\x20race\x20in\x20long\x20test\x20(thanks\x20Mikio\x20Hara).\x0a*\x20codereview:\x20fix\x20for\x20Mercurial\x202.1.\x0a*\x20crypto/x509:\x20allow\x20server\x20gated\x20crypto\x20in\x20windows\x20systemVerify\x20(thanks\x20Mikkel\x20Krautz),\x0a\x09do\x20not\x20forget\x20to\x20free\x20cert\x20context\x20(thanks\x20Alex\x20Brainman),\x0a\x09don't\x20include\x20empty\x20additional\x20primes\x20in\x20PKCS#1\x20private\x20key,\x0a\x09enforce\x20path\x20length\x20constraint,\x0a\x09new\x20home\x20for\x20root\x20fetchers;\x20build\x20chains\x20using\x20Windows\x20API\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20csv:\x20clarify\x20what\x20a\x20negative\x20FieldsPerRecord\x20means.\x0a*\x20database/sql:\x20add\x20docs\x20about\x20connection\x20state,\x20pooling,\x0a\x09ensure\x20Stmts\x20are\x20correctly\x20closed\x20(thanks\x20Gwenael\x20Treguier),\x0a\x09fix\x20double\x20connection\x20free\x20on\x20Stmt.Query\x20error,\x0a\x09fix\x20typo\x20bug\x20resulting\x20in\x20double-Prepare.\x0a*\x20database/sql:\x20add\x20ErrBadConn.\x0a*\x20doc/go1:\x20template\x20packages\x20have\x20changed\x20since\x20r60.\x0a*\x20doc/go_mem:\x20init-created\x20goroutine\x20behavior\x20changes\x20for\x20Go\x201\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20doc/gopher:\x20flip\x20frontpage\x20gopher's\x20eyes.\x0a*\x20doc:\x20add\x20\"About\x20the\x20go\x20command\"\x20article,\x0a\x09add\x20C?\x20Go?\x20Cgo!\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09add\x20Go's\x20declaration\x20syntax\x20article\x20(thanks\x20Francisco\x20Souza),\x0a\x09add\x20more\x20gophers,\x0a\x09add\x20note\x20about\x20import\x20.\x20to\x20Go\x201\x20compatibility\x20notes,\x0a\x09several\x20doc\x20fixes\x20and\x20improvements,\x0a\x09update\x20Effective\x20Go\x20init\x20section,\x0a\x09update\x20progs/run\x20(thanks\x20Shenghou\x20Ma),\x0a\x09update\x20reference\x20gopher,\x0a\x09web\x20site\x20tweaks.\x0a*\x20encoding/asn1:\x20handle\x20UTCTime\x20before\x20the\x20year\x202000.\x0a*\x20encoding/binary:\x20improve\x20package\x20comment\x20(thanks\x20Stefan\x20Nilsson).\x0a*\x20encoding/gob:\x20fix\x20memory\x20corruption.\x0a*\x20encoding/json:\x20document\x20that\x20nil\x20slice\x20encodes\x20as\x20`null`.\x0a*\x20exp/wingui:\x20moved\x20to\x20code.google.com/p/gowingui.\x0a*\x20expvar:\x20add\x20locking\x20to\x20String,\x20and\x20use\x20RWMutex\x20properly\x20throughout,\x0a\x09add\x20missing\x20locking\x20in\x20String\x20methods.\x0a*\x20fmt,\x20log:\x20stop\x20using\x20unicode.\x0a*\x20fmt:\x20minor\x20tweak\x20of\x20package\x20doc\x20to\x20show\x20headings\x20in\x20godoc\x20(thanks\x20Volker\x20Dobler).\x0a*\x20go/build,\x20cmd/go:\x20add\x20support\x20for\x20.syso\x20files.\x0a*\x20go/build:\x20add\x20NoGoError,\x0a\x09add\x20dependency\x20test,\x0a\x09do\x20not\x20parse\x20.syso\x20files\x20(thanks\x20Alex\x20Brainman).\x0a*\x20go/parser:\x20avoid\x20endless\x20loop\x20in\x20case\x20of\x20internal\x20error,\x0a\x09better\x20error\x20synchronization.\x0a*\x20go/printer,\x20gofmt:\x20nicer\x20formatting\x20of\x20multi-line\x20returns.\x0a*\x20go/printer:\x20example\x20for\x20Fprint.\x0a*\x20go/scanner:\x20better\x20panic\x20diagnostic.\x0a*\x20go\x20spec:\x20no\x20known\x20implementation\x20differences\x20anymore,\x0a\x09fix\x20inaccuracy\x20in\x20type\x20identity\x20definition.\x0a*\x20io:\x20better\x20document\x20WriterAt.\x0a*\x20misc/dashboard:\x20remove\x20obsolete\x20package\x20builder\x20code.\x0a*\x20misc/dist:\x20add\x20source\x20archive\x20support,\x0a\x09add\x20windows\x20installer\x20and\x20zip\x20support,\x0a\x09minimum\x20target\x20requirement\x20is\x2010.6\x20for\x20Darwin\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20misc/emacs:\x20fix\x20extra\x20indentation\x20after\x20comments\x20that\x20end\x20with\x20a\x20period.\x0a*\x20misc/xcode:\x20example\x20install\x20of\x20language\x20spec\x20for\x20Xcode\x204.x\x20(thanks\x20Emil\x20Hessman).\x0a*\x20net,\x20net/rpc,\x20reflect,\x20time:\x20document\x20concurrency\x20guarantees.\x0a*\x20net/http:\x20fix\x20crash\x20with\x20Transport.CloseIdleConnections,\x0a\x09return\x20appropriate\x20errors\x20from\x20ReadRequest.\x0a*\x20net:\x20add\x20skip\x20message\x20to\x20test\x20(thanks\x20Mikio\x20Hara),\x0a\x09disable\x20use\x20of\x20external\x20listen\x20along\x20with\x20other\x20external\x20network\x20uses,\x0a\x09do\x20not\x20use\x20reflect\x20for\x20DNS\x20messages\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09document\x20ReadMsgUnix,\x20WriteMsgUnix,\x0a\x09fix\x20TestDialTimeout\x20on\x20windows\x20builder,\x0a\x09improve\x20server\x20and\x20file\x20tests\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20Dial\x20and\x20Listen\x20behavior\x20consistent\x20across\x20over\x20platforms\x20(thanks\x20Mikio\x20Hara),\x0a\x09remove\x20dependence\x20on\x20bytes,\x20fmt,\x20strconv,\x0a\x09silence\x20another\x20epoll\x20print,\x0a\x09use\x20IANA\x20reserved\x20port\x20to\x20test\x20dial\x20timeout\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20document\x20FileInfo.Size\x20as\x20system-dependent\x20for\x20irregular\x20files,\x0a\x09fix\x20SameFile\x20to\x20work\x20for\x20directories\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20path/filepath/path_test.go:\x20repair\x20and\x20enable\x20TestAbs.\x0a*\x20path/filepath:\x20disable\x20AbsTest\x20on\x20windows,\x0a\x09retrieve\x20real\x20file\x20name\x20in\x20windows\x20EvalSymlinks\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime/pprof:\x20disable\x20test\x20on\x20Leopard\x2064-bit.\x0a*\x20runtime:\x20add\x20Compiler,\x0a\x09fix\x20windows/amd64\x20exception\x20handler\x20(thanks\x20Alex\x20Brainman),\x0a\x09inline\x20calls\x20to\x20notok,\x0a\x09move\x20runtime.write\x20back\x20to\x20C,\x0a\x09print\x20error\x20on\x20receipt\x20of\x20signal\x20on\x20non-Go\x20thread,\x0a\x09remove\x20unused\x20runtime\xc2\xb7signame\x20and\x20runtime\xc2\xb7newError,\x0a\x09try\x20extending\x20arena\x20size\x20in\x2032-bit\x20allocator\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09wait\x20for\x20main\x20goroutine\x20before\x20setting\x20GOMAXPROCS\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20strconv:\x20add\x20table-based\x20isPrint,\x20remove\x20dependence\x20on\x20bytes,\x20unicode,\x20and\x20strings.\x0a*\x20sync/atomic:\x20disable\x20store\x20and\x20load\x20test\x20on\x20a\x20single\x20processor\x20machine\x20(thanks\x20Mikio\x20Hara).\x0a*\x20syscall:\x20fix\x20mkall.sh,\x20mksyscall_linux.pl,\x20and\x20regen\x20for\x20Linux/ARM\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20test/run:\x20use\x20all\x20available\x20cores\x20on\x20ARM\x20system\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20test:\x20actually\x20run\x20them\x20on\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09add\x20inherited\x20interface\x20test\x20to\x20ddd.go,\x0a\x09enable\x20method\x20expression\x20tests\x20in\x20ddd.go,\x0a\x09invoke\x20go\x20command\x20in\x20run.go,\x0a\x09match\x20gccgo\x20error\x20messages\x20for\x20bug388.go,\x0a\x09skip\x20.\x20files\x20in\x20directory.\x0a*\x20testing:\x20do\x20not\x20print\x20'no\x20tests'\x20when\x20there\x20are\x20examples.\x0a*\x20time:\x20during\x20short\x20test,\x20do\x20not\x20bother\x20tickers\x20take\x20longer\x20than\x20expected\x20(thanks\x20Shenghou\x20Ma),\x0a\x09mention\x20receiver\x20in\x20Unix,\x20UnixNano\x20docs.\x0a*\x20unicode/utf16:\x20remove\x20dependence\x20on\x20package\x20unicode.\x0a*\x20unicode/utf8:\x20remove\x20dependence\x20on\x20unicode.\x0a*\x20windows:\x20make\x20background\x20of\x20gopher\x20icon\x20transparent\x20(thanks\x20Volker\x20Dobler).\x0a</pre>\x0a\x0a<h2\x20id=\"2012-03-04\">2012-03-04</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20a\x20major\x20re-design\x20of\x20the\x20go/build\x20package.\x0aIts\x20FindTree,\x20ScanDir,\x20Tree,\x20and\x20DirInfo\x20types\x20have\x20been\x20replaced\x20with\x20the\x0aImport\x20and\x20Package\x20types.\x20There\x20is\x20no\x20gofix.\x20Code\x20that\x20uses\x20go/build\x20will\x20need\x0ato\x20be\x20updated\x20manually\x20to\x20use\x20the\x20package's\x20new\x20interface.\x0a\x0aOther\x20changes:\x0a*\x206a/6l:\x20add\x20IMUL3Q\x20and\x20SHLDL.\x0a*\x20all:\x20remove\x20unused\x20unexported\x20functions\x20and\x20constants\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20build:\x20add\x20GO_\x20prefix\x20to\x20LDFLAGS\x20and\x20GCFLAGS\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cmd/cc:\x20fix\x20an\x20out\x20of\x20bounds\x20array\x20access\x20(thanks\x20Anthony\x20Martin),\x0a\x09grow\x20some\x20global\x20arrays.\x0a*\x20cmd/dist:\x20force\x20line-buffering\x20stdout/stderr\x20on\x20Unix\x20(thanks\x20Shenghou\x20Ma),\x0a\x09recognize\x20CC=\"ccache\x20clang\"\x20as\x20clang.\x0a*\x20cmd/go:\x20avoid\x20repeated\x20include\x20dirs\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20-I\x20flag\x20for\x20gc\x20command\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fix\x20verbose\x20command\x20displaying\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fixes\x20for\x20gccgo\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09many\x20fixes,\x0a\x09test\x20-i\x20should\x20not\x20disable\x20-c\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cmd/vet:\x20don't\x20give\x20error\x20for\x20Printf(\"%+5.2e\",\x20x)\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cmd/yacc/units.y:\x20update\x20comment,\x20give\x20better\x20error\x20messages\x20when\x20$GOROOT\x20not\x20set\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20crypto/tls:\x20force\x20OS\x20X\x20target\x20version\x20to\x2010.6\x20for\x20API\x20compatibility\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20crypto/x509:\x20fix\x20typo\x20in\x20Verify\x20documentation\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20dist:\x20treat\x20CC\x20as\x20one\x20unit\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20doc/go1:\x20add\x20justification\x20discussions\x20to\x20major\x20changes,\x0a\x09minor\x20corrections\x20and\x20updates.\x0a*\x20doc:\x20describe\x20API\x20changes\x20to\x20go/build,\x0a\x09elaborate\x20available\x20checks\x20for\x20cmd/vet\x20(thanks\x20Shenghou\x20Ma),\x0a\x09expand\x20code.html\x20to\x20discuss\x20the\x20go\x20tool\x20in\x20more\x20depth,\x0a\x09instruct\x20FreeBSD/Linux\x20users\x20to\x20rm\x20the\x20old\x20version\x20first,\x0a\x09remove\x20Go\x20for\x20C++\x20Programmers,\x0a\x09remove\x20roadmap\x20document,\x0a\x09remove\x20tutorial,\x0a\x09update\x20codelab/wiki\x20to\x20Go\x201\x20(thanks\x20Shenghou\x20Ma),\x0a*\x20encoding/gob:\x20fix\x20\"//\x20+build\"\x20comment\x20for\x20debug.go\x20(thanks\x20Shenghou\x20Ma),\x0a\x09more\x20hardening\x20for\x20lengths\x20of\x20input\x20strings.\x0a*\x20encoding/json:\x20drop\x20MarshalForHTML;\x20gofix\x20calls\x20to\x20Marshal,\x0a\x09escape\x20output\x20from\x20Marshalers.\x0a*\x20encoding/xml:\x20fix\x20anonymous\x20field\x20Unmarshal\x20example\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fix\x20xml\x20test\x20tag\x20usage\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20gc:\x20disallow\x20absolute\x20import\x20paths,\x0a\x09fix\x20escape\x20analysis\x20+\x20inlining\x20+\x20closure\x20bug,\x0a\x09fix\x20string\x20comparisons\x20for\x20new\x20bool\x20rules\x20(thanks\x20Anthony\x20Martin),\x0a\x09reject\x20import\x20paths\x20containing\x20special\x20characters\x20(thanks\x20Anthony\x20Martin).\x0a*\x20go/ast:\x20examples\x20for\x20ast.Print,\x20ast.Inspect.\x0a*\x20go/doc,\x20godoc:\x20fix\x20range\x20of\x20type\x20declarations.\x0a*\x20go/parser:\x20check\x20import\x20path\x20restrictions,\x0a\x09expand\x20test\x20cases\x20for\x20bad\x20import.\x0a*\x20go/printer,\x20gofmt:\x20improved\x20comment\x20placement.\x0a*\x20go/printer:\x20fix\x20printing\x20of\x20variadic\x20function\x20calls\x20(thanks\x20Anthony\x20Martin),\x0a\x09fix\x20test\x20for\x20new\x20import\x20path\x20restrictions\x20(thanks\x20Anthony\x20Martin),\x0a\x09replace\x20multiline\x20logic,\x0a\x09simpler\x20exprList\x20code,\x20more\x20tests.\x0a*\x20godoc:\x20add\x20Examples\x20link\x20to\x20top-level\x20index,\x0a\x09bring\x20back\x20highlighting,\x20selections,\x20and\x20alerts,\x0a\x09consistent\x20placement\x20of\x20documentation\x20sections,\x0a\x09don't\x20show\x20directories\x20w/o\x20packages\x20in\x20flat\x20dir\x20mode,\x0a\x09don't\x20show\x20testdata\x20directories,\x0a\x09fix\x20codewalks.\x0a*\x20gotype:\x20provide\x20-comments\x20flag.\x0a*\x20html/template:\x20make\x20doctype\x20check\x20case-insensitive\x20(thanks\x20Scott\x20Lawrence),\x0a\x09use\x20correct\x20method\x20signature\x20in\x20introduction\x20example\x20(thanks\x20Mike\x20Rosset).\x0a*\x20io:\x20document\x20that\x20I/O\x20is\x20not\x20necessarily\x20safe\x20for\x20parallel\x20access.\x0a*\x20ld:\x20allow\x20more\x20-L\x20options\x20(thanks\x20Shenghou\x20Ma),\x0a\x09fix\x20alignment\x20of\x20rodata\x20section.\x0a*\x20misc:\x20add\x20zsh\x20completion\x20for\x20go\x20tool\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20misc/bash:\x20Completion\x20for\x20go\x20tool\x20(thanks\x20Yissakhar\x20Z.\x20Beck).\x0a*\x20misc/dashboard:\x20fix\x20bug\x20in\x20UI\x20template,\x0a\x09record\x20install\x20counts\x20for\x20external\x20packages.\x0a*\x20misc/dist:\x20implement\x20binary\x20distribution\x20scripts\x20in\x20go.\x0a*\x20misc/gobuilder:\x20send\x20commit\x20time\x20in\x20RFC3339\x20format.\x0a*\x20misc/xcode:\x20move\x20Xcode3\x20specific\x20files\x20into\x20sub\x20directory.\x0a*\x20net/http/cgi:\x20add\x20an\x20empty\x20response\x20test,\x0a\x09fix\x20empty\x20response.\x0a*\x20net/http/httptest:\x20make\x20Server.Close\x20wait\x20for\x20outstanding\x20requests\x20to\x20finish.\x0a*\x20net/http/httputil:\x20fix\x20DumpRequestOut\x20on\x20https\x20URLs,\x0a\x09make\x20https\x20DumpRequestOut\x20less\x20racy.\x0a*\x20net/http:\x20add\x20overlooked\x20418\x20status\x20code,\x20per\x20RFC\x202324,\x0a\x09fix\x20ProxyFromEnvironment\x20bug,\x20docs,\x20add\x20tests,\x0a\x09make\x20a\x20test\x20more\x20paranoid\x20&\x20reliable\x20on\x20Windows.\x0a*\x20net/rpc:\x20silence\x20read\x20error\x20on\x20closing\x20connection.\x0a*\x20net:\x20add\x20stubs\x20for\x20NetBSD\x20(thanks\x20Benny\x20Siegert),\x0a\x09make\x20-external\x20flag\x20for\x20tests\x20default\x20to\x20true\x20(thanks\x20Mikio\x20Hara),\x0a\x09reorganize\x20test\x20files\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20diagnose\x20chdir\x20error\x20during\x20StartProcess,\x0a\x09implement\x20UserTime/SystemTime\x20on\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09implement\x20sameFile\x20on\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09release\x20process\x20handle\x20at\x20the\x20end\x20of\x20windows\x20(*Process).Wait\x20(thanks\x20Alex\x20Brainman),\x0a\x09sleep\x205ms\x20after\x20process\x20has\x20exited\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20path/filepath:\x20note\x20that\x20SplitList\x20is\x20different\x20from\x20strings.Split,\x0a\x09steer\x20people\x20away\x20from\x20HasPrefix.\x0a*\x20reflect:\x20don't\x20panic\x20comparing\x20functions\x20in\x20DeepEqual.\x0a\x09make\x20Value.Interface\x20return\x20immutable\x20data.\x0a*\x20runtime/pprof:\x20support\x20OS\x20X\x20CPU\x20profiling.\x0a*\x20runtime:\x20add\x20sanity\x20checks\x20to\x20the\x20runtime-gdb.py\x20prettyprinters,\x0a\x09check\x20for\x20ARM\x20syscall\x20failures\x20(thanks\x20Shenghou\x20Ma),\x0a\x09darwin\x20and\x20linux\x20signal\x20masking,\x0a\x09run\x20init\x20on\x20main\x20thread,\x0a\x09size\x20arena\x20to\x20fit\x20in\x20virtual\x20address\x20space\x20limit.\x0a*\x20spec:\x20allow\x20disallow\x20of\x20\\uFFFD\x20in\x20import\x20path,\x0a\x09apply\x20method\x20sets,\x20embedding\x20to\x20all\x20types,\x20not\x20just\x20named\x20types,\x0a\x09clarifications\x20around\x20exports,\x20uniqueness\x20of\x20identifiers,\x0a\x09import\x20path\x20implementation\x20restriction,\x0a\x09inside\x20functions,\x20variables\x20must\x20be\x20evaluated,\x0a\x09use\x20the\x20term\x20\"lexical\x20token\"\x20(rather\x20then\x20\"lexical\x20symbol\").\x0a*\x20sync:\x20add\x20Once\x20example,\x20remove\x20old\x20WaitGroup\x20example.\x0a*\x20test/bench/shootout:\x20update\x20post-Makefile.\x0a*\x20test:\x20add\x20documentation,\x20misc\x20fixes.\x0a*\x20testing:\x20add\x20-test.example\x20flag\x20to\x20control\x20execution\x20of\x20examples.\x0a*\x20text/template:\x20add\x20example\x20showing\x20use\x20of\x20custom\x20function,\x0a\x09add\x20examples\x20that\x20use\x20multiple\x20templates,\x0a\x09fix\x20redefinition\x20bugs.\x0a*\x20time:\x20add\x20a\x20comment\x20about\x20how\x20to\x20use\x20the\x20Duration\x20constants.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-02-22\">2012-02-22</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20os\x20and\x20runtime\x20packages.\x0a\x0aThis\x20should\x20be\x20the\x20last\x20of\x20the\x20significant\x20incompatible\x20changes\x20before\x20Go\x201.\x0a\x0aThere\x20are\x20no\x20longer\x20error\x20constants\x20such\x20as\x20EINVAL\x20in\x20the\x20os\x20package,\x20since\x20the\x0aset\x20of\x20values\x20varied\x20with\x20the\x20underlying\x20operating\x20system.\x20There\x20are\x20new\x0aportable\x20functions\x20like\x20IsPermission\x20to\x20test\x20common\x20error\x20properties,\x20plus\x20a\x0afew\x20new\x20error\x20values\x20with\x20more\x20Go-like\x20names,\x20such\x20as\x20ErrPermission\x20and\x0aErrNoEnv.\x0a\x0aThe\x20os.Getenverror\x20function\x20has\x20been\x20removed.\x20To\x20distinguish\x20between\x20a\x0anon-existent\x20environment\x20variable\x20and\x20an\x20empty\x20string,\x20use\x20os.Environ\x20or\x0asyscall.Getenv.\x0a\x0aThe\x20Process.Wait\x20method\x20has\x20dropped\x20its\x20option\x20argument\x20and\x20the\x20associated\x0aconstants\x20are\x20gone\x20from\x20the\x20package.\x20Also,\x20the\x20function\x20Wait\x20is\x20gone;\x20only\x20the\x0amethod\x20of\x20the\x20Process\x20type\x20persists.\x0a\x0aThe\x20non-portable\x20Waitmsg\x20type\x20has\x20been\x20replaced\x20with\x20the\x20portable\x20ProcessState.\x0a\x0aMuch\x20of\x20the\x20API\x20exported\x20by\x20package\x20runtime\x20has\x20been\x20removed\x20in\x20favor\x20of\x0afunctionality\x20provided\x20by\x20other\x20packages.\x20Code\x20using\x20the\x20runtime.Type\x0ainterface\x20or\x20its\x20specific\x20concrete\x20type\x20implementations\x20should\x20now\x20use\x20package\x0areflect.\x20\x20Code\x20using\x20runtime.Semacquire\x20or\x20runtime.Semrelease\x20should\x20use\x0achannels\x20or\x20the\x20abstractions\x20in\x20package\x20sync.\x0a\x0aThe\x20runtime.Alloc,\x20runtime.Free,\x20and\x20runtime.Lookup\x20functions,\x20an\x20unsafe\x20API\x0acreated\x20for\x20debugging\x20the\x20memory\x20allocator,\x20have\x20no\x20replacement.\x0a\x0aThe\x20runtime.Cgocalls\x20and\x20runtime.Goroutines\x20functions\x20have\x20been\x20renamed\x20to\x0aruntime.NumCgoCall\x20and\x20runtime.NumGoroutine.\x0a\x0aThe\x20\"go\x20fix\"\x20command\x20will\x20update\x20code\x20to\x20accommodate\x20most\x20of\x20these\x20changes.\x0a\x0aOther\x20changes:\x0a*\x205c,\x206c,\x208c,\x206g,\x208g:\x20correct\x20boundary\x20checking\x20(thanks\x20Shenghou\x20Ma).\x0a*\x205g,\x206g,\x208g:\x20flush\x20modified\x20globals\x20aggressively.\x0a*\x208a,\x208l:\x20add\x20EMMS\x20instruction\x20(thanks\x20Evan\x20Shaw).\x0a*\x20bufio:\x20don't\x20return\x20errors\x20from\x20good\x20Peeks.\x0a*\x20build:\x20add\x20make.bash\x20--no-clean\x20option,\x0a\x09improve\x20Windows\x20support.\x0a*\x20builder:\x20reuse\x20existing\x20workspace\x20if\x20possible\x20(thanks\x20Shenghou\x20Ma),\x0a\x09update\x20for\x20os.Wait\x20changes.\x0a*\x20bytes:\x20document\x20Compare/Equal\x20semantics\x20for\x20nil\x20arguments,\x20and\x20add\x20tests.\x0a*\x20cgo:\x20fix\x20definition\x20of\x20opaque\x20types\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cmd/api:\x20record\x20return\x20type\x20of\x20functions\x20for\x20variable\x20typecheck\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/cgo:\x20bug\x20fixes.\x0a*\x20cmd/dist:\x20add\x20clang\x20specific\x20-Wno\x20options\x20(thanks\x20Bobby\x20Powers),\x0a\x09fix\x20install\x20cmd/5g\x20on\x20non-arm\x20system,\x0a\x09fix\x20pprof\x20permissions\x20(thanks\x20Bobby\x20Powers),\x0a\x09make\x20dir\x20check\x20in\x20defaulttarg()\x20more\x20robust\x20(thanks\x20Shenghou\x20Ma),\x0a\x09use\x20correct\x20package\x20target\x20when\x20cross-compiling\x20(thanks\x20Alex\x20Brainman).\x0a*\x20cmd/gc:\x20correctly\x20typecheck\x20expression\x20lists\x20in\x20returns\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09don't\x20believe\x20that\x20variables\x20mentioned\x20256\x20times\x20are\x20unused\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09error\x20on\x20constant\x20shift\x20overflows\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20comparison\x20of\x20struct\x20with\x20_\x20field.\x0a\x09fix\x20error\x20for\x20floating-point\x20constant\x20%,\x0a\x09new,\x20less\x20strict\x20bool\x20rules.\x0a*\x20cmd/go:\x20add\x20tool\x20-n\x20flag,\x0a\x09go\x20test\x20-i\x20correctly\x20handle\x20cgo\x20packages\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20codereview:\x20fix\x20submit\x20message\x20for\x20new\x20clone\x20URL\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20database/sql/driver:\x20API\x20cleanups.\x0a*\x20doc:\x20many\x20fixes\x20and\x20adjustments.\x0a*\x20encoding/gob:\x20cache\x20engine\x20for\x20user\x20type,\x20not\x20base\x20type,\x0a\x09catch\x20internal\x20error\x20when\x20it\x20happens,\x0a\x09fix\x20mutually\x20recursive\x20slices\x20of\x20structs.\x0a*\x20encoding/json:\x20ignore\x20anonymous\x20fields.\x0a*\x20go/doc:\x20return\x20Examples\x20in\x20name\x20order.\x0a*\x20go/parser:\x20imaginary\x20constants\x20and\x20!\x20may\x20start\x20an\x20expression.\x0a*\x20go/printer,\x20gofmt:\x20improved\x20comma\x20placement.\x0a*\x20go/printer:\x20don't\x20lose\x20relevant\x20parentheses\x20when\x20rewriting\x20selector\x20expressions.\x0a*\x20godoc:\x20adjust\x20line\x20height\x20in\x20pre\x20blocks,\x0a\x09don't\x20print\x20spurious\x20suggestion\x20when\x20running\x20\"go\x20doc\x20foo\",\x0a\x09fix\x20absolute->relative\x20mapping,\x0a\x09fix\x20tag\x20mismatch\x20validation\x20errors\x20(thanks\x20Scott\x20Lawrence),\x0a\x09import\x20example\x20code\x20support,\x0a\x09support\x20flat\x20directory\x20view\x20again.\x0a*\x20html/template:\x20add\x20Clone\x20and\x20AddParseTree,\x0a\x09don't\x20indirect\x20past\x20a\x20Stringer,\x0a\x09minor\x20tweak\x20to\x20docs\x20to\x20improve\x20HTML\x20typography.\x0a*\x20image:\x20add\x20Decode\x20example.\x0a*\x20ld:\x20add\x20NOPTRBSS\x20for\x20large,\x20pointer-free\x20uninitialized\x20data.\x0a*\x20math/rand:\x20Intn\x20etc.\x20should\x20panic\x20if\x20their\x20argument\x20is\x20<=\x200.\x0a*\x20misc/dist/windows:\x20distro\x20builder\x20updates\x20(thanks\x20Joe\x20Poirier).\x0a*\x20misc/goplay:\x20remain\x20in\x20work\x20directory,\x20build\x20in\x20temp\x20directory.\x0a*\x20net,\x20os,\x20syscall:\x20delete\x20os.EPLAN9\x20(thanks\x20Mikio\x20Hara).\x0a*\x20net/http:\x20add\x20optional\x20Server.TLSConfig\x20field.\x0a*\x20net/smtp:\x20use\x20EHLO\x20then\x20HELO.\x0a*\x20net/textproto:\x20accept\x20bad\x20MIME\x20headers\x20as\x20browsers\x20do.\x0a*\x20net/url:\x20regularise\x20receiver\x20names.\x0a*\x20net:\x20make\x20LocalAddr\x20on\x20multicast\x20return\x20group\x20address\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20parseProcNetIGMP\x20more\x20robust\x20(thanks\x20Mikio\x20Hara),\x0a\x09more\x20selfConnect\x20debugging:\x20panic\x20if\x20ra\x20==\x20nil\x20in\x20internetSocket,\x0a\x09panic\x20if\x20sockaddrToTCP\x20returns\x20nil\x20incorrectly,\x0a\x09other\x20miscellaneous\x20fixes.\x0a*\x20path,\x20path/filepath:\x20polish\x20documentation\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20pprof:\x20add\x20Profile\x20type.\x0a*\x20runtime:\x20avoid\x20malloc\x20during\x20malloc,\x0a\x09define\x20NSIG\x20to\x20fix\x20plan\x209\x20build\x20(thanks\x20David\x20du\x20Colombier),\x0a\x09fix\x20FreeBSD\x20signal\x20handling\x20around\x20thread\x20creation\x20(thanks\x20Devon\x20H.\x20O'Dell),\x0a\x09goroutine\x20profile,\x20stack\x20dumps,\x0a\x09implement\x20runtime.osyield\x20on\x20FreeBSD\x20386,\x20amd64\x20(thanks\x20Devon\x20H.\x20O'Dell),\x0a\x09permit\x20default\x20behavior\x20of\x20SIGTSTP,\x20SIGTTIN,\x20SIGTTOU,\x0a\x09release\x20unused\x20memory\x20to\x20the\x20OS\x20(thanks\x20S\xc3\xa9bastien\x20Paolacci),\x0a\x09remove\x20an\x20obsolete\x20file\x20(thanks\x20Mikio\x20Hara).\x0a*\x20spec:\x20make\x20all\x20comparison\x20results\x20untyped\x20bool,\x0a\x09refine\x20the\x20wording\x20about\x20variables\x20in\x20type\x20switches,\x0a\x09struct\x20comparison\x20only\x20compares\x20non-blank\x20fields.\x0a*\x20syscall:\x20Make\x20Pdeathsig\x20type\x20Signal\x20in\x20SysProcAttr\x20on\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x09fix\x20bounds\x20check\x20in\x20Error,\x0a\x09force\x20Windows\x20to\x20always\x20use\x20US\x20English\x20error\x20messages\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20test:\x20migrated\x20to\x20new\x20go-based\x20testing\x20framework.\x0a*\x20text/template:\x20evaluate\x20function\x20fields.\x0a*\x20time:\x20use\x20Go\x20distribution\x20zoneinfo\x20if\x20system\x20copy\x20not\x20found.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-02-14\">2012-02-14</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20some\x20package\x20changes\x20that\x20require\x20changes\x20to\x20client\x20code.\x0a\x0aThe\x20flate,\x20gzip\x20and\x20zlib's\x20NewWriterXxx\x20functions\x20no\x20longer\x20return\x20an\x20error.\x0aThe\x20compiler\x20will\x20flag\x20all\x20affected\x20code\x20which\x20must\x20then\x20be\x20updated\x20by\x20hand.\x0a\x0aThe\x20os\x20package's\x20Exec\x20and\x20Time\x20functions\x20were\x20removed.\x20\x20Callers\x20should\x20use\x0asyscall.Exec\x20and\x20time.Now\x20instead.\x20The\x20ShellExpand\x20function\x20was\x20renamed\x20to\x0aExpandEnv.\x20The\x20NewFile\x20function\x20now\x20takes\x20a\x20uintptr\x20and\x20the\x20*File.Fd\x20method\x0areturns\x20a\x20uintptr.\x0a\x0aThe\x20runtime\x20package's\x20Type\x20type\x20and\x20its\x20methods\x20have\x20been\x20removed.\x0aUse\x20the\x20reflect\x20package\x20instead.\x0a\x0aOther\x20changes:\x0a*\x208a,\x208l:\x20add\x20LFENCE,\x20MFENCE,\x20SFENCE\x20(thanks\x20Darren\x20Elwood).\x0a*\x20all.bat:\x20report\x20error\x20code\x20back\x20to\x20the\x20gobuilder\x20(thanks\x20Alex\x20Brainman).\x0a*\x20archive/zip:\x20hide\x20Write\x20method\x20from\x20*Writer\x20type.\x0a*\x20build:\x20create\x20the\x20correct\x20$GOTOOLDIR,\x0a\x09get\x20rid\x20of\x20deps.bash\x20(thanks\x20Anthony\x20Martin),\x0a\x09reject\x20make.bash\x20on\x20Windows.\x0a*\x20builder:\x20set\x20$GOBUILDEXIT\x20for\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a*\x20bytes:\x20add\x20Reader,\x0a\x09return\x20error\x20in\x20WriteTo\x20if\x20buffer\x20is\x20not\x20drained.\x0a*\x20cgo:\x20add\x20support\x20for\x20returning\x20errno\x20with\x20gccgo\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/api:\x20follow\x20constant\x20references.\x0a*\x20cmd/cgo:\x20omit\x20//line\x20in\x20-godefs,\x20-cdefs\x20output.\x0a*\x20cmd/dist:\x20fixes\x20(thanks\x20Alex\x20Brainman,\x20Gustavo\x20Niemeyer,\x20Mikio\x20Hara,\x20Shenghou\x20Ma).\x0a*\x20cmd/fix:\x20warn\x20about\x20exp,\x20old,\x20deleted\x20packages.\x0a*\x20cmd/gc:\x20suspend\x20safemode\x20during\x20typecheck\x20of\x20inlined\x20bodies.\x0a*\x20cmd/go:\x20a\x20raft\x20of\x20fixes,\x0a\x09connect\x20os.Stdin\x20for\x20go\x20run\x20and\x20go\x20tool,\x0a\x09go\x20get\x20scheme\x20detection\x20(thanks\x20Daniel\x20Krech),\x0a\x09respect\x20test\x20-timeout\x20flag.\x0a*\x20cmd/vet:\x20warn\x20for\x20construct\x20'Println(os.Stderr,\x20...)'\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20compress/gzip:\x20remove\x20dead\x20code\x20(thanks\x20Alex\x20Brainman).\x0a*\x20container/heap:\x20add\x20example.\x0a*\x20dashboard:\x20add\x20gobuilder\x20-fail\x20mode.\x0a*\x20database/sql:\x20more\x20tests,\x0a\x09remove\x20Into\x20from\x20ScannerInto/ScanInto,\x0a\x09rename\x20ErrTransactionFinished\x20to\x20ErrTxDone,\x0a\x09support\x20ErrSkip\x20in\x20Tx.Exec\x20(thanks\x20Andrew\x20Balholm),\x0a\x09treat\x20pointers\x20as\x20nullable\x20types\x20as\x20with\x20encoding/json\x20(thanks\x20Andrew\x20Pritchard).\x0a*\x20debug/macho:\x20drop\x20terrifyingly\x20monstrous\x20URL\x20from\x20package\x20comment.\x0a*\x20dist:\x20prevent\x20recusive\x20loop\x20on\x20windows\x20when\x20fatal()\x20is\x20called\x20(thanks\x20Daniel\x20Theophanes).\x0a*\x20doc:\x20add\x20App\x20Engine\x20docs\x20to\x20'learn'\x20and\x20'reference'\x20pages,\x0a\x09add\x20playground.js,\x0a\x09new\x20document\x20about\x20compatibility\x20of\x20releases,\x0a\x09update\x20install.html\x20for\x20binary\x20distros,\x20add\x20install-source.html.\x0a*\x20effective_go:\x20use\x20new\x20map\x20deletion\x20syntax.\x0a*\x20encoding/binary:\x20add\x20Size,\x20to\x20replace\x20the\x20functionality\x20of\x20the\x20old\x20TotalSize,\x0a\x09another\x20attempt\x20to\x20describe\x20the\x20type\x20of\x20Read\x20and\x20Write's\x20data,\x0a\x09slices\x20are\x20allowed;\x20say\x20so.\x0a*\x20encoding/json:\x20document\x20buffering.\x0a*\x20encoding/xml:\x20add\x20support\x20for\x20the\x20omitempty\x20flag\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20exp/norm:\x20merged\x20charinfo\x20and\x20decomposition\x20tables.\x0a*\x20exp/types:\x20use\x20build.FindTree\x20in\x20GcImporter\x20(thanks\x20James\x20Whitehead).\x0a*\x20flate:\x20delete\x20WrongValueError\x20type.\x0a*\x20fmt:\x20diagnose\x20invalid\x20verb\x20applied\x20to\x20pointer,\x0a\x09scan\x20FALSE\x20correctly.\x0a*\x20gc:\x20bug\x20fixes,\x20better\x20error\x20messages.\x0a*\x20go/doc:\x20handle\x20recursive\x20embedded\x20types\x20(thanks\x20Gary\x20Burd),\x0a\x09don't\x20lose\x20exported\x20consts/vars\x20with\x20unexported\x20type,\x0a\x09treat\x20predeclared\x20error\x20interface\x20like\x20an\x20exported\x20type.\x0a*\x20go/printer:\x20implement\x20SourcePos\x20mode.\x0a*\x20godoc:\x20list\x20examples\x20in\x20index,\x0a\x09new\x20design,\x0a\x09regard\x20lone\x20examples\x20as\x20\"whole\x20file\"\x20examples.\x0a*\x20html/template:\x20added\x20more\x20words\x20about\x20examples\x20and\x20doc\x20(thanks\x20Bjorn\x20Tipling).\x0a*\x20log/syslog:\x20return\x20length\x20of\x20data\x20provided\x20by\x20the\x20user,\x20not\x20length\x20of\x20header.\x0a*\x20make.bat:\x20remove\x20double\x20quotes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20math:\x20fix\x20gamma\x20doc,\x20link\x20to\x20OEIS.\x0a*\x20mime:\x20unexport\x20some\x20internal\x20details.\x0a*\x20misc/dist:\x20add\x20binary\x20distribution\x20packaging\x20script\x20for\x20linux,\x0a\x09new\x20hierarchy\x20for\x20binary\x20distribution\x20packaging\x20scripts.\x0a*\x20net/http:\x20add\x20ServeContent,\x0a\x09don't\x20spin\x20on\x20temporary\x20accept\x20failure,\x0a\x09fix\x20client\x20goroutine\x20leak\x20with\x20persistent\x20connections,\x0a\x09fix\x20reference\x20to\x20URL.RawPath\x20in\x20docs\x20(thanks\x20Bjorn\x20Tipling),\x0a\x09panic\x20on\x20duplicate\x20registrations,\x0a\x09use\x20mtime\x20<\x20t+1s\x20to\x20check\x20for\x20unmodified\x20(thanks\x20Hong\x20Ruiqi).\x0a*\x20net:\x20avoid\x20Shutdown\x20during\x20Close,\x0a\x09avoid\x20TCP\x20self-connect,\x0a\x09disable\x20TestDialTimeout\x20on\x20Windows,\x0a\x09disable\x20multicast\x20test\x20on\x20Alpha\x20GNU/Linux,\x0a\x09disable\x20wild\x20use\x20of\x20SO_REUSEPORT\x20on\x20BSD\x20variants\x20(thanks\x20Mikio\x20Hara),\x0a\x09enable\x20flags\x20on\x20stream\x20for\x20multicast\x20listeners\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20use\x20of\x20listenerBacklog\x20(thanks\x20Mikio\x20Hara),\x0a\x09prefer\x20an\x20IPv4\x20listen\x20if\x20no\x20address\x20given\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os/exec:\x20add\x20Cmd.Waitmsg.\x0a*\x20os/signal:\x20revive\x20this\x20package.\x0a*\x20regexp/syntax:\x20add\x20package\x20and\x20Parse\x20commentary.\x0a*\x20regexp:\x20allow\x20substitutions\x20in\x20Replace,\x20ReplaceString.\x0a*\x20runtime,\x20pprof:\x20add\x20profiling\x20of\x20thread\x20creation.\x0a*\x20runtime,\x20time:\x20accelerate\x20tests\x20in\x20short\x20mode\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20runtime:\x20exit\x20early\x20on\x20OABI\x20systems\x20(thanks\x20Shenghou\x20Ma),\x0a\x09drop\x20to\x2032\x20bit\x20malloc\x20if\x2064\x20bit\x20will\x20not\x20work,\x0a\x09fix\x20\"SysReserve\x20returned\x20unaligned\x20address\"\x20bug\x20on\x2032-bit\x20systems\x20(thanks\x20Shenghou\x20Ma),\x0a\x09fix\x20grsec\x20support\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09on\x20386,\x20fix\x20FP\x20control\x20word\x20on\x20all\x20threads,\x20not\x20just\x20initial\x20thread,\x0a\x09put\x20lockorder\x20before\x20pollorder\x20in\x20Select\x20memory\x20block,\x0a\x09use\x20startpanic\x20so\x20that\x20only\x20one\x20thread\x20handles\x20an\x20incoming\x20SIGQUIT.\x0a*\x20spec:\x20add\x20forward\x20links\x20from\x20'method\x20set'\x20to\x20where\x20it\x20gets\x20used,\x0a\x09clarify\x20implementation\x20restrictions\x20on\x20untyped\x20floats,\x0a\x09disallow\x20recursive\x20embedded\x20interfaces,\x0a\x09method\x20names\x20must\x20be\x20unique,\x0a\x09send\x20on\x20closed\x20channel\x20counts\x20as\x20\"proceeding\",\x0a\x09strings\x20are\x20more\x20slices\x20than\x20arrays.\x0a*\x20strconv:\x20handle\x20very\x20large\x20inputs.\x0a*\x20strings:\x20add\x20Seek\x20and\x20ReadAt\x20methods\x20to\x20Reader.\x0a*\x20sync/atomic:\x20disable\x20hammer\x20pointer\x20tests\x20on\x20wrong\x20size\x20system.\x0a*\x20testing:\x20let\x20runtime\x20catch\x20the\x20panic.\x0a*\x20text/template:\x20refer\x20HTML\x20users\x20to\x20html/template.\x0a*\x20text/template/parse:\x20deep\x20Copy\x20method\x20for\x20nodes.\x0a*\x20time:\x20clean\x20up\x20MarshalJSON,\x20add\x20RFC3339\x20method,\x0a\x09use\x20\"2006-01-02\x2015:04:05.999999999\x20-0700\x20MST\"\x20as\x20String\x20format.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-02-07\">2012-02-07</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20a\x20re-organization\x20of\x20the\x20Go\x20tools.\x0a\x0aOnly\x20the\x20go,\x20godoc,\x20and\x20gofmt\x20tools\x20are\x20installed\x20to\x20$GOROOT/bin\x20(or\x20$GOBIN).\x0aThe\x20remainder\x20are\x20installed\x20to\x20$GOROOT/bin/tool.\x0aThis\x20puts\x20the\x20lesser-used\x20tools\x20(6g,\x20cgo,\x20govet,\x20etc.)\x20outside\x20the\x20user\x20PATH.\x0aInstead\x20these\x20tools\x20may\x20be\x20called\x20through\x20the\x20go\x20tool\x20with\x20'go\x20tool\x20command'.\x0aFor\x20example,\x20to\x20vet\x20hello.go\x20you\x20would\x20type\x20'go\x20tool\x20vet\x20hello.go'.\x0aType\x20'go\x20tool'\x20see\x20the\x20list\x20of\x20available\x20tools.\x0a\x0aWith\x20the\x20move,\x20some\x20tools\x20were\x20given\x20simpler\x20names:\x0a\x096cov\x20\x20\x20\x20-&gt;\x20cov\x0a\x096nm\x20\x20\x20\x20\x20-&gt;\x20nm\x0a\x09goapi\x20\x20\x20-&gt;\x20api\x0a\x09gofix\x20\x20\x20-&gt;\x20fix\x0a\x09gopack\x20\x20-&gt;\x20pack\x0a\x09gopprof\x20-&gt;\x20pprof\x0a\x09govet\x20\x20\x20-&gt;\x20vet\x0a\x09goyacc\x20\x20-&gt;\x20yacc\x0a\x0aThe\x20os/signal\x20package\x20has\x20been\x20moved\x20to\x20exp/signal.\x0a\x0aA\x20new\x20tool\x20named\x20'dist'\x20has\x20been\x20introduced\x20to\x20handle\x20building\x20the\x20gc\x20tool\x0achain\x20and\x20to\x20bootstrap\x20the\x20go\x20tool.\x20The\x20old\x20build\x20scripts\x20and\x20make\x20files\x0ahave\x20been\x20removed.\x0a\x0aOther\x20changes:\x0a*\x205a,\x206a,\x208a,\x20cc:\x20check\x20in\x20y.tab.[ch].\x0a*\x205l,\x206l,\x208l,\x20ld:\x20remove\x20memory\x20leaks\x20(thanks\x20Shenghou\x20Ma).\x0a*\x205l,\x206l,\x208l:\x20implement\x20-X\x20flag.\x0a*\x205l:\x20make\x20-v\x20option\x20output\x20less\x20nonessential\x20clutter\x20(thanks\x20Shenghou\x20Ma),\x0a\x09optimize\x20the\x20common\x20case\x20in\x20patch()\x20(thanks\x20Shenghou\x20Ma).\x0a*\x208a,\x208l:\x20implement\x20support\x20for\x20RDTSC\x20instruction\x20(thanks\x20Shenghou\x20Ma).\x0a*\x208g:\x20use\x20uintptr\x20for\x20local\x20pc.\x0a*\x20archive/zip:\x20support\x20full\x20range\x20of\x20FileMode\x20flags\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20bufio:\x20remove\x20special\x20error\x20type,\x20update\x20docs.\x0a*\x20build:\x20move\x20the\x20\"-c\"\x20flag\x20into\x20HOST_CFLAGS\x20(thanks\x20Anthony\x20Martin),\x0a\x09remove\x20unnecessary\x20pragmas\x20(thanks\x20Anthony\x20Martin).\x0a*\x20builder:\x20drop\x20recover\x20blocks.\x0a*\x20bytes:\x20API\x20tweaks.\x0a*\x20cgo:\x20accept\x20null\x20pointers\x20in\x20gccgo\x20flavour\x20of\x20C.GoString\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09print\x20line\x20numbers\x20in\x20fatal\x20errors\x20when\x20relevant\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/dist:\x20add\x20GOBIN\x20to\x20env's\x20output\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fix\x20bug\x20in\x20bsubst\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20build\x20on\x20openbsd\x20(thanks\x20Mikio\x20Hara),\x0a\x09generate\x20files\x20for\x20package\x20runtime,\x0a\x09ignore\x20file\x20names\x20beginning\x20with\x20.\x20or\x20_,\x0a\x09prevent\x20race\x20on\x20VERSION\x20creation\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cmd/gc:\x20another\x20special\x20(%hhS)\x20case\x20for\x20method\x20names,\x0a\x09describe\x20debugging\x20flags\x20(thanks\x20Anthony\x20Martin),\x0a\x09diagnose\x20\\\x20in\x20import\x20path,\x0a\x09disallow\x20switch\x20_\x20:=\x20v.(type),\x0a\x09don't\x20print\x20implicit\x20type\x20on\x20struct\x20literal\x20in\x20export,\x0a\x09fix\x20codegen\x20reordering\x20for\x20expressions\x20involving\x20&&\x20and\x20||,\x0a\x09use\x20octal\x20escapes\x20in\x20mkopnames\x20(thanks\x20Anthony\x20Martin).\x0a\x09use\x20original\x20constant\x20expression\x20in\x20error\x20messages\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/go:\x20add\x20support\x20for\x20release\x20tags\x20via\x20git\x20branches\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09build:\x20print\x20import\x20errors\x20when\x20invoked\x20on\x20files\x20(thanks\x20Kyle\x20Lemons),\x0a\x09clean\x20test\x20directories\x20as\x20they\x20complete,\x0a\x09fix\x20error\x20message\x20on\x20non-existing\x20tools\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20handling\x20of\x20gccgo\x20standard\x20library\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fixed\x20panic\x20on\x20`go\x20clean\x20-n`\x20and\x20`go\x20clean\x20-x`\x20(thanks\x20Sanjay\x20Menakuru),\x0a\x09introduce\x20support\x20for\x20\"go\x20build\"\x20with\x20gccgo\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09make\x20vcs\x20command\x20actually\x20gather\x20output\x20(thanks\x20Roger\x20Peppe),\x0a\x09pass\x20env\x20CGO_CFLAGS\x20to\x20cgo\x20(thanks\x20Jeff\x20Hodges),\x0a\x09record\x20location\x20of\x20failed\x20imports\x20for\x20error\x20reporting\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20cmd/goapi:\x20expand\x20embedded\x20interfaces.\x0a*\x20cmd/goinstall:\x20remove\x20now\x20that\x20'go\x20get'\x20works\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cmd/ld:\x20fix\x20gdbscript\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20cmd/pack:\x20change\x20gopack\x20to\x20pack\x20in\x20error\x20messages.\x0a*\x20codereview:\x20miscellaneous\x20fixes\x20and\x20improvements.\x0a*\x20crypto/elliptic:\x20p224Contract\x20could\x20produce\x20a\x20non-minimal\x20representation.\x0a*\x20crypto/tls:\x20better\x20error\x20message\x20when\x20connecting\x20to\x20SSLv3\x20servers.\x0a*\x20crypto/x509:\x20use\x20case-insensitive\x20hostname\x20matching.\x0a*\x20dashboard:\x20support\x20for\x20sub-repositories,\x20update\x20to\x20go1beta.\x0a*\x20database/sql:\x20permit\x20scanning\x20into\x20interface{}.\x0a*\x20doc:\x20update\x20go1.html\x20for\x20recent\x20changes.\x0a*\x20encoding/base32:\x20add\x20DecodeString\x20and\x20EncodeToString\x20helper\x20methods,\x0a\x09ignore\x20new\x20line\x20characters\x20during\x20decode.\x0a*\x20encoding/base64:\x20ignore\x20new\x20line\x20characters\x20during\x20decode.\x0a*\x20encoding/gob:\x20document\x20CommonType.\x0a*\x20encoding/hex:\x20canonicalize\x20error\x20type\x20names.\x0a*\x20encoding/json:\x20call\x20(*T).MarshalJSON\x20for\x20addressable\x20T\x20values.\x0a*\x20encoding/xml:\x20fix\x20decoding\x20of\x20xml.Name\x20with\x20sub-elements\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fix\x20documentation\x20for\x20Decoder.Skip.\x0a*\x20exp/norm:\x20Added\x20some\x20benchmarks\x20for\x20form-specific\x20performance\x20measurements,\x0a\x09a\x20few\x20minor\x20changes\x20in\x20prepration\x20for\x20a\x20table\x20format\x20change.\x0a*\x20expvar:\x20revise\x20API.\x0a*\x20fix:\x20add\x20image/{bmp,tiff}\x20to\x20go1pkgrename.\x0a*\x20flag:\x20allow\x20a\x20FlagSet\x20to\x20not\x20write\x20to\x20os.Stderr,\x0a\x09describe\x20valid\x20input\x20for\x20Duration\x20flags.\x0a*\x20fmt:\x20add\x20test\x20of\x20NaN\x20map\x20keys,\x0a\x09fix\x20caching\x20bug\x20in\x20Scan.\x0a*\x20go/build:\x20put\x20a\x20space\x20between\x20'generated\x20by\x20make'\x20and\x20package\x20statement,\x0a\x09update\x20syslist.go\x20package\x20comment.\x0a*\x20go/doc:\x20fix\x20URL\x20linking\x20in\x20ToHTML\x20(thanks\x20Gary\x20Burd),\x0a\x09added\x20error,\x20rune\x20to\x20list\x20of\x20predeclared\x20types,\x0a\x09don't\x20lose\x20factory\x20functions\x20of\x20non-exported\x20types,\x0a\x09don't\x20show\x20methods\x20of\x20exported\x20anonymous\x20fields,\x0a\x09enable\x20AllMethods\x20flag\x20(and\x20fix\x20logic).\x0a*\x20go/printer:\x20don't\x20print\x20incorrect\x20programs.\x0a*\x20go/scanner:\x20idiomatic\x20receiver\x20names.\x0a*\x20go/spec:\x20update\x20language\x20on\x20map\x20types.\x0a*\x20go/token:\x20remove\x20dependency\x20on\x20encoding/gob.\x0a*\x20gob:\x20fuzz\x20testing,\x20plus\x20a\x20fix\x20for\x20very\x20large\x20type\x20names.\x0a*\x20gobuilder:\x20use\x20go\x20tool\x20to\x20build\x20and\x20test\x20sub-repositories.\x0a*\x20godoc:\x20add\x20URL\x20mode\x20m=methods,\x0a\x09diagnostic\x20for\x20empty\x20FS\x20tree,\x0a\x09fix\x20identifier\x20search,\x0a\x09fix\x20redirect\x20loop\x20for\x20URL\x20\"/\",\x0a\x09provide\x20link\x20to\x20subdirectories,\x20if\x20any,\x0a\x09sort\x20list\x20of\x20\"other\x20packages\",\x0a\x09update\x20metadata\x20in\x20appinit.go.\x0a*\x20gophertool:\x20fix\x20link\x20to\x20the\x20build\x20status\x20dashboard\x20(thanks\x20Jongmin\x20Kim).\x0a*\x20hgignore:\x20add\x20VERSION.cache\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09delete\x20dregs,\x20ignore\x20tmpltohtml.\x0a*\x20html:\x20add\x20package\x20doc.\x0a*\x20image:\x20add\x20package\x20docs,\x20rename\x20s/UnknownFormatError/ErrFormat/\x20and,\x0a\x09delete\x20the\x20image.Repeated\x20type,\x0a\x09remove\x20image/bmp\x20and\x20image/tiff\x20from\x20std.\x0a*\x20io/ioutil:\x20document\x20EOF\x20behavior\x20in\x20ReadFile\x20and\x20ReadAll.\x0a*\x20io:\x20API\x20tweaks.\x0a*\x20libmach:\x20add\x20stubs\x20for\x20Plan\x209\x20(thanks\x20Anthony\x20Martin).\x0a*\x20make.bash:\x20don't\x20remove\x20hgpatch.\x0a*\x20math/big:\x20add\x20raw\x20access\x20to\x20Int\x20bits,\x0a\x09API\x20and\x20documentation\x20cleanup.\x0a*\x20misc/goplay:\x20use\x20go\x20tool\x20\"run\"\x20(thanks\x20Olivier\x20Duperray).\x0a*\x20misc/osx:\x20don't\x20set\x20GOROOT\x20or\x20modify\x20profile\x20files,\x0a\x09update\x20for\x20dist\x20tool,\x20drop\x20image.bash,\x20update\x20readme.\x0a*\x20net,\x20syscall:\x20add\x20IPv4\x20multicast\x20helpers\x20for\x20windows\x20(thanks\x20Mikio\x20Hara).\x0a*\x20net/http/httputil:\x20fix\x20race\x20in\x20DumpRequestOut,\x0a\x09preserve\x20query\x20params\x20in\x20reverse\x20proxy.\x0a*\x20net/http:\x20don't\x20set\x20Content-Type\x20header\x20for\x20HEAD\x20requests\x20by\x20default\x20(thanks\x20Patrick\x20Mylund\x20Nielsen),\x0a\x09fix\x20nil\x20pointer\x20dereference\x20in\x20error\x20case\x20(thanks\x20Volker\x20Dobler),\x0a\x09close\x20client\x20fd\x20sooner\x20on\x20response\x20read\x20error,\x0a\x09set\x20cookies\x20in\x20client\x20jar\x20on\x20POST\x20requests\x20(thanks\x20Volker\x20Dobler).\x0a*\x20net/rpc:\x20fix\x20data\x20race\x20on\x20Call.Error.\x0a*\x20net:\x20ListenMulticastUDP\x20to\x20listen\x20concurrently\x20across\x20multiple\x20listeners\x20(thanks\x20Mikio\x20Hara),\x0a\x09disable\x20normal\x20multicast\x20testing\x20on\x20linux/arm\x20(thanks\x20Mikio\x20Hara),\x0a\x09fix\x20Plan\x209\x20build\x20(thanks\x20Anthony\x20Martin),\x0a\x09fix\x20windows\x20build\x20(thanks\x20Alex\x20Brainman),\x0a\x09move\x20DNSConfigError\x20to\x20a\x20portable\x20file,\x0a\x09remove\x20types\x20InvalidConnError\x20and\x20UnknownSocketError,\x0a\x09replace\x20error\x20variable\x20name\x20e,\x20errno\x20with\x20err\x20(thanks\x20Mikio\x20Hara),\x0a\x09run\x20TestDialTimeout\x20on\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09update\x20comments\x20to\x20remove\x20redundant\x20\"net\"\x20prefix\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os/exec:\x20TestExtraFiles\x20-\x20close\x20any\x20leaked\x20file\x20descriptors,\x0a\x09make\x20sure\x20file\x20is\x20not\x20closed\x20early\x20in\x20leaked\x20fd\x20test.\x0a*\x20os/signal:\x20move\x20to\x20exp/signal.\x0a*\x20os/user:\x20windows\x20implementation\x20(thanks\x20Alex\x20Brainman).\x0a*\x20os:\x20Process.handle\x20use\x20syscall.Handle\x20(thanks\x20Wei\x20Guangjing),\x0a\x09file\x20windows\x20use\x20syscall.InvalidHandle\x20instead\x20of\x20-1\x20(thanks\x20Wei\x20Guangjing),\x0a\x09remove\x20SIGXXX\x20signals\x20variables,\x0a\x09turn\x20FileStat.Sys\x20into\x20a\x20method\x20on\x20FileInfo\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20path/filepath:\x20repair\x20and\x20simplify\x20the\x20symlink\x20test.\x0a*\x20reflect:\x20add\x20comment\x20about\x20Type.Field\x20allocation,\x0a\x09test\x20that\x20PtrTo\x20returns\x20types\x20that\x20match\x20program\x20types.\x0a*\x20runtime:\x20add\x20runtime.cputicks()\x20and\x20seed\x20fastrand\x20with\x20it\x20(thanks\x20Damian\x20Gryski),\x0a\x09delete\x20UpdateMemStats,\x20replace\x20with\x20ReadMemStats(&stats)\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20float64\x20hash,\x0a\x09use\x20GOTRACEBACK\x20to\x20decide\x20whether\x20to\x20show\x20runtime\x20frames,\x0a\x09use\x20per-map\x20hash\x20seeds\x20(thanks\x20Damian\x20Gryski).\x0a*\x20spec:\x20add\x20number\x20to\x20the\x20fibonacci\x20sequence.\x0a*\x20std:\x20add\x20struct\x20field\x20tags\x20to\x20untagged\x20literals.\x0a*\x20strings:\x20add\x20Fields\x20example.\x0a*\x20syscall:\x20add\x20Timeval.Nano,\x20Timespec.Nano,\x20for\x20conversion\x20to\x20Duration,\x0a\x09cache\x20environment\x20variables\x20on\x20Plan\x209\x20(thanks\x20Anthony\x20Martin),\x0a\x09fix\x20//\x20+build\x20comments\x20in\x20types_*.go,\x0a\x09fix\x20build\x20directive\x20in\x20types_linux.go,\x0a\x09update\x20bootstrap\x20scripts\x20to\x20sync\x20with\x20new\x20go\x20command\x20(thanks\x20Mikio\x20Hara).\x0a*\x20test:\x20add\x20import\x20test\x20that\x20caused\x20an\x20incorrect\x20gccgo\x20error,\x0a\x09add\x20test\x20for\x20receiver\x20named\x20_,\x0a\x09add\x20test\x20of\x20NaN\x20in\x20map,\x0a\x09add\x20test\x20which\x20crashed\x20gccgo\x20compiler,\x0a\x09don't\x20use\x20package\x20main\x20for\x20files\x20without\x20a\x20main\x20function,\x0a\x09fix\x20bug\x20headers,\x0a\x09float\x20to\x20integer\x20test\x20case,\x0a\x09make\x20map\x20nan\x20timing\x20test\x20more\x20robust,\x0a\x09match\x20gccgo\x20error\x20messages,\x0a\x09test\x20append\x20with\x20two\x20different\x20named\x20types\x20with\x20same\x20element\x20type,\x0a\x09test\x20method\x20expressions\x20with\x20parameters,\x20and\x20with\x20import,\x0a\x09test\x20slice\x20beyond\x20len,\x0a\x09test\x20that\x20x\x20:=\x20&lt;-c\x20accepts\x20a\x20general\x20expression.\x0a*\x20testing:\x20capture\x20panics,\x20present\x20them,\x20and\x20mark\x20the\x20test\x20as\x20a\x20failure.\x0a*\x20unicode:\x20document\x20large\x20var\x20blocks\x20and\x20the\x20SpecialCase\x20vars.\x0a*\x20vet:\x20add\x20a\x20check\x20for\x20untagged\x20struct\x20literals.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-01-27\">2012-01-27</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20renamed\x20the\x20html\x20package\x20to\x20exp/html.\x20The\x20package\x20will\x20not\x0abe\x20present\x20in\x20the\x20Go\x201\x20distribution,\x20but\x20will\x20be\x20installable\x20from\x20source.\x0a\x0aError\x20variables\x20in\x20the\x20archive/tar,\x20archive/zip,\x20compress/gzip,\x20compress/zlib,\x0aand\x20crypto/bcrypt\x20packages\x20have\x20been\x20renamed\x20from\x20FooError\x20to\x20ErrFoo.\x20\x0aThere\x20is\x20no\x20gofix,\x20but\x20the\x20compiler\x20will\x20flag\x20code\x20that\x20needs\x20updating.\x0a\x0aThis\x20weekly\x20snapshot\x20relocates\x20many\x20packages\x20to\x20sub-repositories\x20of\x20the\x20main\x20\x0aGo\x20repository.\x20These\x20are\x20the\x20old\x20and\x20new\x20import\x20paths:\x0a\x0a\x09crypto/bcrypt\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/bcrypt\x0a\x09crypto/blowfish\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/blowfish\x0a\x09crypto/cast5\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/cast5\x0a\x09crypto/md4\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/md4\x0a\x09crypto/ocsp\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/ocsp\x0a\x09crypto/openpgp\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/openpgp\x0a\x09crypto/openpgp/armor\x20\x20\x20code.google.com/p/go.crypto/openpgp/armor\x0a\x09crypto/openpgp/elgamal\x20code.google.com/p/go.crypto/openpgp/elgamal\x0a\x09crypto/openpgp/errors\x20\x20code.google.com/p/go.crypto/openpgp/errors\x0a\x09crypto/openpgp/packet\x20\x20code.google.com/p/go.crypto/openpgp/packet\x0a\x09crypto/openpgp/s2k\x20\x20\x20\x20\x20code.google.com/p/go.crypto/openpgp/s2k\x0a\x09crypto/ripemd160\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/ripemd160\x0a\x09crypto/twofish\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/twofish\x0a\x09crypto/xtea\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/xtea\x0a\x09exp/ssh\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.crypto/ssh\x0a\x09net/dict\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.net/dict\x0a\x09net/websocket\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.net/websocket\x0a\x09exp/spdy\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.net/spdy\x0a\x09encoding/git85\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.codereview/git85\x0a\x09patch\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20code.google.com/p/go.codereview/patch\x0a\x0aGofix\x20will\x20update\x20imports\x20of\x20these\x20packages\x20to\x20use\x20the\x20new\x20import\x20paths.\x0aInstallations\x20that\x20depend\x20on\x20these\x20packages\x20will\x20need\x20to\x20install\x20them\x20using\x20a\x0a'go\x20get'\x20command.\x0a\x0aOther\x20changes:\x0a*\x206c,\x208c:\x20make\x20floating\x20point\x20code\x20NaN-safe.\x0a*\x206l,\x208l:\x20remove\x20unused\x20macro\x20definition\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20archive/tar:\x20fix\x20race\x20in\x20TestNonSeekable.\x0a*\x20archive/zip:\x20add\x20functions\x20to\x20convert\x20between\x20os.FileInfo\x20&\x20FileHeader.\x0a*\x20build:\x20do\x20not\x20build\x20all\x20C\x20compilers\x20(thanks\x20Shenghou\x20Ma),\x0a\x09remove\x20code\x20now\x20in\x20subrepositories.\x0a*\x20bytes:\x20remove\x20dead\x20code,\x20complete\x20documentation,\x0a\x09restore\x20panic\x20on\x20out-of-memory,\x0a\x09turn\x20buffer\x20size\x20overflows\x20into\x20errors.\x0a*\x20cgo:\x20-cdefs\x20should\x20translate\x20unsafe.Pointer\x20to\x20void\x20*\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20cmd/gc:\x20forgotten\x20recursion\x20on\x20ninit\x20itself\x20in\x20order.c.\x0a*\x20cmd/go:\x20bug\x20fixes,\x20implement\x20go\x20get,\x0a\x09correctly\x20handle\x20-n\x20and\x20-x\x20flags\x20for\x20'go\x20run'\x20(thanks\x20Shenghou\x20Ma),\x0a\x09solve\x20ambiguity\x20of\x20get\x20lp.net/project/foo\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09update\x20doc.go\x20with\x20text\x20generated\x20from\x20the\x20usage\x20strings.\x0a*\x20cmd/goapi:\x20new\x20tool\x20for\x20tracking\x20exported\x20API\x20over\x20time.\x0a*\x20codereview:\x20support\x20for\x20subrepositories.\x0a*\x20compress/flate:\x20fix\x20a\x20typo,\x20improve\x20compression\x20rate\x20by\x203-4%,\x0a\x09increase\x20the\x20length\x20of\x20hash\x20table\x20from\x201<<15\x20to\x201<<17.\x200%-16%\x20speedup,\x0a\x09make\x20lazy\x20matching\x20work,\x0a\x09reduce\x20memory\x20pressure\x20at\x20cost\x20of\x20additional\x20arithmetic\x20operation,\x0a\x09use\x20append\x20instead\x20of\x20slice+counter.\x0a*\x20crypto:\x20rename\x20some\x20FooError\x20to\x20ErrFoo.\x0a*\x20dashboard:\x20fix\x20-commit\x20for\x20new\x20xml\x20package.\x0a*\x20database/sql:\x20add\x20NullInt64,\x20NullFloat64,\x20NullBool\x20(thanks\x20James\x20P.\x20Cooper),\x0a\x09convert\x20SQL\x20null\x20values\x20to\x20[]byte\x20as\x20nil\x20(thanks\x20James\x20P.\x20Cooper),\x0a\x09fix\x20Tx.Query\x20(thanks\x20Blake\x20Mizerany).\x0a*\x20doc:\x20expand\x20FAQ\x20on\x20GOMAXPROCS,\x20update\x20to\x20Go\x201.\x0a*\x20doc/go1:\x20add\x20encoding/xml\x20and\x20net/url\x20changes\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09add\x20more\x20info\x20about\x20hash\x20and\x20net\x20changes,\x20delete\x20reference\x20to\x20html,\x0a\x09add\x20flag,\x20runtime,\x20testing,\x20image\x20,\x20mime,\x20filepath.Walk,\x0a\x09document\x20sub-repositories.\x0a*\x20encoding/binary:\x20document\x20that\x20PutVarint,\x20PutUvarint\x20may\x20panic.\x0a*\x20encoding/varint:\x20deleted\x20WriteXvarint.\x0a*\x20encoding/xml:\x20add\x20docs\x20for\x20ignoring\x20tag\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09bring\x20API\x20closer\x20to\x20other\x20packages\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09improve\x20[]byte\x20handling\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09remove\x20Marshaler\x20support\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09support\x20ignoring\x20fields\x20with\x20\"-\"\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20exp/ebnflint:\x20test\x20spec\x20during\x20'go\x20test'.\x0a*\x20exp/norm:\x20fixes\x20a\x20subtle\x20bug\x20introduced\x20by\x20change\x2010087:\x20random\x20offset.\x0a*\x20gc,\x20runtime:\x20handle\x20floating\x20point\x20map\x20keys.\x0a*\x20gc:\x20avoid\x20DOT\x20in\x20error\x20messages,\x0a\x09do\x20not\x20try\x20to\x20add\x20a\x20key\x20with\x20incorrect\x20type\x20to\x20a\x20hash\x20(thanks\x20Jeff\x20R.\x20Allen),\x0a\x09fix\x20order\x20of\x20evaluation,\x0a\x09fix\x20recursion\x20loop\x20in\x20interface\x20comparison,\x0a\x09handle\x20function\x20calls\x20in\x20arguments\x20to\x20builtin\x20complex\x20operations,\x0a\x09missed\x20typecheck\x20in\x20subscripting\x20a\x20const\x20string,\x0a\x09permit\x20unsafe.Pointer\x20for\x20inlined\x20functions,\x0a\x09softer\x20criteria\x20for\x20inlinability,\x0a\x09static\x20implements\x20check\x20on\x20typeswitches\x20only\x20applies\x20to\x20concrete\x20case\x20types,\x0a\x09test\x20case\x20for\x20recursive\x20interface\x20bug.\x0a*\x20go/ast:\x20respect\x20ImportSpec.EndPos\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20go/build:\x20add\x20BuildTags\x20to\x20Context,\x20allow\x20!tag.\x0a*\x20go/doc:\x20rewrite\x20and\x20add\x20lots\x20of\x20tests.\x0a*\x20go/parser:\x20use\x20explicit\x20parser.Mode\x20type.\x0a*\x20go/printer,\x20gofmt:\x20respect\x20line\x20breaks\x20in\x20signatures.\x0a*\x20go/scanner:\x20use\x20explicit\x20scanner.Mode\x20type.\x0a*\x20gob:\x20annotate\x20debug.go\x20so\x20it's\x20not\x20normally\x20built,\x0a\x09reduce\x20the\x20maximum\x20message\x20size.\x0a*\x20godoc:\x20log\x20node\x20printing\x20error,\x0a\x09move\x20overview\x20before\x20API\x20TOC,\x0a\x09update\x20metadata\x20upon\x20launch.\x0a*\x20gofix:\x20add\x20-debug\x20flag\x20for\x20quicker\x20diagnosis\x20of\x20internal\x20errors,\x0a\x09handle\x20xml.Unmarshal\x20in\x20xmlapi\x20fix\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09update\x20go1pkgrename\x20for\x20subrepositories.\x0a*\x20goyacc:\x20fix\x20indexing\x20bug\x20when\x20yydebug\x20>=\x202.\x0a*\x20ld:\x20fix\x20Mach-O\x20code\x20signing\x20for\x20non-cgo\x20binaries\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20libmach:\x20cross\x20compiling\x20support\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20math/big:\x20assembly\x20versions\x20of\x20bitLen\x20for\x20x86-64,\x20386,\x20and\x20ARM\x20(thanks\x20David\x20G.\x20Andersen),\x0a\x09return\x20type\x20of\x20bitLen\x20is\x20an\x20int;\x20use\x20MOVL\x20on\x20amd64\x20(thanks\x20David\x20G.\x20Andersen),\x0a\x09add\x20examples\x20for\x20Rat\x20and\x20Int's\x20SetString\x20and\x20Scan\x20methods,\x0a\x09slight\x20improvement\x20to\x20algorithm\x20used\x20for\x20internal\x20bitLen\x20function\x20(thanks\x20David\x20G.\x20Andersen),\x0a\x09test\x20both\x20bitLen\x20and\x20bitLen_g.\x0a*\x20net/http:\x20add\x20Request.RequestURI\x20field,\x0a\x09disabled\x20test\x20for\x20Transport\x20race\x20/\x20deadlock\x20bug,\x0a\x09fix\x20Transport\x20deadlock\x20(thanks\x20Yoshiyuki\x20Kanno),\x0a\x09make\x20ParseForm\x20ignore\x20unknown\x20content\x20types\x20(thanks\x20Roger\x20Peppe),\x0a\x09parse\x20CONNECT\x20requests\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20net/rpc:\x20fix\x20data\x20race\x20in\x20benchmark,\x0a\x09fix\x20race\x20in\x20TestClientWriteError\x20test,\x0a\x09log\x20Call\x20reply\x20discard.\x0a*\x20net:\x20Dial,\x20ListenPacket\x20with\x20\"ip:protocol\"\x20network\x20for\x20raw\x20IP\x20sockets\x20(thanks\x20Mikio\x20Hara),\x0a\x09actually\x20reset\x20deadline\x20when\x20time\x20is\x20zero,\x0a\x09consistent\x20OpError\x20message\x20(thanks\x20Mikio\x20Hara),\x0a\x09fix\x20dialing\x20google\x20test\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20WriteTo\x20fail\x20when\x20UDPConn\x20is\x20already\x20connected\x20(thanks\x20Mikio\x20Hara).\x0a*\x20regexp:\x20remove\x20vestigial\x20Error\x20type.\x0a*\x20runtime:\x20add\x20type\x20algorithms\x20for\x20zero-sized\x20types,\x0a\x09move\x20NumCPU\x20declaration\x20into\x20debug.go.\x0a*\x20spec:\x20function\x20invocation,\x20panic\x20on\x20*nil.\x0a*\x20syscall:\x20add\x20NOTE_*\x20constants\x20on\x20OS\x20X\x20(thanks\x20Robert\x20Figueiredo).\x0a*\x20test:\x20explicitly\x20use\x20variables\x20to\x20avoid\x20gccgo\x20\"not\x20used\"\x20error.\x0a*\x20text/template:\x20add\x20example\x20for\x20Template.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-01-20\">2012-01-20</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20renamed\x20the\x20exp/sql\x20package\x20to\x20database/sql,\x20and\x20moved\x0autf8.String\x20from\x20unicode/utf8\x20to\x20exp/utf8string.\x0a\x0aPackage\x20net's\x20SetTimeout\x20methods\x20were\x20changed\x20to\x20SetDeadline.\x0a\x0aMany\x20functions\x20in\x20package\x20os\x20now\x20take\x20a\x20os.FileMode\x20argument\x20instead\x20of\x20a\x0aplain\x20uint32.\x20An\x20os.ModeSticky\x20constant\x20is\x20also\x20now\x20defined.\x0a\x0aThe\x20meaning\x20of\x20the\x20first\x20buffer\x20element\x20for\x20image.YCbCr\x20has\x20changed\x20to\x20match\x0athe\x20semantics\x20of\x20the\x20other\x20image\x20types\x20like\x20image.RGBA.\x0a\x0aThe\x20NewMD5,\x20NewSHA1\x20and\x20NewSHA256\x20functions\x20in\x20crypto/hmac\x20have\x20been\x0adeprecated.\x20Use\x20New\x20instead,\x20explicitly\x20passing\x20the\x20hash\x20function.\x0a\x0aOther\x20changes:\x0a*\x20buildscripts:\x20move\x20to\x20buildscript\x20directory\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20bytes:\x20add\x20the\x20usual\x20copyright\x20notice\x20to\x20example_test.go\x20(thanks\x20Olivier\x20Duperray).\x0a*\x20cmd/go:\x20remove\x20mentions\x20of\x20'gotest'\x20from\x20the\x20documentation,\x0a\x09skip\x20_obj\x20directories\x20in\x20package\x20scans.\x0a*\x20container/heap:\x20better\x20package\x20documentation.\x0a*\x20crypto/elliptic:\x20add\x20constant-time\x20P224.\x0a*\x20crypto/hmac:\x20Add\x20HMAC-SHA224\x20and\x20HMAC-SHA384/512\x20(thanks\x20Luit\x20van\x20Drongelen),\x0a*\x20crypto/tls:\x20add\x20FreeBSD\x20root\x20certificate\x20location\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20crypto/x509:\x20remove\x20explicit\x20uses\x20of\x20rsa.\x0a*\x20doc:\x20various\x20updates\x20(thanks\x20Jongmin\x20Kim,\x20Scott\x20Lawrence,\x20Shenghou\x20Ma,\x20Stefan\x20Nilsson).\x0a*\x20encoding/json:\x20allow\x20/\x20and\x20%\x20in\x20tag\x20names,\x0a\x09document\x20angle\x20bracket\x20escaping,\x0a\x09fix\x20comments,\x20tweak\x20tests\x20for\x20tag\x20names\x20(thanks\x20Mikio\x20Hara).\x0a*\x20encoding/xml:\x20marshal/unmarshal\x20xml.Name\x20in\x20field\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20exp/inotify:\x20fix\x20data\x20race\x20in\x20linux\x20tests.\x0a*\x20exp/proxy:\x20fix\x20build\x20after\x20URL\x20changes\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20exp/sql:\x20copy\x20when\x20scanning\x20into\x20[]byte\x20by\x20default,\x0a\x09rename\x20NullableString\x20to\x20NullString\x20and\x20allow\x20its\x20use\x20as\x20a\x20parameter.\x0a*\x20exp/ssh:\x20add\x20marshal\x20functions\x20for\x20uint32\x20and\x20uint64\x20types,\x0a\x09handle\x20versions\x20with\x20just\x20'\\n',\x0a\x09rename\x20(some)\x20fields\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20exp/terminal:\x20fix\x20build\x20on\x20non-Linux\x20using\x20Makefiles.\x0a*\x20fmt:\x20enable\x20and\x20fix\x20malloc\x20test,\x0a*\x20gc:\x20don't\x20emit\x20pkgpath\x20for\x20error\x20type,\x0a\x09don't\x20fault\x20on\x20return\x20outside\x20function\x20(thanks\x20Scott\x20Lawrence),\x0a\x09fieldnames\x20in\x20structliterals\x20in\x20exported\x20inlines\x20should\x20not\x20be\x20qualified\x20if\x20they're\x20embedded\x20builtin\x20types,\x0a\x09fix\x20infinite\x20recursion\x20for\x20embedded\x20interfaces,\x0a\x09give\x20esc.c's\x20sink\x20an\x20orig\x20so\x20-mm\x20diagnostics\x20work\x20again,\x0a\x09handle\x20printing\x20of\x20string/arrayrune\x20conversions.\x0a\x09remove\x20redundant\x20code\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20go/build:\x20no\x20back\x20slash\x20in\x20FindTree\x20returned\x20pkg\x20name\x20(thanks\x20Alex\x20Brainman).\x0a*\x20go/doc:\x20collect\x20imports,\x0a\x09don't\x20shadow\x20receiver.\x0a\x09rewrote\x20and\x20completed\x20test\x20framework.\x0a\x09print\x20only\x20one\x20newline\x20between\x20paragraphs\x0a*\x20go/parser:\x20expressions\x20may\x20have\x20comments.\x0a*\x20go/scanner:\x20fix\x20example\x20(thanks\x20Olivier\x20Duperray).\x0a*\x20go/token:\x20replaced\x20Files()\x20with\x20Iterate().\x0a*\x20godoc:\x20add\x20anchors\x20to\x20cmd\x20documentation\x20headings,\x0a\x09remove\x20\"need\x20more\x20packages?\"\x20link,\x0a\x09specify\x20HTML\x20page\x20metadata\x20with\x20a\x20JSON\x20blob,\x0a\x09support\x20canonical\x20Paths\x20in\x20HTML\x20metadata.\x0a*\x20html/template:\x20fix\x20docs\x20after\x20API\x20changes\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20html:\x20in\x20foreign\x20content,\x20check\x20for\x20HTML\x20integration\x20points\x20in\x20breakout.\x0a*\x20image/color:\x20rename\x20modelYCbCr\x20to\x20yCbCrModel\x20(thanks\x20Benny\x20Siegert),\x0a\x09simplify\x20documentation\x20(thanks\x20David\x20Crawshaw).\x0a*\x20image:\x20add\x20PixOffset\x20methods.\x0a*\x20math/rand:\x20decrease\x20test\x20duration\x20in\x20short\x20mode,\x0a\x09document\x20default\x20initial\x20seed\x20for\x20global\x20generator\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20mime:\x20make\x20FormatMediaType\x20take\x20full\x20type\x20for\x20consistency.\x0a*\x20misc/cgo/test:\x20make\x20tests\x20run\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net/http/cgi:\x20increase\x20a\x20flaky\x20test\x20timeout.\x0a*\x20net/http:\x20change\x20test\x20to\x20use\x20override\x20param\x20instead\x20of\x20chan,\x0a\x09log\x20handler\x20panic\x20before\x20closing\x20HTTP\x20connection,\x0a\x09send\x20cookies\x20in\x20jar\x20on\x20redirect\x20(thanks\x20Jeff\x20Hodges),\x0a\x09the\x20documentation\x20should\x20call\x20NewRequest\x20with\x20the\x20right\x20signature\x20(thanks\x20Christoph\x20Hack),\x0a\x09update\x20the\x20Client\x20docs\x20a\x20bit.\x0a*\x20net/url:\x20cleaned\x20up\x20URL\x20interface\x20(v2)\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20net:\x20consistent\x20log\x20format\x20in\x20test\x20(thanks\x20Mikio\x20Hara),\x0a\x09various\x20build\x20fixes\x20(thanks\x20Mikio\x20Hara),\x0a\x09use\x20NewTimer,\x20not\x20NewTicker,\x20in\x20fd_windows.go.\x0a*\x20old/netchan:\x20fix\x20data\x20race\x20on\x20client\x20hashmap.\x0a*\x20os/exec:\x20trivial\x20allocation\x20removal\x20in\x20LookPath\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20os:\x20remove\x20old\x20note\x20about\x20NewSyscallError\x20being\x20special\x20(thanks\x20Alex\x20Brainman),\x0a*\x20path:\x20added\x20examples\x20(thanks\x20Sanjay\x20Menakuru).\x0a*\x20pkg:\x20Add\x20and\x20fix\x20Copyright\x20of\x20\"hand\x20generated\"\x20files\x20(thanks\x20Olivier\x20Duperray),\x0a\x09add\x20missing\x20godoc\x20comments\x20to\x20windows\x20versions\x20(thanks\x20Alex\x20Brainman).\x0a*\x20regexp:\x20add\x20SubexpNames.\x0a*\x20runtime:\x20implement\x20runtime.usleep\x20for\x20FreeBSD/386\x20and\x20amd64\x20(thanks\x20Shenghou\x20Ma),\x0a\x09madvise\x20and\x20SysUnused\x20for\x20Darwin\x20(thanks\x20Dave\x20Cheney).\x0a*\x20sync/atomic:\x20fix\x20data\x20race\x20in\x20tests.\x0a*\x20syscall:\x20add\x20Unix\x20method\x20to\x20TimeSpec,\x20TimeVal,\x0a\x09fix\x20plan9\x20build\x20(thanks\x20Mikio\x20Hara).\x0a*\x20test:\x20change\x20several\x20tests\x20to\x20not\x20print,\x0a\x09fix\x20bug364\x20to\x20actually\x20run,\x0a\x09match\x20gccgo\x20error\x20messages\x20for\x20bug345,\x0a\x09split\x20golden.out\x20into\x20expected\x20output\x20per\x20test.\x0a*\x20testing:\x20do\x20not\x20recover\x20example's\x20panic\x20(thanks\x20Shenghou\x20Ma),\x0a\x09document\x20examples.\x0a*\x20text/template/parse:\x20use\x20human\x20error\x20prints.\x0a*\x20text/template:\x20fix\x20nil\x20error\x20on\x20redefinition.\x0a*\x20time:\x20add\x20Since,\x20which\x20returns\x20the\x20time\x20elapsed\x20since\x20some\x20past\x20time\x20t.\x0a</pre>\x0a\x0a<h2\x20id=\"2012-01-15\">2012-01-15</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20two\x20package\x20changes\x20that\x20may\x20require\x20changes\x20to\x0aclient\x20code.\x0a\x0aThe\x20image\x20package's\x20Tiled\x20type\x20has\x20been\x20renamed\x20to\x20Repeated.\x0a\x0aThe\x20encoding/xml\x20package\x20has\x20been\x20changed\x20to\x20make\x20more\x20idiomatic\x20use\x20of\x20struct\x0atags,\x20among\x20other\x20things.\x20If\x20you\x20use\x20the\x20xml\x20package\x20please\x20read\x20the\x20change\x0adescription\x20to\x20see\x20if\x20your\x20code\x20is\x20affected:\x0a\x09http://code.google.com/p/go/source/detail?r=70e914beb409\x0a\x0aFunction\x20inlining\x20is\x20now\x20enabled\x20by\x20default\x20in\x20the\x20gc\x20compiler.\x0a\x0aOther\x20changes:\x0a*\x20bytes:\x20Buffer\x20read\x20of\x200\x20bytes\x20at\x20EOF\x20shouldn't\x20be\x20an\x20EOF.\x0a*\x20cgo:\x20if\x20value\x20for\x20constant\x20did\x20not\x20parse,\x20get\x20it\x20from\x20DWARF\x20info,\x0a\x09write\x20_cgo_export.h\x20to\x20object\x20directory,\x20not\x20source\x20dir.\x0a*\x20cmd/go:\x20add\x20-p\x20flag\x20for\x20parallelism\x20(like\x20make\x20-j),\x0a\x09add\x20-v\x20flag\x20to\x20build\x20and\x20install,\x0a\x09add\x20...\x20patterns\x20in\x20import\x20path\x20arguments,\x0a\x09fix\x20data\x20race\x20during\x20build,\x0a\x09fix\x20import\x20directory\x20list\x20for\x20compilation,\x0a\x09fix\x20linker\x20arguments,\x0a\x09handle\x20cgo\x20pkg-config\x20pragmas,\x0a\x09handle\x20path\x20to\x20cmd\x20directory,\x0a\x09include\x20test\x20files\x20in\x20fmt,\x20vet,\x20and\x20fix\x20(thanks\x20Sanjay\x20Menakuru),\x0a\x09kill\x20test\x20processes\x20after\x2010\x20minutes,\x0a\x09pass\x20arguments\x20to\x20command\x20for\x20run\x20(thanks\x20Eric\x20Eisner),\x0a\x09rely\x20on\x20exit\x20code\x20to\x20tell\x20if\x20test\x20passed,\x0a\x09use\x20relative\x20paths\x20in\x20go\x20fix,\x20go\x20fmt,\x20go\x20vet\x20output.\x0a*\x20cmd/gofmt:\x20fix\x20simplify.go\x20by\x20running\x20gofmt\x20on\x20cmd/gofmt\x20(thanks\x20Olivier\x20Duperray).\x0a*\x20crypto/openpgp:\x20assorted\x20cleanups,\x0a\x09truncate\x20hashes\x20before\x20checking\x20DSA\x20signatures.\x0a*\x20crypto/tls:\x20improve\x20TLS\x20Client\x20Authentication\x20(thanks\x20Jeff\x20R.\x20Allen),\x0a\x09update\x20generate_cert.go\x20for\x20new\x20time\x20package.\x0a*\x20dashboard:\x20better\x20caching,\x20bug\x20fixes.\x0a*\x20doc:\x20update\x20\"How\x20to\x20Write\x20Go\x20Code\"\x20to\x20use\x20the\x20go\x20tool.\x0a\x09fix\x20broken\x20function\x20codewalk\x20examples.\x0a*\x20encoding/asn1:\x20document\x20support\x20for\x20*big.Int\x20(thanks\x20Florian\x20Weimer).\x0a*\x20encoding/gob:\x20fix\x20panic\x20when\x20decoding\x20[]byte\x20to\x20incompatible\x20slice\x20types\x20(thanks\x20Alexey\x20Borzenkov).\x0a*\x20encoding/json:\x20don't\x20marshal\x20special\x20float\x20values\x20(thanks\x20Evan\x20Shaw).\x0a*\x20encoding/xml:\x20major\x20Go\x201\x20fixup\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20exp/proxy:\x20new\x20package.\x0a*\x20exp/sql:\x20\x20add\x20time.Time\x20support,\x0a\x09close\x20Rows\x20on\x20EOF,\x0a\x09fix\x20potential\x20corruption\x20in\x20QueryRow.Scan\x20into\x20a\x20*[]byte.\x0a*\x20exp/ssh:\x20various\x20small\x20fixes\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/terminal:\x20add\x20SetPrompt\x20and\x20handle\x20large\x20pastes,\x0a\x09add\x20to\x20level\x20Makefile\x20for\x20the\x20(non-Linux?)\x20systems\x20that\x20need\x20it.\x0a*\x20flag:\x20add\x20Duration\x20flag\x20type,\x0a\x09change\x20Set\x20method\x20Value\x20interface\x20to\x20return\x20error\x20instead\x20of\x20bool.\x0a*\x20gc:\x20better\x20errors\x20messages,\x0a\x09avoid\x20false\x20positives\x20when\x20using\x20scalar\x20struct\x20fields\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09closure\x20code\x20gen\x20improvements,\x0a\x09disallow\x20declaration\x20of\x20variables\x20outside\x20package,\x0a\x09fix\x20switch\x20on\x20interface\x20values\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09inlining\x20bug\x20fixes,\x0a\x09improve\x20unsafe.Pointer\x20type-check\x20error\x20messages\x20(thanks\x20Ryan\x20Hitchman),\x0a\x09put\x20limit\x20on\x20size\x20of\x20exported\x20recursive\x20interface\x20(thanks\x20Lorenzo\x20Stoakes),\x0a*\x20go-mode.el:\x20fix\x20syntax\x20highlighting\x20of\x20backticks\x20(thanks\x20Florian\x20Weimer).\x0a*\x20go/ast:\x20remove\x20unnecessary\x20result\x20value\x20from\x20ast.Fprint/Print.\x0a*\x20go/build:\x20allow\x20colon\x20in\x20#cgo\x20flags,\x0a\x09pass\x20CgoLDFLAGS\x20at\x20end\x20of\x20link\x20command.\x0a*\x20go/doc:\x20new\x20API,\x20don't\x20ignore\x20anonymous\x20non-exported\x20fields,\x20initial\x20testing\x20support.\x0a*\x20go/parser:\x20remove\x20unused\x20Parse*\x20functions.\x20Simplified\x20ParseExpr\x20signature.\x0a*\x20go/printer:\x20don't\x20crash\x20if\x20AST\x20contains\x20BadXXX\x20nodes.\x0a*\x20go/scanner:\x2017%\x20faster\x20scanning,\x20remove\x20InsertSemis\x20mode.\x0a*\x20goinstall:\x20use\x20correct\x20checkout\x20URL\x20for\x20Google\x20Code\x20svn\x20repos.\x0a*\x20gotest:\x20make\x20_testmain.go\x20conform\x20to\x20gofmt\x20rules\x20(thanks\x20Benny\x20Siegert).\x0a*\x20goyacc:\x20fix\x20units.y\x20build\x20breakage\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20html/template:\x20reenable\x20testcases\x20and\x20fix\x20mis-escaped\x20sequences\x20(thanks\x20Mike\x20Samuel).\x0a*\x20html:\x20\"in\x20select\x20in\x20table\"\x20insertion\x20mode\x20(thanks\x20Andrew\x20Balholm),\x0a\x09adjust\x20foreign\x20attributes,\x0a\x09foreign\x20element\x20HTML\x20integration\x20points,\x20tag\x20name\x20adjustment,\x0a\x09parse\x20<frameset>\x20inside\x20body\x20(thanks\x20Andrew\x20Balholm),\x0a\x09propagate\x20foreign\x20namespaces\x20only\x20when\x20adding\x20foreign\x20content.\x0a*\x20json:\x20better\x20error\x20messages\x20when\x20the\x20,string\x20option\x20is\x20misused.\x0a*\x20ld:\x20parse\x20but\x20do\x20not\x20implement\x20-X\x20flag.\x0a*\x20log/syslog:\x20add\x20Alert\x20method\x20(thanks\x20Vadim\x20Vygonets).\x0a*\x20make.bash:\x20remove\x20old\x20dregs\x20(thanks\x20Alex\x20Brainman).\x0a*\x20math/big:\x20simplify\x20fast\x20string\x20conversion.\x0a*\x20math:\x20fix\x20typo\x20in\x20all_test.go\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/windows:\x20add\x20src/pkg/runtime/z*\x20files\x20to\x20installation\x20script\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net/http:\x20don't\x20ignore\x20Request.Write's\x20Flush\x20error,\x0a\x09allow\x20cookies\x20with\x20negative\x20Max-Age\x20attribute\x20as\x20these\x20are\x20(thanks\x20Volker\x20Dobler).\x0a*\x20net/textproto:\x20avoid\x20corruption\x20when\x20reading\x20a\x20single\x20header.\x0a*\x20net:\x20add\x20IP-level\x20socket\x20option\x20helpers\x20for\x20Unix\x20variants\x20(thanks\x20Mikio\x20Hara),\x0a\x09fix\x20incorrect\x20mode\x20on\x20ListenIP,\x20ListenUDP\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20use\x20of\x20the\x20kernel\x20state\x20to\x20listen\x20on\x20TCP,\x20Unix\x20(thanks\x20Mikio\x20Hara),\x0a\x09platform-dependent\x20default\x20socket\x20options\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20add\x20ModeCharDevice.\x0a*\x20runtime:\x20add\x20NumCPU,\x0a\x09delete\x20duplicate\x20implementation\x20of\x20pcln\x20walker,\x0a\x09distinct\x20panic\x20message\x20for\x20call\x20of\x20nil\x20func\x20value,\x0a\x09enable\x20runtime.ncpu\x20on\x20FreeBSD\x20(thanks\x20Devon\x20H.\x20O'Dell),\x0a\x09make\x20garbage\x20collector\x20faster\x20by\x20deleting\x20code,\x0a\x09regenerate\x20defs_darwin_{386,amd64}.h\x20(thanks\x20Dave\x20Cheney),\x0a\x09runtime.usleep()\x20bugfix\x20on\x20darwin/amd64\x20and\x20linux/arm\x20(thanks\x20Shenghou\x20Ma).\x0a*\x20spec:\x20pointer\x20comparison\x20for\x20pointers\x20to\x200-sized\x20variables,\x0a\x09change\x20the\x20wording\x20regarding\x20select\x20statement\x20choice.\x0a*\x20strconv:\x20fix\x20round\x20up\x20corner\x20case,\x0a\x09faster\x20FormatFloat(x,\x20*,\x20-1,\x2064)\x20using\x20Grisu3\x20algorithm\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09implement\x20fast\x20path\x20for\x20rounding\x20already\x20short\x20numbers\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09return\x20ErrSyntax\x20when\x20unquoting\x20illegal\x20octal\x20sequences.\x0a*\x20syscall:\x20linux-only\x20support\x20for\x20parent\x20death\x20signal\x20(thanks\x20Albert\x20Strasheim),\x0a\x09make\x20Environ\x20return\x20original\x20order.\x0a*\x20testing:\x20fix\x20defer\x20race,\x0a\x09use\x20flag.Duration\x20for\x20-timeout\x20flag.\x0a*\x20text/template:\x20handle\x20panic\x20values\x20that\x20are\x20not\x20errors\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09for\x20range\x20on\x20a\x20map,\x20sort\x20the\x20keys\x20if\x20feasible.\x0a*\x20time:\x20add\x20ParseDuration,\x0a\x09fix\x20docs\x20for\x20After\x20and\x20NewTicker.\x0a*\x20windows:\x20use\x20ArbitraryUserPointer\x20as\x20TLS\x20slot\x20(thanks\x20Wei\x20Guangjing).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-12-22\">2011-12-22</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20images/ycbcr\x20and\x20testing\x20packages,\x20and\x0achanges\x20to\x20the\x20build\x20system.\x0a\x0aThe\x20types\x20for\x20managing\x20Y'CbCr\x20images\x20in\x20the\x20image/ycbcr\x20have\x20been\x20moved\x20to\x20the\x0aimage\x20and\x20image/color\x20packages.\x20A\x20gofix\x20module\x20will\x20rewrite\x20affected\x20code.\x0a\x0aThe\x20testing\x20package's\x20B\x20type\x20(used\x20when\x20running\x20benchmarks)\x20now\x20has\x20the\x20same\x0amethods\x20as\x20T\x20(used\x20in\x20tests),\x20such\x20as\x20Print,\x20Error,\x20and\x20Fatal.\x0a\x0aThis\x20weekly\x20adds\x20a\x20new\x20command\x20named\x20'go'\x20for\x20building\x20and\x20testing\x20go\x20programs.\x0aFor\x20Go\x201,\x20the\x20go\x20command\x20will\x20replace\x20the\x20makefile-based\x20approach\x20that\x20we\x20have\x0abeen\x20using.\x20It\x20is\x20not\x20yet\x20ready\x20for\x20general\x20use,\x20but\x20all.bash\x20does\x20use\x20it\x20to\x0abuild\x20the\x20tree.\x20If\x20you\x20have\x20problems\x20building\x20the\x20weekly,\x20you\x20can\x20'export\x0aUSE_GO_TOOL=false'\x20before\x20running\x20all.bash\x20to\x20fall\x20back\x20to\x20the\x20makefiles.\x0a\x0aOther\x20changes:\x0a*\x20archive/zip:\x20add\x20SetModTime\x20method\x20to\x20FileHeader.\x0a*\x20build:\x20make\x20use\x20of\x20env\x20(thanks\x20Mikio\x20Hara),\x0a\x09fixes\x20to\x20make\x20\"go\x20install\"\x20work\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20bytes:\x20add\x20two\x20Buffer\x20examples.\x0a*\x20cgo:\x20support\x20export\x20for\x20built-in\x20types\x20(thanks\x20Maxim\x20Pimenov).\x0a*\x20cmd/go:\x20avoid\x20infinite\x20loop\x20with\x20package\x20specific\x20flags\x20(thanks\x20Mikio\x20Hara),\x0a\x09fixes\x20to\x20build\x20standard\x20library,\x0a\x09implement\x20test\x20command,\x0a\x09make\x20sure\x20use\x20of\x20pthread\x20for\x20gcc-4.5\x20and\x20beyond\x20(thanks\x20Mikio\x20Hara),\x0a\x09respect\x20$GCFLAGS,\x0a\x09use\x20spaces\x20consistently\x20in\x20help\x20message\x20(thanks\x20Roger\x20Peppe),\x0a\x09many\x20other\x20improvements.\x0a*\x20codereview:\x20initialize\x20\"found\"\x20in\x20codereview.py\x20(thanks\x20Miki\x20Tebeka).\x0a*\x20crypto/mime/net/time:\x20add\x20netbsd\x20to\x20+build\x20tags\x20(thanks\x20Joel\x20Sing).\x0a*\x20crypto/tls:\x20don't\x20assume\x20an\x20RSA\x20private\x20key\x20in\x20the\x20API.\x0a*\x20crypto/x509:\x20don't\x20crash\x20with\x20nil\x20receiver\x20in\x20accessor\x20method.\x0a*\x20doc/effective_go:\x20discuss\x20redeclaration.\x0a*\x20doc:\x20delete\x20go\x20course\x20notes,\x0a\x09refer\x20to\x20http://build.golang.org/\x20where\x20applicable\x20(thanks\x20Robert\x20Hencke),\x0a\x09suggest\x20code.google.com/p/go\x20instead\x20of\x20go.googlecode.com/hg.\x0a*\x20encoding/binary:\x20add\x20Write\x20and\x20Read\x20examples,\x0a\x09add\x20more\x20benchmarks\x20(thanks\x20Roger\x20Peppe).\x0a*\x20encoding/gob:\x20arrays\x20are\x20zero\x20only\x20if\x20their\x20elements\x20are\x20zero.\x0a*\x20encoding/json:\x20cleanup\x20leftover\x20variables\x20in\x20array\x20decoding\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09examples\x20for\x20Marshal\x20and\x20Unmarshal.\x0a*\x20exp/ssh:\x20rename\x20ClientAuthPublicKey\x20helper\x20ClientAuthKeyring\x20(thanks\x20Dave\x20Cheney),\x0a\x09simplify\x20Stdin/out/errPipe\x20methods\x20(thanks\x20Dave\x20Cheney).\x0a*\x20fmt:\x20speed\x20up\x20floating\x20point\x20print,\x20clean\x20up\x20some\x20code,\x0a\x09make\x20the\x20malloc\x20test\x20check\x20its\x20counts.\x0a*\x20gc:\x20allow\x20use\x20of\x20unsafe.Pointer\x20in\x20generated\x20code,\x0a\x09avoid\x20unsafe\x20in\x20defn\x20of\x20package\x20runtime,\x0a\x09better\x20linenumbers\x20for\x20inlined\x20functions,\x0a\x09better\x20loopdepth\x20analysis\x20for\x20labels,\x0a\x09implement\x20and\x20test\x20\\r\x20in\x20raw\x20strings,\x0a\x09inlining,\x20allow\x20empty\x20bodies,\x20fix\x20_\x20arguments,\x0a\x09omit\x20argument\x20names\x20from\x20function\x20types\x20in\x20error\x20messages.\x0a*\x20go/ast,\x20parser:\x20remember\x20short\x20variable\x20decls.\x20w/\x20correspoding\x20ident\x20objects.\x0a*\x20go/build:\x20add\x20new\x20+build\x20tags\x20'cgo'\x20and\x20'nocgo'.\x0a*\x20go/doc,\x20godoc:\x20move\x20export\x20filtering\x20into\x20go/doc\x0a*\x20go/printer,\x20gofmt:\x20fine\x20tuning\x20of\x20line\x20spacing.\x0a*\x20go/scanner:\x20strip\x20CRs\x20from\x20raw\x20literals.\x0a*\x20gob:\x20isZero\x20for\x20struct\x20values.\x0a*\x20godoc:\x20allow\x20examples\x20for\x20methods\x20(thanks\x20Volker\x20Dobler),\x0a\x09show\x20methods\x20of\x20anonymous\x20fields.\x0a*\x20goinstall:\x20only\x20suggest\x20-fix\x20for\x20bad\x20imports\x20when\x20appropriate.\x0a*\x20govet:\x20add\x20checking\x20for\x20printf\x20verbs,\x0a\x09divide\x20the\x20program\x20into\x20one\x20file\x20per\x20vetting\x20suite.\x0a*\x20html:\x20more\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20json:\x20some\x20tests\x20to\x20demonstrate\x20bad\x20error\x20messages,\x0a\x09use\x20strconv.Append\x20variants\x20to\x20avoid\x20allocations\x20in\x20encoding.\x0a*\x20ld:\x20add\x20support\x20for\x20netbsd\x20signature\x20note\x20section\x20(thanks\x20Joel\x20Sing),\x0a\x09allow\x20for\x20IMAGE_REL_AMD64_ADDR32NB\x20relocation\x20type\x20(thanks\x20Alex\x20Brainman).\x0a*\x20math/big:\x20Rand\x20shouldn't\x20hang\x20if\x20argument\x20is\x20also\x20receiver.\x0a*\x20misc/builder:\x20set\x20default\x20builder\x20host\x20to\x20build.golang.org.\x0a*\x20misc/dashboard:\x20delete\x20old\x20build\x20dashboard\x20code\x20,\x0a\x09improvements\x20and\x20fixes\x20for\x20the\x20go\x20implementation.\x0a*\x20misc/vim:\x20fix\x20go\x20filetype\x20detection\x20(thanks\x20Paul\x20Sbarra).\x0a*\x20net,\x20syscall,\x20os:\x20set\x20CLOEXEC\x20flag\x20on\x20epoll/kqueue\x20descriptor.\x0a*\x20net,\x20syscall:\x20interface\x20address\x20and\x20mask\x20(thanks\x20Mikio\x20Hara).\x0a*\x20net/http:\x20added\x20interface\x20for\x20a\x20cookie\x20jar\x20(thanks\x20Volker\x20Dobler),\x0a\x09test\x20fixes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net:\x20add\x20DialTimeout,\x0a\x09sort\x20Makefile\x20entries\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os,\x20syscall:\x20beginnings\x20of\x20NetBSD\x20support\x20(thanks\x20Christopher\x20Nielsen).\x0a*\x20os/exec:\x20add\x20test\x20to\x20verify\x20net\x20package's\x20epoll\x20fd\x20doesn't\x20go\x20to\x20child,\x0a\x09disable\x20the\x20ExtraFiles\x20test\x20on\x20darwin.\x0a*\x20os:\x20don't\x20trust\x20O_CLOEXEC\x20on\x20OS\x20X,\x0a\x09make\x20sure\x20Remove\x20returns\x20correct\x20error\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20path,\x20path/filepath:\x20add\x20Dir\x20to\x20complement\x20Base.\x0a*\x20path/filepath.Rel:\x20document\x20that\x20the\x20returned\x20path\x20is\x20always\x20relative.\x0a*\x20runtime:\x20don't\x20panic\x20on\x20SIGILL,\x20just\x20crash.\x0a*\x20spec:\x20be\x20precise\x20about\x20newlines.\x0a*\x20sql:\x20add\x20Rows.Columns.\x0a*\x20strconv:\x20fix\x20bug\x20in\x20extended-float\x20based\x20conversion,\x0a\x09implement\x20faster\x20parsing\x20of\x20decimal\x20numbers,\x20and\x0a\x09reduce\x20buffer\x20size\x20for\x20multi-precision\x20decimals\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20syscall:\x20regenerate\x20z-files\x20for\x20linux/arm\x20(thanks\x20Mikio\x20Hara),\x0a\x09sort\x20Makefile,\x20mkall.sh\x20and\x20mkerrors.sh\x20entries\x20(thanks\x20Mikio\x20Hara).\x0a*\x20test/bench/go1:\x20first\x20draft\x20of\x20Go\x201\x20benchmark\x20suite.\x0a*\x20testing:\x20compare\x20Log\x20to\x20Println\x20(thanks\x20Robert\x20Hencke),\x0a\x09make\x20signalling\x20safer\x20for\x20parallel\x20tests.\x0a*\x20text/template:\x20better\x20error\x20message\x20for\x20empty\x20templates,\x0a\x09fix\x20handing\x20of\x20nil\x20arguments\x20to\x20functions\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20time:\x20add\x20JSON\x20marshaler\x20for\x20Time\x20(thanks\x20Robert\x20Hencke),\x0a\x09new\x20AddDate\x20method\x20(thanks\x20Roger\x20Peppe).\x0a*\x20various:\x20use\x20$GCFLAGS\x20and\x20$GCIMPORTS\x20like\x20Make\x20does\x20(thanks\x20Maxim\x20Pimenov).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-12-14\">2011-12-14</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20language\x20changes\x20and\x20changes\x20to\x20goinstall\x20and\x20gofmt.\x0a\x0aEquality\x20and\x20inequality\x20(==\x20and\x20!=)\x20are\x20now\x20defined\x20for\x20struct\x20and\x20array\x0avalues,\x20respectively,\x20provided\x20the\x20elements\x20of\x20the\x20data\x20structures\x20can\x0athemselves\x20be\x20compared.\x20See\x20the\x20Go\x201\x20release\x20notes\x20for\x20the\x20details:\x0a\x09http://weekly.golang.org/doc/go1.html#equality\x0a\x0aThe\x20rune\x20type\x20is\x20now\x20an\x20alias\x20for\x20int32\x20and\x20character\x20literals\x20have\x20the\x20default\x0atype\x20of\x20rune.\x20Code\x20that\x20uses\x20int\x20where\x20it\x20should\x20use\x20rune\x20will\x20break.\x20\x0aSee\x20the\x20Go\x201\x20release\x20notes\x20for\x20the\x20details:\x0a\x09http://weekly.golang.org/doc/go1.html#rune\x0a\x0aGoinstall\x20now\x20expects\x20Google\x20Code\x20import\x20paths\x20to\x20be\x20of\x20the\x20form:\x0a\x09\"code.google.com/p/go-tour/tree\"\x0aIt\x20will\x20reject\x20imports\x20in\x20the\x20old\x20style\x20\"go-tour.googlecode.com/hg/tree\".\x0aThere\x20is\x20a\x20gofix\x20module\x20to\x20rename\x20such\x20imports.\x0aUse\x20goinstall\x20-fix\x20to\x20update\x20broken\x20packages.\x0a\x0aGofmt's\x20flags\x20have\x20been\x20modified\x20slightly.\x0aThe\x20-tabintent\x20flag\x20has\x20been\x20renamed\x20-tabs.\x0aThe\x20-spaces\x20flag\x20has\x20been\x20removed.\x0a\x0aOther\x20changes:\x0a*\x205c,\x206c,\x208c:\x20support\x2064-bit\x20switch\x20value\x20(thanks\x20Anthony\x20Martin).\x0a*\x208c:\x20handle\x2064-bit\x20switch\x20value.\x0a*\x20archive/tar:\x20use\x20struct\x20comparison\x20not\x20DeepEqual\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20archive/zip:\x20make\x20zip\x20understand\x20os.FileMode\x20(thanks\x20Roger\x20Peppe).\x0a*\x20bufio:\x20make\x20the\x20minimum\x20read\x20buffer\x20size\x2016\x20bytes.\x0a*\x20build:\x20disable\x20cgo\x20on\x20Windows/amd64,\x0a\x09regularize\x20packages\x20so\x20they\x20may\x20be\x20built\x20without\x20Makefiles.\x0a*\x20bytes:\x20faster\x20Count,\x20Index,\x20Equal.\x0a*\x20cgo:\x20add\x20basic\x20gccgo\x20support\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20codereview:\x20fix\x20path\x20slash\x20issue\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20compress/flate:\x20fix\x20out\x20of\x20bounds\x20error.\x0a*\x20contribute.html:\x20do\x20not\x20fill\x20in\x20the\x20reviewer\x20field\x20(thanks\x20Florian\x20Weimer).\x0a*\x20crypto/aes:\x20made\x20faster\x20by\x20eliminating\x20some\x20indirection\x20(thanks\x20Taru\x20Karttunen).\x0a*\x20crypto/dsa:\x20don't\x20truncate\x20input\x20hashes.\x0a*\x20doc/go_tutorial:\x20make\x20clear\x20the\x20file\x20example\x20is\x20Unix-specific.\x0a*\x20doc:\x20add\x20Defer,\x20Panic,\x20and\x20Recover\x20article,\x0a\x09add\x20Error\x20Handling\x20article,\x0a\x09add\x20Go\x201\x20release\x20notes\x20document.\x0a*\x20encoding/gob:\x20better\x20error\x20messages\x20when\x20types\x20mismatch.\x0a*\x20env.bash:\x20export\x20CGO_ENABLED\x20so\x20cgo\x20tests\x20run\x20(thanks\x20Alex\x20Brainman).\x0a*\x20exp/sql:\x20simplify\x20some\x20string\x20conversions.\x0a*\x20exp/ssh:\x20Wait\x20returns\x20an\x20*ExitError\x20(thanks\x20Gustav\x20Paul).\x0a*\x20exp/ssh:\x20improve\x20client\x20channel\x20close\x20behavior\x20(thanks\x20Dave\x20Cheney).\x0a*\x20fmt:\x20don't\x20recur\x20if\x20String\x20method\x20(etc.)\x20misbehaves.\x0a*\x20gc:\x20better\x20error\x20messages,\x0a\x09inlining\x20(disabled\x20without\x20-l),\x0a\x09many\x20bug\x20fixes\x20(thanks\x20Lucio\x20De\x20Re\x20and\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20go/printer,\x20godoc:\x20print\x20comments\x20in\x20example\x20code.\x0a*\x20go:\x20implement\x20doc,\x20fmt,\x20fix,\x20list,\x20vet,\x20build,\x20and\x20install.\x0a*\x20gobuilder:\x20goinstall\x20packages\x20after\x20building\x20go\x20tree.\x0a*\x20godoc:\x20&lt;pre&gt;\x20must\x20not\x20occur\x20inside\x20&lt;p&gt;\x20(thanks\x20Olivier\x20Duperray),\x0a\x09added\x20an\x20opensearch\x20description\x20document\x20(thanks\x20Christoph\x20Hack),\x0a\x09text\x20wrapping.\x0a*\x20gofix:\x20add\x20httputil\x20fix\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20gotest:\x20use\x20go/build\x20more\x20(thanks\x20Robert\x20Hencke).\x0a*\x20gzip:\x20convert\x20between\x20Latin-1\x20and\x20Unicode\x20(thanks\x20Vadim\x20Vygonets).\x0a*\x20html/template:\x20define\x20the\x20FuncMap\x20type\x20locally.\x0a*\x20html:\x20a\x20first\x20step\x20at\x20parsing\x20foreign\x20content\x20(MathML,\x20SVG),\x0a\x09more\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20http:\x20close\x20connection\x20after\x20printing\x20panic\x20stack\x20trace\x20(thanks\x20Roger\x20Peppe),\x0a\x09fix\x20failing\x20Transport\x20HEAD\x20request\x20with\x20gzip-looking\x20response.\x0a*\x20json:\x20treat\x20renamed\x20byte\x20slices\x20the\x20same\x20as\x20[]byte.\x0a*\x20ld:\x20first\x20pass\x20at\x20linker\x20support\x20for\x20NetBSD\x20binaries\x20(thanks\x20Christopher\x20Nielsen),\x0a\x09fix\x20memory\x20leaks\x20(thanks\x20Scott\x20Lawrence),\x0a\x09increase\x20default\x20stack\x20size\x20on\x20Windows\x20for\x20cgo.\x0a*\x20math:\x20delete\x20non-Sqrt-based\x20Hypot,\x0a\x09implement,\x20document,\x20and\x20fix\x20special\x20cases\x20(thanks\x20Charles\x20L.\x20Dorian),\x0a*\x20misc/benchcmp:\x20don't\x20require\x20\"Benchmark\"\x20at\x20beginning\x20of\x20line.\x0a*\x20misc/osx:\x20rename\x20profile.go\x20to\x20profile_go\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20net/http:\x20fix\x20trivial\x20example\x20server\x20(thanks\x20Olivier\x20Duperray),\x0a\x09net/http:\x20make\x20test\x20remove\x20temporary\x20file\x20and\x20directory.\x0a*\x20net/smtp:\x20add\x20CRAM-MD5\x20authentication\x20(thanks\x20Vadim\x20Vygonets).\x0a*\x20reflect:\x20fix\x20Slice\x20cap\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20regexp:\x20performance\x20improvements;\x20avoid\x20allocation\x20of\x20input\x20interface.\x0a*\x20runtime:\x20bump\x20gc\x20'extra\x20bytes'\x20check\x20(thanks\x20Christopher\x20Wedgwood),\x0a\x09madvise\x20and\x20SysUnused\x20for\x20Linux\x20(thanks\x20S\xc3\xa9bastien\x20Paolacci),\x0a\x09make\x20gc_test\x20test\x20extra\x20allocated\x20space,\x20not\x20total\x20space,\x0a\x09support\x20for\x20NetBSD\x20(thanks\x20Christopher\x20Nielsen).\x0a*\x20spec:\x20adjust\x20complex\x20constant\x20example\x20(thanks\x20Robert\x20Hencke),\x0a\x09values\x20of\x20underlying\x20type\x20uintptr\x20can\x20be\x20converted\x20to\x20unsafe.Pointer,\x0a\x09var\x20x\x20=\x20'a'\x20defaults\x20to\x20type\x20rune.\x0a*\x20strconv:\x20include\x20package\x20and\x20function\x20name\x20in\x20error\x20strings,\x0a\x09make\x20QuoteRune\x20etc.\x20take\x20a\x20rune\x20argument,\x0a\x09some\x20performance\x20improvements.\x0a*\x20syscall:\x20add\x20constants\x20for\x20flock()\x20system\x20call\x20under\x20Linux,\x0a\x09regenerate\x20z-files\x20for\x20darwin,\x20freebsd\x20(thanks\x20Mikio\x20Hara),\x0a\x09regenerate\x20z-files\x20for\x20openbsd,\x0a\x09return\x20error,\x20not\x20uintptr,\x20when\x20function\x20returns\x20error\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/bench:\x20move\x20to\x20test/bench/shootout.\x0a*\x20test/garbage:\x20move\x20to\x20test/bench/garbage.\x0a*\x20test:\x20make\x20array\x20smaller\x20in\x20nilptr\x20test.\x0a*\x20time:\x20allow\x20sleep\x20tests\x20to\x20run\x20for\x20200%\x20too\x20long,\x0a\x09fix\x20Time.Add\x20(thanks\x20Hector\x20Chu),\x0a\x09fix\x20daysIn\x20for\x20December\x20(thanks\x20Peter\x20Mundy),\x0a\x09gob\x20marshaler\x20for\x20Time\x20(thanks\x20Robert\x20Hencke),\x0a\x09use\x20Duration\x20for\x20AfterFunc.\x0a*\x20various:\x20a\x20grab-bag\x20of\x20time.Duration\x20cleanups.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-12-06\">2011-12-06</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20a\x20language\x20change\x20and\x20changes\x20to\x20the\x20strconv\x20and\x20go/doc\x0apackages.\x20The\x20package\x20changes\x20require\x20changes\x20to\x20client\x20code.\x0aThe\x20language\x20change\x20is\x20backwards-compatible.\x0a\x0aType\x20elision\x20in\x20arrays,\x20slices,\x20or\x20maps\x20of\x20composite\x20literals\x20has\x20been\x0aextended\x20to\x20include\x20pointers\x20to\x20composite\x20literals.\x20Code\x20like\x20this\x0a\x09var\x20t\x20=\x20[]*T{&amp;T{},\x20&amp;T{}}\x0amay\x20now\x20be\x20written\x20as\x0a\x09var\x20t\x20=\x20[]*T{{},\x20{}}\x0aYou\x20can\x20use\x20gofmt\x20-s\x20to\x20simplify\x20such\x20code.\x0a\x0aThe\x20strconv\x20package\x20has\x20been\x20given\x20a\x20more\x20idiomatic\x20and\x20efficient\x20interface.\x0aClient\x20code\x20can\x20be\x20updated\x20with\x20gofix.\x20See\x20the\x20docs\x20for\x20the\x20details:\x0a\x09http://weekly.golang.org/pkg/strconv/\x0a\x0aThe\x20go/doc\x20package's\x20ToHTML\x20function\x20now\x20takes\x20a\x20[]byte\x20argument\x20instead\x20of\x20a\x0astring.\x0a\x0aOther\x20changes:\x0a*\x20crypto/aes:\x20eliminate\x20some\x20bounds\x20checking\x20and\x20truncation\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20crypto/x509:\x20if\x20a\x20parent\x20cert\x20has\x20a\x20raw\x20subject,\x20use\x20it.\x0a*\x20encoding/gob:\x20don't\x20send\x20type\x20info\x20for\x20unexported\x20fields.\x0a*\x20exp/ssh:\x20allow\x20for\x20msgUserAuthBanner\x20during\x20authentication\x20(thanks\x20Gustav\x20Paul).\x0a*\x20fmt:\x20benchmark\x20floating\x20point,\x0a\x09only\x20use\x20Stringer\x20or\x20Error\x20for\x20strings.\x0a*\x20gc:\x20changes\x20in\x20export\x20format\x20in\x20preparation\x20of\x20inlining,\x0a\x09disallow\x20map/func\x20equality\x20via\x20interface\x20comparison,\x0a\x09use\x20gofmt\x20spacing\x20when\x20printing\x20map\x20type.\x0a*\x20go/doc:\x20exclude\x20lines\x20ending\x20in\x20':'\x20from\x20possible\x20headings.\x0a*\x20gobuilder:\x20-commit\x20mode\x20for\x20packages,\x0a\x09cripple\x20-package\x20mode\x20temporarily,\x0a\x09use\x20new\x20dashboard\x20protocol.\x0a*\x20godoc:\x20improved\x20output\x20of\x20examples\x20in\x20html\x20(thanks\x20Volker\x20Dobler).\x0a*\x20gofmt:\x20handle\x20&T\x20in\x20composite\x20literal\x20simplify.\x0a*\x20goinstall:\x20honour\x20-install=false\x20flag\x20when\x20-make=true.\x0a*\x20hash:\x20rewrite\x20comment\x20on\x20Hash.Sum\x20method.\x0a*\x20html:\x20more\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20image:\x20avoid\x20func\x20comparison\x20during\x20ColorModel\x20comparison.\x0a*\x20math:\x20add\x20special-cases\x20comments\x20to\x20Sinh\x20and\x20Tanh\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/dashboard:\x20further\x20implementation\x20work.\x0a*\x20net,\x20syscall:\x20remove\x20BindToDevice\x20from\x20UDPConn,\x20IPConn\x20(thanks\x20Mikio\x20Hara).\x0a*\x20net/mail:\x20correctly\x20compare\x20parsed\x20times\x20in\x20the\x20test.\x0a*\x20os/exec:\x20make\x20LookPath\x20always\x20search\x20CWD\x20under\x20Windows\x20(thanks\x20Benny\x20Siegert).\x0a*\x20runtime:\x20prep\x20for\x20type-specific\x20algorithms.\x0a*\x20strconv:\x2034%\x20to\x2063%\x20faster\x20conversions.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-12-02\">2011-12-02</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20hash\x20package\x20and\x20a\x20gofix\x20for\x20the\x0atime\x20and\x20os.FileInfo\x20changes\x20in\x20the\x20last\x20snapshot.\x0a\x0aThe\x20hash.Hash's\x20Sum\x20method\x20has\x20been\x20given\x20a\x20[]byte\x20argument,\x0apermitting\x20the\x20user\x20to\x20append\x20the\x20hash\x20to\x20an\x20existing\x20byte\x20slice.\x0aExisting\x20code\x20that\x20uses\x20Sum\x20can\x20pass\x20nil\x20as\x20the\x20argument.\x0aGofix\x20will\x20make\x20this\x20change\x20automatically.\x0a\x0aOther\x20changes:\x0a*\x20crypto/tls:\x20cleanup\x20certificate\x20load\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20exp/ssh:\x20add\x20Std{in,out,err}Pipe\x20methods\x20to\x20Session\x20(thanks\x20Dave\x20Cheney).\x0a*\x20dashboard:\x20don't\x20choke\x20on\x20weird\x20builder\x20names.\x0a*\x20exp/ssh:\x20export\x20type\x20signal,\x20now\x20Signal\x20(thanks\x20Gustav\x20Paul).\x0a*\x20os:\x20add\x20ModeType\x20constant\x20to\x20mask\x20file\x20type\x20bits\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20text/template:\x20replace\x20Add\x20with\x20AddParseTree.\x0a*\x20go/doc:\x20detect\x20headings\x20and\x20format\x20them\x20in\x20html\x20(thanks\x20Volker\x20Dobler).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-12-01\">2011-12-01</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20time,\x20os,\x20and\x20text/template\x0apackages.\x20The\x20changes\x20to\x20the\x20time\x20and\x20os\x20packages\x20are\x20significant\x20and\x20related.\x0aCode\x20that\x20uses\x20package\x20time,\x20package\x20text/template,\x20or\x20package\x20os's\x20FileInfo\x0atype\x20will\x20require\x20changes.\x0a\x0aIn\x20package\x20time,\x20there\x20is\x20now\x20one\x20type\x20-\x20time.Time\x20-\x20to\x20represent\x20times.\x0aNote\x20that\x20time.Time\x20should\x20be\x20used\x20as\x20a\x20value,\x20in\x20contrast\x20to\x20old\x20code\x0awhich\x20typically\x20used\x20a\x20*time.Time,\x20a\x20pointer\x20to\x20a\x20large\x20struct.\x20\x20(Drop\x20the\x20*.)\x0aAny\x20function\x20that\x20previously\x20accepted\x20a\x20*time.Time,\x20an\x20int64\x0anumber\x20of\x20seconds\x20since\x201970,\x20or\x20an\x20int64\x20number\x20of\x20nanoseconds\x0asince\x201970\x20should\x20now\x20accept\x20a\x20time.Time.\x20\x20Especially\x20as\x20a\x20replacement\x0afor\x20the\x20int64s,\x20the\x20type\x20is\x20good\x20documentation\x20about\x20the\x20meaning\x20of\x0aits\x20value.\x0a\x0aWhether\x20you\x20were\x20previously\x20calling\x20time.Seconds,\x20time.Nanoseconds,\x0atime.LocalTime,\x20or\x20time.UTC,\x20the\x20replacement\x20is\x20the\x20new\x20function\x0atime.Now.\x0a\x0aIf\x20you\x20previously\x20wrote\x20code\x20like:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20t0\x20:=\x20time.Nanoseconds()\x0a\x20\x20\x20\x20\x20\x20\x20myFunction()\x0a\x20\x20\x20\x20\x20\x20\x20t1\x20:=\x20time.Nanoseconds()\x0a\x20\x20\x20\x20\x20\x20\x20delta\x20:=\x20t1\x20-\x20t0\x0a\x20\x20\x20\x20\x20\x20\x20fmt.Printf(\"That\x20took\x20%.2f\x20seconds\\n\",\x20float64(t1-t0)/1e9)\x0a\x0ayou\x20can\x20now\x20write:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20t0\x20:=\x20time.Now()\x0a\x20\x20\x20\x20\x20\x20\x20myFunction()\x0a\x20\x20\x20\x20\x20\x20\x20t1\x20:=\x20time.Now()\x0a\x20\x20\x20\x20\x20\x20\x20delta\x20:=\x20t1.Sub(t0)\x0a\x20\x20\x20\x20\x20\x20\x20fmt.Printf(\"That\x20took\x20%s\\n\",\x20delta)\x0a\x0aIn\x20this\x20snippet,\x20the\x20variable\x20delta\x20is\x20of\x20the\x20new\x20type\x20time.Duration,\x20the\x0areplacement\x20for\x20the\x20many\x20int64\x20parameters\x20that\x20were\x20nanosecond\x0acounts\x20(but\x20not\x20since\x201970).\x0a\x0aGofix\x20can\x20do\x20the\x20above\x20conversions\x20and\x20some\x20others,\x20but\x20it\x20does\x20not\x0arewrite\x20explicit\x20int64\x20types\x20as\x20time.Time.\x20It\x20is\x20very\x20likely\x20that\x20you\x20will\x0aneed\x20to\x20edit\x20your\x20program\x20to\x20change\x20these\x20types\x20after\x20running\x20gofix.\x0aAs\x20always,\x20be\x20sure\x20to\x20read\x20the\x20changes\x20that\x20gofix\x20makes\x20using\x20your\x0aversion\x20control\x20system's\x20diff\x20feature.\x0a\x0aSee\x20http://weekly.golang.org/pkg/time/\x20for\x20details.\x0a\x0aIn\x20package\x20os,\x20the\x20FileInfo\x20struct\x20is\x20replaced\x20by\x20a\x20FileInfo\x20interface,\x0aadmitting\x20implementations\x20by\x20code\x20beyond\x20the\x20operating\x20system.\x0aCode\x20that\x20refers\x20to\x20*os.FileInfo\x20(a\x20pointer\x20to\x20the\x20old\x20struct)\x20should\x0ainstead\x20refer\x20to\x20os.FileInfo\x20(the\x20new\x20interface).\x0aThe\x20interface\x20has\x20just\x20a\x20few\x20methods:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20type\x20FileInfo\x20interface\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Name()\x20string\x20\x20\x20\x20\x20\x20\x20//\x20base\x20name\x20of\x20the\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Size()\x20int64\x20\x20\x20\x20\x20\x20\x20\x20//\x20length\x20in\x20bytes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Mode()\x20FileMode\x20\x20\x20\x20\x20//\x20file\x20mode\x20bits\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ModTime()\x20time.Time\x20//\x20modification\x20time\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20IsDir()\x20bool\x20\x20\x20\x20\x20\x20\x20\x20//\x20abbreviation\x20for\x20Mode().IsDir()\x0a\x20\x20\x20\x20\x20\x20\x20}\x0a\x0aIf\x20you\x20need\x20access\x20to\x20the\x20underlying\x20stat_t\x20provided\x20by\x20the\x20operating\x0asystem\x20kernel,\x20you\x20can\x20access\x20it\x20by\x20assuming\x20that\x20the\x20FileInfo\x20you\x20are\x0aholding\x20is\x20actually\x20an\x20*os.FileStat,\x20and\x20that\x20it's\x20Sys\x20field\x20is\x20actually\x20a\x0a*syscall.Stat_t,\x20as\x20in:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20dev\x20:=\x20fi.(*os.FileStat).Sys.(*syscall.Stat_t).Dev\x0a\x0aOf\x20course,\x20this\x20is\x20not\x20necessarily\x20portable\x20across\x20different\x20operating\x0asystems.\x0a\x0aGofix\x20will\x20take\x20care\x20of\x20rewriting\x20*os.FileInfo\x20to\x20os.FileInfo\x20for\x20you,\x0aand\x20it\x20will\x20also\x20rewrite\x20expressions\x20like\x20fi.Name\x20into\x20calls\x20like\x20fi.Name().\x0a\x0aSee\x20http://weekly.golang.org/pkg/os/#FileInfo\x20for\x20details.\x0a\x0aThe\x20template\x20package\x20has\x20been\x20changed\x20to\x20export\x20a\x20new,\x20simpler\x20API.\x0aThe\x20Set\x20type\x20is\x20gone.\x20Instead,\x20templates\x20are\x20automatically\x20associated\x20by\x0abeing\x20parsed\x20together;\x20nested\x20definitions\x20implicitly\x20create\x20associations.\x0aOnly\x20associated\x20templates\x20can\x20invoke\x20one\x20another.\x0aThis\x20approach\x20dramatically\x20reduces\x20the\x20breadth\x20of\x20the\x20construction\x20API.\x0aThe\x20html/template\x20package\x20has\x20been\x20updated\x20also.\x0aThere's\x20a\x20gofix\x20for\x20the\x20simplest\x20and\x20most\x20common\x20uses\x20of\x20the\x20old\x20API.\x0aCode\x20that\x20doesn't\x20mention\x20the\x20Set\x20type\x20is\x20likely\x20to\x20work\x20after\x20running\x20gofix;\x0acode\x20that\x20uses\x20Set\x20will\x20need\x20to\x20be\x20updated\x20by\x20hand.\x0aThe\x20template\x20definition\x20language\x20itself\x20is\x20unchanged.\x0a\x0aSee\x20http://weekly.golang.org/pkg/text/template/\x20for\x20details.\x0a\x0a\x0aOther\x20changes:\x0a*\x20cgo:\x20add\x20support\x20for\x20callbacks\x20from\x20dynamic\x20libraries.\x0a*\x20codereview:\x20gofmt\x20check\x20for\x20non-src/\x20files\x20(thanks\x20David\x20Crawshaw).\x0a*\x20crypto/openpgp/packet:\x20fix\x20private\x20key\x20checksum.\x0a*\x20crypto/tls:\x20add\x20openbsd\x20root\x20certificate\x20location,\x0a\x09don't\x20rely\x20on\x20map\x20iteration\x20order.\x0a*\x20crypto/x509,\x20crypto/tls:\x20support\x20PKCS#8\x20private\x20keys.\x0a*\x20dashboard:\x20start\x20of\x20reimplementation\x20in\x20Go\x20for\x20App\x20Engine.\x0a*\x20encoding/xml:\x20fix\x20copy\x20bug.\x0a*\x20exp/gui:\x20move\x20exp/gui\x20and\x20exp/gui/x11\x20to\x20http://code.google.com/p/x-go-binding\x0a*\x20exp/ssh:\x20various\x20improvements\x20(thanks\x20Dave\x20Cheney\x20and\x20Gustav\x20Paul).\x0a*\x20filepath/path:\x20fix\x20Rel\x20buffer\x20sizing\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20gc:\x20fix\x20Nconv\x20bug\x20(thanks\x20R\xc3\xa9my\x20Oudompheng)\x20and\x20other\x20fixes.\x0a*\x20go/printer,\x20gofmt:\x20performance\x20improvements.\x0a*\x20gofix:\x20test\x20and\x20fix\x20missorted\x20renames.\x0a*\x20goinstall:\x20add\x20-fix\x20flag\x20to\x20run\x20gofix\x20on\x20packages\x20on\x20build\x20failure,\x0a\x09better\x20error\x20reporting,\x0a\x09don't\x20hit\x20network\x20unless\x20a\x20checkout\x20or\x20update\x20is\x20required,\x0a\x09support\x20Google\x20Code\x20sub-repositories.\x0a*\x20html:\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20http:\x20fix\x20sniffing\x20bug\x20causing\x20short\x20writes.\x0a*\x20json:\x20speed\x20up\x20encoding,\x20caching\x20reflect\x20calls.\x0a*\x20ld:\x20align\x20ELF\x20data\x20sections.\x0a*\x20math/big:\x20fix\x20destination\x20leak\x20into\x20result\x20value\x20(thanks\x20Roger\x20Peppe),\x0a\x09use\x20recursive\x20subdivision\x20for\x20significant\x20speedup.\x0a*\x20math:\x20faster\x20Cbrt\x20and\x20Sincos\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/osx:\x20scripts\x20to\x20make\x20OS\x20X\x20package\x20and\x20disk\x20image\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20os:\x20fail\x20if\x20Open(\"\")\x20is\x20called\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime:\x20make\x20sure\x20stack\x20is\x2016-byte\x20aligned\x20on\x20syscall\x20(thanks\x20Alex\x20Brainman).\x0a*\x20spec,\x20gc:\x20allow\x20direct\x20conversion\x20between\x20string\x20and\x20named\x20[]byte,\x20[]rune.\x0a*\x20sql:\x20add\x20Tx.Stmt\x20to\x20use\x20an\x20existing\x20prepared\x20stmt\x20in\x20a\x20transaction,\x0a\x09more\x20driver\x20docs\x20&\x20tests;\x20no\x20functional\x20changes.\x0a*\x20strings:\x20add\x20ContainsAny\x20and\x20ContainsRune\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20syscall:\x20add\x20SUSv3\x20RLIMIT/RUSAGE\x20constants\x20(thanks\x20S\xc3\xa9bastien\x20Paolacci),\x0a\x09fix\x20openbsd\x20sysctl\x20hostname/domainname\x20workaround,\x0a\x09implement\x20Syscall15\x20(thanks\x20Alex\x20Brainman).\x0a*\x20time:\x20fix\x20Timer\x20stop.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-11-18\">2011-11-18</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20some\x20language\x20changes.\x0a\x0aMap\x20and\x20function\x20value\x20comparisons\x20are\x20now\x20disallowed\x20(except\x20for\x20comparison\x0awith\x20nil)\x20as\x20per\x20the\x20Go\x201\x20plan.\x20Function\x20equality\x20was\x20problematic\x20in\x20some\x0acontexts\x20and\x20map\x20equality\x20compares\x20pointers,\x20not\x20the\x20maps'\x20content.\x0a\x0aAs\x20an\x20experiment,\x20structs\x20are\x20now\x20allowed\x20to\x20be\x20copied\x20even\x20if\x20they\x20contain\x0aunexported\x20fields.\x20This\x20gives\x20packages\x20the\x20ability\x20to\x20return\x20opaque\x20values\x20in\x0atheir\x20APIs.\x0a\x0aOther\x20changes:\x0a*\x206a,\x208a:\x20allow\x20$(-1)\x20for\x20consistency\x20with\x20$1,\x20$(1),\x20$-1.\x0a*\x206l:\x20code\x20generation\x20fixes\x20(thanks\x20Micha\xc5\x82\x20Derkacz).\x0a*\x20build:\x20fix\x20check\x20for\x20selinux\x20allow_execstack\x20on\x20Fedora\x20(thanks\x20Bobby\x20Powers).\x0a*\x20builtin:\x20document\x20delete.\x0a*\x20cgo:\x20don't\x20panic\x20on\x20undeclared\x20enums/structs\x20(thanks\x20R\xc3\xa9my\x20Oudompheng),\x0a\x09fix\x20g0\x20stack\x20guard.\x0a*\x20crypto/tls:\x20fix\x20handshake\x20message\x20test.\x0a*\x20crypto:\x20update\x20incorrect\x20references\x20to\x20Cipher\x20interface;\x20should\x20be\x20Block.\x0a*\x20doc:\x20clean\x20ups,\x20additions,\x20and\x20fixes\x20to\x20several\x20documents.\x0a*\x20doc/install:\x20add\x20openbsd\x20(thanks\x20Joel\x20Sing!).\x0a*\x20doc:\x20link\x20to\x20Chinese\x20translation\x20of\x20A\x20Tour\x20of\x20Go.\x0a*\x20encoding/json:\x20add\x20marshal/unmarshal\x20benchmark,\x0a\x09decode\x20[]\x20as\x20empty\x20slice,\x20not\x20nil\x20slice,\x0a\x09make\x20BenchmarkSkipValue\x20more\x20consistent.\x0a*\x20env.bash:\x20check\x20for\x20presence\x20of\x20make/gmake\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20exp/sql:\x20NumInput()\x20allow\x20-1\x20to\x20ignore\x20checking\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x09add\x20DB.Close,\x20fix\x20bugs,\x20remove\x20Execer\x20on\x20Driver\x20(only\x20Conn),\x0a\x09document\x20that\x20for\x20drivers,\x20io.EOF\x20means\x20no\x20more\x20rows,\x0a\x09add\x20client\x20side\x20support\x20for\x20publickey\x20auth\x20(thanks\x20Dave\x20Cheney),\x0a\x09add\x20direct-tcpip\x20client\x20support\x20(thanks\x20Dave\x20Cheney),\x0a\x09change\x20test\x20listen\x20address,\x20also\x20exit\x20test\x20if\x20fails,\x0a\x09other\x20fixes\x20and\x20improvements\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/terminal:\x20rename\x20shell\x20to\x20terminal\x20and\x20add\x20SetSize.\x0a*\x20fcgi:\x20fix\x20server\x20capability\x20discovery.\x0a*\x20fmt:\x20distinguish\x20empty\x20vs\x20nil\x20slice/map\x20in\x20%#v.\x0a*\x20gc:\x20better\x20error,\x20type\x20checks,\x20and\x20many\x20fixes,\x0a\x09remove\x20m[k]\x20=\x20x,\x20false\x20syntax\x20(use\x20delete(m,\x20k)\x20instead),\x0a\x09support\x20for\x20building\x20with\x20Plan\x209\x20yacc\x20(thanks\x20Anthony\x20Martin).\x0a*\x20go/printer:\x20make\x20//line\x20formatting\x20idempotent.\x0a*\x20godefs:\x20delete,\x20replaced\x20by\x20cgo\x20-godefs.\x0a*\x20godoc:\x20document\x20-templates\x20flag,\x20fix\x20remote\x20search,\x0a\x09provide\x20mode\x20for\x20flat\x20(non-indented)\x20directory\x20listings.\x0a*\x20gofmt:\x20leave\x20nil\x20nodes\x20of\x20the\x20AST\x20unchanged\x20(thanks\x20R\xc3\xa9my\x20Oudompheng).\x0a*\x20html/template:\x20indirect\x20top-level\x20values\x20before\x20printing.\x0a*\x20html:\x20more\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20http:\x20fix\x20serving\x20from\x20CWD\x20with\x20http.ServeFile,\x0a\x09make\x20Dir(\"\")\x20equivalent\x20to\x20Dir(\".\").\x0a*\x20ld:\x20fix\x20.bss\x20for\x20ldpe\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20math/big:\x20replace\x20nat{}\x20-&gt;\x20nat(nil).\x0a*\x20math:\x20faster\x20Lgamma\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20mime:\x20implement\x20TypeByExtension\x20for\x20windows.\x0a*\x20misc/bbedit:\x20error\x20and\x20rune\x20support\x20(thanks\x20Anthony\x20Starks).\x0a*\x20misc/benchcmp:\x20benchmark\x20comparison\x20script.\x0a*\x20misc/emacs:\x20add\x20delete\x20builtin\x20(thanks\x20Bobby\x20Powers).\x0a*\x20misc/kate:\x20add\x20error\x20and\x20rune\x20(thanks\x20Evan\x20Shaw).\x0a*\x20misc/notepadplus:\x20error\x20and\x20rune\x20support\x20(thanks\x20Anthony\x20Starks).\x0a*\x20misc/windows:\x20Windows\x20installer\x20in\x20MSI\x20format\x20(thanks\x20Joe\x20Poirier).\x0a*\x20net,\x20io/ioutil:\x20remove\x20use\x20of\x20os.Time\x20(thanks\x20Anthony\x20Martin).\x0a*\x20net/http:\x20fix\x20EOF\x20handling\x20on\x20response\x20body\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09fix\x20sniffing\x20when\x20using\x20ReadFrom,\x0a\x09use\x20t.Errorf\x20from\x20alternate\x20goroutine\x20in\x20test.\x0a*\x20os:\x20remove\x20undocumented\x20Envs\x20(use\x20os.Environ\x20instead).\x0a*\x20reflect:\x20empty\x20slice/map\x20is\x20not\x20DeepEqual\x20to\x20nil,\x0a\x09make\x20Value\x20an\x20opaque\x20struct.\x0a*\x20runtime,\x20syscall:\x20convert\x20from\x20godefs\x20to\x20cgo.\x0a*\x20runtime:\x20add\x20nanotime\x20for\x20Plan\x209\x20(thanks\x20Anthony\x20Martin),\x0a\x09add\x20timer\x20support,\x20use\x20for\x20package\x20time,\x0a\x09avoid\x20allocation\x20for\x20make([]T,\x200).\x0a*\x20strconv:\x20add\x20Ftoa\x20benchmarks,\x20make\x20Ftoa\x20faster.\x0a*\x20syscall:\x20delete\x20syscall.Sleep,\x20take\x20over\x20env\x20implementation,\x20use\x20error.\x0a*\x20testing:\x20add\x20file:line\x20stamps\x20to\x20messages,\x20print\x20results\x20to\x20standard\x20output.\x0a*\x20text/template:\x20refactor\x20set\x20parsing.\x0a*\x20time:\x20add\x20ISOWeek\x20method\x20to\x20Time\x20(thanks\x20Volker\x20Dobler).\x0a*\x20various:\x20avoid\x20func\x20compare,\x20reduce\x20overuse\x20of\x20os.EINVAL\x20+\x20others.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-11-09\">2011-11-09</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20renames\x20various\x20Go\x20packages\x20as\x20described\x20in\x20the\x20Go\x201\x20plan.\x0aImport\x20statements\x20in\x20client\x20code\x20can\x20be\x20updated\x20automatically\x20with\x20gofix.\x0a\x0aThe\x20changes\x20are:\x0a\x09asn1\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20encoding/asn1\x0a\x09big\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20math/big\x0a\x09cmath\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20math/cmplx\x0a\x09csv\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20encoding/csv\x0a\x09exec\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20os/exec\x0a\x09exp/template/html\x20-&gt;\x20html/template\x0a\x09gob\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20encoding/gob\x0a\x09http\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/http\x0a\x09http/cgi\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/http/cgi\x0a\x09http/fcgi\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/http/fcgi\x0a\x09http/httptest\x20\x20\x20\x20\x20-&gt;\x20net/http/httptest\x0a\x09http/pprof\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/http/pprof\x0a\x09json\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20encoding/json\x0a\x09mail\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/mail\x0a\x09rpc\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/rpc\x0a\x09rpc/jsonrpc\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/rpc/jsonrpc\x0a\x09scanner\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20text/scanner\x0a\x09smtp\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/smtp\x0a\x09syslog\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20log/syslog\x0a\x09tabwriter\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20text/tabwriter\x0a\x09template\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20text/template\x0a\x09template/parse\x20\x20\x20\x20-&gt;\x20text/template/parse\x0a\x09rand\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20math/rand\x0a\x09url\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20net/url\x0a\x09utf16\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20unicode/utf16\x0a\x09utf8\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20unicode/utf8\x0a\x09xml\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20encoding/xml\x0a</pre>\x0a\x0a<h2\x20id=\"2011-11-08\">2011-11-08</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20some\x20package\x20changes.\x0a\x0aIn\x20preparation\x20for\x20the\x20Go\x201\x20package\x20reorganziation\x20the\x20sources\x20for\x20various\x0apackages\x20have\x20been\x20moved,\x20but\x20the\x20import\x20paths\x20remain\x20unchanged.\x20This\x0ainconsistency\x20breaks\x20goinstall\x20at\x20this\x20snapshot.\x20If\x20you\x20use\x20goinstall,\x20please\x0astay\x20synced\x20to\x20the\x20previous\x20weekly\x20snapshot\x20until\x20the\x20next\x20one\x20is\x20tagged.\x0a\x0aThe\x20Error\x20methods\x20in\x20the\x20html,\x20bzip2,\x20and\x20sql\x20packages\x20that\x20return\x20error\x20values\x0ahave\x20been\x20renamed\x20to\x20Err.\x0a\x0aSome\x20non-core\x20parts\x20of\x20the\x20http\x20package\x20have\x20been\x20moved\x20to\x20net/http/httputil.\x0aThe\x20Dump*\x20and\x20NewChunked*\x20functions\x20and\x20ClientConn,\x20ServerConn,\x20and\x0aReverseProxy\x20types\x20have\x20been\x20moved\x20from\x20http\x20to\x20httputil.\x0a\x0aThe\x20API\x20for\x20html/template\x20is\x20now\x20a\x20direct\x20copy\x20of\x20the\x20template\x20API,\x20instead\x20of\x0aexposing\x20a\x20single\x20Escape\x20function.\x20For\x20HTML\x20templates,\x20use\x20the\x0ahtml/template\x20package\x20as\x20you\x20would\x20the\x20template\x20package.\x0a\x0aOther\x20changes:\x0a*\x20all:\x20rename\x20os.EOF\x20to\x20io.EOF\x20in\x20non-code\x20contexts\x20(thanks\x20Vincent\x20Vanackere),\x0a\x09sort\x20imports\x20with\x20gofix.\x0a*\x20archive/zip:\x20close\x20file\x20opened\x20with\x20OpenReader\x20(thanks\x20Dmitry\x20Chestnykh).\x0a*\x20bufio:\x20return\x20nil\x20line\x20from\x20ReadLine\x20on\x20error,\x20as\x20documented.\x0a*\x20builtin:\x20document\x20basic\x20types\x20and\x20the\x20built-in\x20error\x20type.\x0a*\x20bytes:\x20add\x20Contains\x20function.\x0a*\x20exp/sql:\x20finish\x20implementation\x20of\x20transactions,\x20flesh\x20out\x20types,\x20docs.\x0a*\x20exp/ssh:\x20improved\x20client\x20authentication\x20support\x20(thanks\x20Dave\x20Cheney).\x0a*\x20gc:\x20better\x20error\x20message\x20for\x20range\x20over\x20non-receive\x20channel,\x0a\x09bug\x20fixes\x20and\x20clean-ups,\x0a\x09detect\x20type\x20switch\x20variable\x20not\x20used\x20cases,\x0a\x09fix\x20escaping\x20of\x20package\x20paths\x20in\x20symbol\x20names,\x0a\x09helpful\x20error\x20message\x20on\x20method\x20call\x20on\x20pointer\x20to\x20pointer,\x0a\x09portably\x20read\x20archive\x20headers\x20(thanks\x20Ron\x20Minnich).\x0a*\x20gob:\x20fix\x20bug\x20when\x20registering\x20the\x20same\x20type\x20multiple\x20times.\x0a*\x20gofix:\x20avoid\x20panic\x20on\x20body-less\x20functions\x20in\x20netudpgroup,\x0a\x09make\x20fix\x20order\x20implicit\x20by\x20date.\x0a*\x20gofmt,\x20gofix:\x20sort\x20imports.\x0a*\x20goinstall:\x20support\x20launchpad.net/~user\x20branches\x20(thanks\x20Jani\x20Monoses).\x0a*\x20gopack:\x20do\x20not\x20look\x20for\x20Go\x20metadata\x20in\x20non-Go\x20objects.\x0a*\x20gotest:\x20don't\x20run\x20examples\x20that\x20have\x20no\x20expected\x20output.\x0a*\x20html:\x20the\x20parser\x20bug\x20fixing\x20campaign\x20continues\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20http:\x20fix\x20whitespace\x20handling\x20in\x20sniffer,\x0a\x09only\x20recognize\x20application/x-www-form-urlencoded\x20in\x20ParseForm,\x0a\x09support\x20Trailers\x20in\x20ReadRequest.\x0a*\x20lib9:\x20add\x20ctime.\x0a*\x20math:\x20faster\x20Gamma\x20(thanks\x20Charles\x20L.\x20Dorian),\x0a\x09improved\x20accuracy\x20for\x20Tan\x20(thanks\x20Charles\x20L.\x20Dorian),\x0a\x09improved\x20high-angle\x20test\x20for\x20Cos,\x20Sin\x20and\x20Tan\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20net:\x20implement\x20LookupTXT\x20for\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20os,text,unicode:\x20renamings.\x0a*\x20runtime/cgo:\x20fix\x20data\x20declaration\x20to\x20be\x20extern.\x0a*\x20runtime:\x20add\x20timespec\x20definition\x20for\x20freebsd,\x0a\x09add\x20windows\x20callback\x20tests\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20prototype\x20for\x20openbsd\x20thrsleep,\x0a\x09fix\x20set\x20and\x20not\x20used,\x0a\x09unify\x20mutex\x20code\x20across\x20OSes,\x0a\x09windows_386\x20sighandler\x20to\x20use\x20correct\x20g\x20(thanks\x20Alex\x20Brainman).\x0a*\x20template:\x20format\x20error\x20with\x20pointer\x20receiver,\x0a\x09make\x20redefinition\x20of\x20a\x20template\x20in\x20a\x20set\x20more\x20consistent.\x0a*\x20test:\x20clear\x20execute\x20bit\x20from\x20source\x20file\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20closedchan.go\x20exit\x20with\x20failure\x20if\x20something\x20fails.\x0a*\x20time:\x20faster\x20Nanoseconds\x20call.\x0a*\x20websocket:\x20return\x20an\x20error\x20HTTP\x20response\x20for\x20bad\x20websocket\x20request.\x0a*\x20xml:\x20allow\x20parsing\x20of\x20&lt;_&gt;\x20&lt;/_&gt;.\x20(thanks\x20David\x20Crawshaw).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-11-02\">2011-11-02\x20(new\x20error\x20type)</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20introduces\x20the\x20built-in\x20error\x20type,\x20defined\x20as\x0a\x0a\x20\x20\x20\x20\x20\x20\x20type\x20error\x20interface\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Error()\x20string\x0a\x20\x20\x20\x20\x20\x20\x20}\x0a\x0aThe\x20error\x20type\x20replaces\x20os.Error.\x20Notice\x20that\x20the\x20method\x20name\x20has\x20changed\x20from\x0aString\x20to\x20Error.\x20Package\x20fmt's\x20Print\x20formats\x20both\x20Stringers\x20and\x20errors:\x0ain\x20general\x20there\x20is\x20no\x20need\x20to\x20implement\x20both\x20String\x20and\x20Error\x20methods.\x0a\x0aGofix\x20can\x20update\x20most\x20code.\x20If\x20you\x20have\x20split\x20your\x20package\x20across\x20many\x20files,\x0ait\x20may\x20help\x20to\x20use\x20the\x20-force=error\x20command-line\x20option,\x20which\x20forces\x20gofix\x20to\x0aapply\x20the\x20error\x20fix\x20even\x20if\x20it\x20is\x20not\x20obvious\x20that\x20a\x20particular\x20file\x20needs\x20it.\x0aAs\x20always,\x20it\x20is\x20a\x20good\x20idea\x20to\x20read\x20and\x20test\x20the\x20changes\x20that\x20gofix\x20made\x0abefore\x20committing\x20them\x20to\x20your\x20version\x20control\x20system.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-11-01\">2011-11-01</h2>\x0a\x0a<pre>\x0a*\x206l:\x20remove\x20mention\x20of\x20-e\x20flag\x20-\x20it\x20does\x20nothing.\x0a*\x20cc:\x20change\x20cas\x20to\x20newcase\x20(thanks\x20Ron\x20Minnich).\x0a*\x20crypto/openpgp/error:\x20use\x20Error\x20in\x20names\x20of\x20error\x20impl\x20types.\x0a*\x20crypto/rsa:\x20change\x20public\x20exponent\x20from\x203\x20to\x2065537.\x0a*\x20crypto/tls:\x20add\x20Error\x20method\x20to\x20alert.\x0a*\x20doc:\x20add\x20link\x20to\x20A\x20Tour\x20of\x20Go\x20in\x20Japanese,\x0a\x09add\x20'all'\x20make\x20rule\x20to\x20build\x20all\x20docs,\x0a\x09refer\x20to\x20tour.golang.org\x20instead\x20of\x20go-tour.appspot.com.\x0a*\x20exp/norm:\x20fixed\x20bug\x20that\x20crept\x20in\x20with\x20moving\x20to\x20the\x20new\x20regexp.\x0a*\x20exp/ssh:\x20fix\x20length\x20header\x20leaking\x20into\x20channel\x20data\x20(thanks\x20Dave\x20Cheney).\x0a*\x20fmt:\x20handle\x20os.Error\x20values\x20explicity\x20(as\x20distinct\x20from\x20Stringer).\x0a*\x20gc:\x20clean\x20up\x20printing,\x0a\x09fix\x20[568]g\x20-V\x20crash\x20(thanks\x20Mikio\x20Hara),\x0a\x09test\x20+\x20fix\x20escape\x20analysis\x20bug.\x0a*\x20go/build:\x20avoid\x20os.Error\x20in\x20tests.\x0a*\x20go/doc:\x20remove\x20os.NewError\x20anti-heuristic.\x0a*\x20go/parser:\x20test\x20and\x20fix\x20:=\x20scoping\x20bug.\x0a*\x20gob:\x20split\x20uses\x20of\x20gobError,\x20remove\x20unnecessary\x20embedding.\x0a*\x20gofix:\x20test\x20import\x20insertion,\x20deletion.\x0a*\x20goinstall:\x20intelligent\x20vcs\x20selection\x20for\x20common\x20sites\x20(thanks\x20Julian\x20Phillips).\x0a*\x20gopack:\x20change\x20archive\x20file\x20name\x20length\x20back\x20to\x2016.\x0a*\x20html:\x20fix\x20print\x20argument\x20in\x20test,\x0a\x09more\x20parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20json:\x20properly\x20handle\x20nil\x20slices\x20(thanks\x20Alexander\x20Reece).\x0a*\x20math:\x20improved\x20accuracy\x20for\x20Sin\x20and\x20Cos\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/emacs:\x20fix\x20restoration\x20of\x20windows\x20after\x20gofmt\x20(thanks\x20Jan\x20Newmarch).\x0a*\x20misc/vim:\x20add\x20rune\x20keyword\x20(thanks\x20Jongmin\x20Kim).\x0a*\x20misc/windows:\x20can\x20be\x20used\x20for\x20amd64\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net:\x20document\x20why\x20we\x20do\x20not\x20use\x20SO_REUSEADDR\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20os:\x20do\x20not\x20interpret\x200-length\x20read\x20as\x20EOF.\x0a*\x20pkg:\x20remove\x20.String()\x20from\x20some\x20print\x20arguments.\x0a*\x20rpc:\x20avoid\x20infinite\x20loop\x20on\x20input\x20error.\x0a*\x20runtime/pprof:\x20document\x20OS\x20X\x20being\x20broken.\x0a*\x20runtime:\x20lock\x20the\x20main\x20goroutine\x20to\x20the\x20main\x20OS\x20thread\x20during\x20init.\x0a*\x20spec:\x20define\x20that\x20initialization\x20is\x20sequential.\x0a*\x20strconv:\x20use\x20better\x20errors\x20than\x20os.EINVAL,\x20os.ERANGE.\x0a*\x20syscall:\x20fix\x20Await\x20msg\x20on\x20Plan\x209\x20(thanks\x20Andrey\x20Mirtchovski).\x0a*\x20template:\x20do\x20not\x20use\x20error\x20as\x20stringer,\x0a\x09fix\x20error\x20checking\x20on\x20execute\x20without\x20parse\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20test/alias.go:\x20additional\x20tests.\x0a*\x20test:\x20error-related\x20fixes.\x0a*\x20textproto:\x20prevent\x20long\x20lines\x20in\x20HTTP\x20headers\x20from\x20causing\x20HTTP\x20400\x20responses.\x0a*\x20time:\x20add\x20RFC1123\x20with\x20numeric\x20timezone\x20format\x20(thanks\x20Scott\x20Lawrence).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-10-26\">2011-10-26\x20(new\x20rune\x20type)</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20introduces\x20the\x20rune\x20type,\x20an\x20alias\x20for\x20int\x20that\x0ashould\x20be\x20used\x20for\x20Unicode\x20code\x20points.\x0a\x0aA\x20future\x20release\x20of\x20Go\x20(after\x20Go\x201)\x20will\x20change\x20rune\x20to\x20be\x20an\x0aalias\x20for\x20int32\x20instead\x20of\x20int.\x20\x20Using\x20rune\x20consistently\x20is\x20the\x20way\x0ato\x20make\x20your\x20code\x20build\x20both\x20before\x20and\x20after\x20this\x20change.\x0a\x0aTo\x20test\x20your\x20code\x20for\x20rune\x20safety,\x20you\x20can\x20rebuild\x20the\x20Go\x20tree\x20with\x0a\x0a\x09GOEXPERIMENT=rune32\x20./all.bash\x0a\x0awhich\x20builds\x20a\x20compiler\x20in\x20which\x20rune\x20is\x20an\x20alias\x20for\x20int32\x20instead\x20of\x20int.\x0a\x0aAlso,\x20run\x20govet\x20on\x20your\x20code\x20to\x20identify\x20methods\x20that\x20might\x20need\x20to\x20have\x20their\x0asignatures\x20updated.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-10-25\">2011-10-25</h2>\x0a\x0a<pre>\x0a*\x20big:\x20make\x20SetString\x20return\x20nil\x20if\x20an\x20error\x20occurs,\x0a\x09new\x20Rat.Inv\x20method,\x0a\x09usable\x20zero\x20Rat\x20values\x20without\x20need\x20for\x20explicit\x20initialization.\x0a*\x20codereview:\x20show\x20LGTMs\x20in\x20hg\x20p.\x0a*\x20crypto/x509:\x20fix\x20names\x20in\x20certificate\x20generation.\x0a*\x20exp/ssh:\x20add\x20experimental\x20ssh\x20client,\x0a\x09introduce\x20Session\x20to\x20replace\x20Cmd\x20for\x20interactive\x20commands,\x0a\x09server\x20cleanups\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/types:\x20fix\x20crash\x20in\x20parseBasicType\x20on\x20unknown\x20type.\x0a*\x20fmt:\x20don't\x20panic\x20formatting\x20nil\x20interfaces\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20go/ast,\x20go/token:\x20actually\x20run\x20tests;\x20fix\x20go/ast\x20test.\x0a*\x20gotest:\x20explicit\x20-help\x20flag,\x20use\x20$GCFLAGS\x20like\x20make\x20does.\x0a*\x20govet:\x20check\x20canonical\x20dynamic\x20method\x20signatures.\x0a*\x20html:\x20improved\x20parsing\x20(thanks\x20Andrew\x20Balholm),\x0a\x09parse\x20&lt;select&gt;\x20tags,\x20parse\x20and\x20render\x20comment\x20nodes,\x0a\x09remove\x20the\x20Tokenizer.ReturnComments\x20option.\x0a*\x20http:\x20Transport:\x20with\x20TLS\x20InsecureSkipVerify,\x20skip\x20hostname\x20check.\x0a*\x20misc/vim:\x20add\x20highlighting\x20for\x20delete\x20(thanks\x20Dave\x20Cheney).\x0a*\x20net:\x20do\x20not\x20set\x20SO_REUSEADDR\x20for\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20os/inotify:\x20move\x20to\x20exp/inotify\x20(thanks\x20Mikio\x20Hara).\x0a*\x20runtime:\x20include\x20bootstrap\x20m\x20in\x20mcpu\x20accounting\x20(thanks\x20Hector\x20Chu).\x0a*\x20syscall:\x20use\x20uintptr\x20for\x20Mount\x20flags.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-10-18\">2011-10-18</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20some\x20language\x20and\x20package\x20changes\x20that\x20may\x0arequire\x20code\x20changes.\x20Please\x20read\x20these\x20notes\x20carefully,\x20as\x20there\x20are\x20many\x0achanges\x20and\x20your\x20code\x20will\x20likely\x20be\x20affected.\x0a\x0aThe\x20syntax\x20for\x20map\x20deletion\x20has\x20been\x20changed.\x20Code\x20that\x20looks\x20like:\x0a\x09m[x]\x20=\x200,\x20false\x0ashould\x20be\x20written\x20as:\x0a\x09delete(m,\x20x)\x0aThe\x20compiler\x20still\x20accepts\x20m[x]\x20=\x200,\x20false\x20for\x20now;\x20even\x20so,\x20you\x20can\x20use\x20gofix\x0ato\x20rewrite\x20such\x20assignments\x20into\x20delete(m,\x20x).\x0a\x0aThe\x20Go\x20compiler\x20will\x20reject\x20a\x20return\x20statement\x20without\x20arguments\x20when\x20any\x20of\x0athe\x20result\x20variables\x20has\x20been\x20shadowed.\x20Code\x20rejected\x20as\x20a\x20result\x20of\x20this\x0achange\x20is\x20likely\x20to\x20be\x20buggy.\x0a\x0aReceive-only\x20channels\x20(&lt;-chan\x20T)\x20cannot\x20be\x20closed.\x0aThe\x20compiler\x20will\x20diagnose\x20such\x20attempts.\x0a\x0aThe\x20first\x20element\x20of\x20a\x20map\x20iteration\x20is\x20chosen\x20at\x20random.\x20Code\x20that\x20depends\x20on\x0aiteration\x20order\x20will\x20need\x20to\x20be\x20updated.\x0a\x0aGoroutines\x20may\x20be\x20run\x20during\x20program\x20initialization.\x0a\x0aA\x20string\x20may\x20be\x20appended\x20to\x20a\x20byte\x20slice.\x20This\x20code\x20is\x20now\x20legal:\x0a\x09var\x20b\x20[]byte\x0a\x09var\x20s\x20string\x0a\x09b\x20=\x20append(b,\x20s...)\x0a\x0aThe\x20gotry\x20command\x20and\x20its\x20associated\x20try\x20package\x20have\x20been\x20deleted.\x0aIt\x20was\x20a\x20fun\x20experiment\x20that\x20-\x20in\x20the\x20end\x20-\x20didn't\x20carry\x20its\x20weight.\x0a\x0aThe\x20gotype\x20tool\x20has\x20been\x20moved\x20to\x20exp/gotype\x20and\x20its\x20associated\x20go/types\x0apackage\x20has\x20been\x20moved\x20to\x20exp/types.\x20The\x20deprecated\x20go/typechecker\x20package\x20has\x0abeen\x20deleted.\x0a\x0aThe\x20enbflint\x20tool\x20has\x20been\x20moved\x20to\x20pkg/exp/ebnflint\x20and\x20its\x20associated\x20ebnf\x0apackage\x20has\x20been\x20moved\x20to\x20pkg/exp/ebnf.\x0a\x0aThe\x20netchan\x20package\x20has\x20been\x20moved\x20to\x20old/netchan.\x0a\x0aThe\x20http/spdy\x20package\x20has\x20been\x20moved\x20to\x20exp/spdy.\x0a\x0aThe\x20exp/datafmt\x20package\x20has\x20been\x20deleted.\x0a\x0aThe\x20container/vector\x20package\x20has\x20been\x20deleted.\x20Slices\x20are\x20better:\x0a\x09http://code.google.com/p/go-wiki/wiki/SliceTricks\x0a\x0aOther\x20changes:\x0a*\x205l/6l/8l:\x20correct\x20ELFRESERVE\x20diagnostic\x20(thanks\x20Anthony\x20Martin).\x0a*\x206l/8l:\x20support\x20OS\x20X\x20code\x20signing\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20asn1:\x20accept\x20UTF8\x20strings\x20as\x20ASN.1\x20ANY\x20values.\x0a*\x20big:\x20handle\x20aliasing\x20correctly\x20for\x20Rat.SetFrac.\x0a*\x20build:\x20add\x20missing\x20nuke\x20target\x20(thanks\x20Anthony\x20Martin),\x0a\x09catch\x20future\x20accidental\x20dependencies\x20to\x20exp\x20or\x20old\x20packages,\x0a\x09more\x20robustly\x20detect\x20gold\x202.20\x20(thanks\x20Christopher\x20Wedgwood),\x0a\x09pass\x20$GCFLAGS\x20to\x20compiler,\x0a\x09stop\x20on\x20failed\x20deps.bash.\x0a*\x20crypto/tls:\x20add\x203DES\x20ciphersuites,\x0a\x09add\x20server\x20side\x20SNI\x20support,\x0a\x09fetch\x20root\x20CA\x20from\x20Windows\x20store\x20(thanks\x20Mikkel\x20Krautz),\x0a\x09fetch\x20root\x20certificates\x20using\x20Mac\x20OS\x20API\x20(thanks\x20Mikkel\x20Krautz),\x0a\x09fix\x20broken\x20looping\x20code\x20in\x20windows\x20root\x20CA\x20fetcher\x20(thanks\x20Mikkel\x20Krautz),\x0a\x09more\x20Unix\x20root\x20certificate\x20locations.\x0a*\x20crypto/x509:\x20add\x20code\x20for\x20dealing\x20with\x20PKIX\x20public\x20keys,\x0a\x09keep\x20the\x20raw\x20Subject\x20and\x20Issuer.\x0a*\x20csv:\x20fix\x20overly\x20aggressive\x20TrimLeadingSpace.\x0a*\x20exp/ssh:\x20general\x20cleanups\x20for\x20client\x20support\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/template/html:\x20fix\x20bug\x20in\x20cssEscaper.\x0a*\x20exp/terminal:\x20split\x20terminal\x20handling\x20from\x20exp/ssh.\x0a*\x20exp/winfsnotify:\x20filesystem\x20watcher\x20for\x20Windows\x20(thanks\x20Hector\x20Chu).\x0a*\x20fmt:\x20fix\x20test\x20relying\x20on\x20map\x20iteration\x20order.\x0a*\x20gc:\x20changes\x20to\x20export\x20format\x20in\x20preparation\x20for\x20inlining,\x0a\x09pass\x20FlagNoPointers\x20to\x20runtime.new,\x0a\x09preserve\x20uint8\x20and\x20byte\x20distinction\x20in\x20errors\x20and\x20import\x20data,\x0a\x09stricter\x20multiple\x20assignment\x20+\x20test,\x0a\x09treat\x20uintptr\x20as\x20potentially\x20containing\x20a\x20pointer.\x0a*\x20go/scanner:\x20remove\x20AllowIllegalChars\x20mode.\x0a*\x20go/token:\x20document\x20deserialization\x20property.\x0a*\x20gob:\x20avoid\x20one\x20copy\x20for\x20every\x20message\x20written.\x0a*\x20godefs:\x20add\x20enum/const\x20testdata\x20(thanks\x20Dave\x20Cheney).\x0a*\x20godoc:\x20generate\x20package\x20toc\x20in\x20template,\x20not\x20in\x20JavaScript,\x0a\x09show\x20\"unexported\"\x20declarations\x20when\x20executing\x20\"godoc\x20builtin\",\x0a\x09show\x20correct\x20source\x20name\x20with\x20-path.\x0a*\x20gofix:\x20make\x20fix\x20order\x20explicit,\x20add\x20mapdelete.\x0a*\x20gofmt:\x20fix\x20//line\x20handling,\x0a\x09disallow\x20rewrites\x20for\x20incomplete\x20programs.\x0a*\x20gotest:\x20avoid\x20conflicts\x20with\x20the\x20name\x20of\x20the\x20tested\x20package\x20(thanks\x20Esko\x20Luontola),\x0a\x09test\x20example\x20code.\x0a*\x20goyacc:\x20clean\x20up\x20after\x20units\x20(thanks\x20Anthony\x20Martin),\x0a\x09make\x20more\x20gofmt-compliant.\x0a*\x20html:\x20add\x20a\x20Render\x20function,\x20various\x20bug\x20fixes\x20and\x20improvements,\x0a\x09parser\x20improvements\x20(thanks\x20Andrew\x20Balholm).\x0a*\x20http:\x20DoS\x20protection:\x20cap\x20non-Handler\x20Request.Body\x20reads,\x0a\x09RoundTrippers\x20shouldn't\x20mutate\x20Request,\x0a\x09avoid\x20panic\x20caused\x20by\x20nil\x20URL\x20(thanks\x20Anthony\x20Martin),\x0a\x09fix\x20read\x20timeouts\x20and\x20closing,\x0a\x09remove\x20Request.RawURL.\x0a*\x20image/tiff:\x20implement\x20PackBits\x20decoding\x20(thanks\x20Benny\x20Siegert).\x0a*\x20ld:\x20fix\x20\"cannot\x20create\x208.out.exe\"\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko).\x0a*\x20misc/emacs:\x20add\x20a\x20\"godoc\"\x20command,\x20like\x20M-x\x20man\x20(thanks\x20Evan\x20Martin).\x0a*\x20misc/swig:\x20delete\x20binaries\x20(thanks\x20Anthony\x20Martin).\x0a*\x20misc/windows:\x20automated\x20toolchain\x20packager\x20(thanks\x20Joe\x20Poirier).\x0a*\x20net/windows:\x20implement\x20ip\x20protocol\x20name\x20to\x20number\x20resolver\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net:\x20add\x20File\x20method\x20to\x20IPConn\x20(thanks\x20Mikio\x20Hara),\x0a\x09allow\x20LookupSRV\x20on\x20non-standard\x20DNS\x20names,\x0a\x09fix\x20\"unexpected\x20socket\x20family\"\x20error\x20from\x20WriteToUDP\x20(thanks\x20Albert\x20Strasheim),\x0a\x09fix\x20socket\x20leak\x20in\x20case\x20of\x20Dial\x20failure\x20(thanks\x20Chris\x20Farmiloe),\x0a\x09remove\x20duplicate\x20error\x20information\x20in\x20Dial\x20(thanks\x20Andrey\x20Mirtchovski),\x0a\x09return\x20error\x20from\x20CloseRead\x20and\x20CloseWrite\x20(thanks\x20Albert\x20Strasheim),\x0a\x09skip\x20ICMP\x20test\x20on\x20Windows\x20too\x20unless\x20uid\x200.\x0a*\x20reflect:\x20disallow\x20Interface\x20method\x20on\x20Value\x20obtained\x20via\x20unexported\x20name,\x0a\x09make\x20unsafe\x20use\x20of\x20SliceHeader\x20gc-friendly.\x0a*\x20rpc:\x20don't\x20panic\x20on\x20write\x20error.\x0a*\x20runtime:\x20faster\x20strings,\x0a\x09fix\x20crash\x20if\x20user\x20sets\x20MemProfileRate=0,\x0a\x09fix\x20crash\x20when\x20returning\x20from\x20syscall\x20during\x20gc\x20(thanks\x20Hector\x20Chu),\x0a\x09fix\x20memory\x20leak\x20in\x20parallel\x20garbage\x20collector.\x0a*\x20scanner:\x20invalidate\x20scanner.Position\x20when\x20no\x20token\x20is\x20present.\x0a*\x20spec:\x20define\x20order\x20of\x20multiple\x20assignment.\x0a*\x20syscall/windows:\x20dll\x20function\x20load\x20and\x20calling\x20changes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20syscall:\x20add\x20#ifdefs\x20to\x20fix\x20the\x20manual\x20corrections\x20in\x20ztypes_linux_arm.go\x20(thanks\x20Dave\x20Cheney),\x0a\x09adjust\x20Mount\x20to\x20accommodate\x20stricter\x20FS\x20implementations.\x0a*\x20testing:\x20fix\x20time\x20reported\x20for\x20failing\x20tests.\x0a*\x20utf8:\x20add\x20Valid\x20and\x20ValidString.\x0a*\x20websocket:\x20tweak\x20hybi\x20ReadHandshake\x20to\x20support\x20Firefox\x20(thanks\x20Luca\x20Greco).\x0a*\x20xml:\x20match\x20Marshal's\x20XMLName\x20behavior\x20in\x20Unmarshal\x20(thanks\x20Chris\x20Farmiloe).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-10-06\">2011-10-06</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20io,\x20image,\x20and\x20math\x20packages\x20that\x0amay\x20require\x20changes\x20to\x20client\x20code.\x0a\x0aThe\x20io\x20package's\x20Copyn\x20function\x20has\x20been\x20renamed\x20to\x20CopyN.\x0a\x0aThe\x20math\x20package's\x20Fabs,\x20Fdim,\x20Fmax,\x20Fmin\x20and\x20Fmod\x20functions\x0ahave\x20been\x20renamed\x20to\x20Abs,\x20Dim,\x20Max,\x20Min,\x20and\x20Mod.\x0a\x0aParts\x20of\x20the\x20image\x20package\x20have\x20been\x20moved\x20to\x20the\x20new\x20image/color\x20package.\x0aThe\x20spin-off\x20renames\x20some\x20types.\x20The\x20new\x20names\x20are\x20simply\x20better:\x0a\x09image.Color\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20color.Color\x0a\x09image.ColorModel\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20color.Model\x0a\x09image.ColorModelFunc\x20\x20\x20\x20\x20-&gt;\x20color.ModelFunc\x0a\x09image.PalettedColorModel\x20-&gt;\x20color.Palette\x0a\x09image.RGBAColor\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20color.RGBA\x0a\x09image.RGBAColorModel\x20\x20\x20\x20\x20-&gt;\x20color.RGBAModel\x0a\x09image.RGBA64Color\x20\x20\x20\x20\x20\x20\x20\x20-&gt;\x20color.RGBA64\x0a\x09image.RGBA64ColorModel\x20\x20\x20-&gt;\x20color.RGBA64Model\x0a(similarly\x20for\x20NRGBAColor,\x20GrayColorModel,\x20etc)\x0aThe\x20image.ColorImage\x20type\x20stays\x20in\x20the\x20image\x20package,\x20but\x20is\x20renamed:\x0a\x09image.ColorImage\x20-&gt;\x20image.Uniform\x0aThe\x20image.Image\x20implementations\x20(image.RGBA,\x20image.RGBA64,\x20image.NRGBA,\x0aimage.Alpha,\x20etc)\x20do\x20not\x20change\x20their\x20name,\x20and\x20gain\x20a\x20nice\x20symmetry:\x0aan\x20image.RGBA\x20is\x20an\x20image\x20of\x20color.RGBA,\x20etc.\x0aThe\x20image.Black,\x20image.Opaque\x20uniform\x20images\x20remain\x20unchanged\x20(although\x20their\x0atype\x20is\x20renamed\x20from\x20image.ColorImage\x20to\x20image.Uniform).\x0aThe\x20corresponding\x20color\x20types\x20(color.Black,\x20color.Opaque,\x20etc)\x20are\x20new.\x0aNothing\x20in\x20the\x20image/ycbcr\x20is\x20renamed\x20yet.\x20The\x20ycbcr.YCbCrColor\x20and\x0aycbcr.YCbCrImage\x20types\x20will\x20eventually\x20migrate\x20to\x20color.YCbCr\x20and\x20image.YCbCr,\x0aat\x20a\x20later\x20date.\x0a\x0a*\x205g/6g/8g:\x20fix\x20loop\x20finding\x20bug,\x20fix\x20-f(),\x20registerize\x20variables\x20again.\x0a*\x205l/6l/8l:\x20add\x20a\x20DT_DEBUG\x20dynamic\x20tag\x20to\x20a\x20dynamic\x20ELF\x20binary.\x0a*\x20archive/zip:\x20read\x20and\x20write\x20unix\x20file\x20modes\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20build:\x20clear\x20execute\x20bit\x20from\x20source\x20files\x20(thanks\x20Mikio\x20Hara).\x0a*\x20bytes:\x20add\x20EqualFold.\x0a*\x20cgo:\x20allow\x20Windows\x20path\x20characters\x20in\x20flag\x20directives\x20(thanks\x20Joe\x20Poirier),\x0a\x09support\x20for\x20mingw-w64\x204.5.1\x20and\x20newer\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20codereview:\x20extra\x20repo\x20sanity\x20check,\x0a\x09fix\x20for\x20Mercurial\x201.9.2,\x0a\x09fix\x20hg\x20change\x20in\x20Windows\x20console\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20crypto/elliptic:\x20use\x20%x\x20consistently\x20in\x20error\x20print.\x0a*\x20doc/spec:\x20remove\x20notes\x20about\x20gccgo\x20limitations,\x20now\x20fixed.\x0a*\x20doc:\x20add\x20'Debugging\x20Go\x20code\x20with\x20GDB'\x20tutorial,\x0a\x09fix\x20memory\x20model\x20read\x20visibility\x20bug.\x0a*\x20encoding/binary:\x20PutX\x20functions\x20require\x20buffer\x20of\x20sufficient\x20size,\x0a\x09added\x20benchmarks,\x20support\x20for\x20varint\x20encoding.\x0a*\x20exec:\x20add\x20Command.ExtraFiles.\x0a*\x20exp/sql{,/driver}:\x20new\x20database\x20packages.\x0a*\x20exp/ssh:\x20move\x20common\x20code\x20to\x20common.go\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/template/html:\x20work\x20continues.\x0a*\x20fmt:\x20replace\x20channel\x20cache\x20with\x20slice.\x0a*\x20gc:\x20limit\x20helper\x20threads\x20based\x20on\x20ncpu.\x0a*\x20go/doc,\x20godoc,\x20gotest:\x20support\x20for\x20reading\x20example\x20documentation.\x0a*\x20go:\x20documentation\x20and\x20skeleton\x20implementation\x20of\x20new\x20command.\x0a*\x20gob:\x20protect\x20against\x20invalid\x20message\x20length,\x0a\x09allow\x20sequential\x20decoders\x20on\x20the\x20same\x20input\x20stream.\x0a*\x20hgpatch:\x20do\x20not\x20use\x20hg\x20exit\x20status\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20http:\x20add\x20Location\x20method\x20to\x20Response,\x0a\x09don't\x20send\x20a\x20400\x20Bad\x20Request\x20after\x20a\x20client\x20shutdown.\x0a*\x20index/suffixarray:\x204.5x\x20faster\x20index\x20serialization\x20(to\x20memory).\x0a*\x20io/ioutil:\x20add\x20a\x20comment\x20on\x20why\x20devNull\x20is\x20a\x20ReaderFrom.\x0a*\x20json:\x20use\x20strings.EqualFold\x20instead\x20of\x20strings.ToLower.\x0a*\x20misc/emacs:\x20fix\x20indent\x20bug.\x0a*\x20net:\x20add\x20shutdown:\x20TCPConn.CloseWrite\x20and\x20CloseRead.\x0a*\x20net:\x20use\x20AF_UNSPEC\x20instead\x20of\x20individual\x20address\x20family\x20(thanks\x20Mikio\x20Hara).\x0a*\x20path/filepath:\x20added\x20Rel\x20as\x20the\x20complement\x20of\x20Abs\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20pkg/syscall:\x20add\x20Mkfifo\x20for\x20linux\x20platforms.\x0a*\x20regexp:\x20move\x20to\x20old/regexp,\x20replace\x20with\x20exp/regexp,\x20speedups.\x0a*\x20runtime/gdb:\x20fix\x20pretty\x20printing\x20of\x20channels,\x0a\x09gracefully\x20handle\x20not\x20being\x20able\x20to\x20find\x20types.\x0a*\x20runtime:\x20check\x20for\x20nil\x20value\x20pointer\x20in\x20select\x20syncsend\x20case,\x0a\x09faster\x20finalizers,\x0a\x09fix\x20malloc\x20sampling\x20bug,\x0a\x09fix\x20map\x20memory\x20leak,\x0a\x09fix\x20spurious\x20deadlock\x20reporting,\x0a\x09fix\x20usleep\x20on\x20linux/386\x20and\x20re-enable\x20parallel\x20gc\x20(thanks\x20Hector\x20Chu),\x0a\x09parallelize\x20garbage\x20collector\x20mark\x20+\x20sweep.\x0a*\x20strconv:\x20faster\x20Unquote\x20in\x20common\x20case.\x0a*\x20strings:\x20add\x20EqualFold,\x20Replacer,\x20NewReplacer.\x0a*\x20suffixarray:\x20add\x20benchmarks\x20for\x20construction\x20(thanks\x20Eric\x20Eisner).\x0a*\x20syscall:\x20add\x20GetsockoptByte,\x20SetsockoptByte\x20for\x20openbsd\x20(thanks\x20Mikio\x20Hara),\x0a\x09add\x20IPv4\x20ancillary\x20data\x20for\x20linux\x20(thanks\x20Mikio\x20Hara),\x0a\x09mark\x20stdin,\x20stdout,\x20stderr\x20non-inheritable\x20by\x20child\x20processes\x20(thanks\x20Alex\x20Brainman),\x0a\x09mksyscall_windows.pl\x20creates\x20non-syscall\x20packages\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko),\x0a\x09update\x20multicast\x20socket\x20options\x20(thanks\x20Mikio\x20Hara).\x0a*\x20testing:\x20support\x20for\x20running\x20tests\x20in\x20parallel\x20(thanks\x20Miki\x20Tebeka).\x0a*\x20time:\x20make\x20month/day\x20name\x20comparisons\x20case\x20insenstive.\x0a*\x20unicode:\x20fix\x20make\x20tables.\x0a*\x20vim:\x20Send\x20GoFmt\x20errors\x20to\x20a\x20location\x20list\x20(thanks\x20Paul\x20Sbarra).\x0a*\x20websocket:\x20add\x20hybi-13\x20support,\x20add\x20mutex\x20to\x20make\x20websocket\x20full-duplex.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-09-21\">2011-09-21</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20contains\x20several\x20improvements,\x20bug\x20fixes,\x20and\x20new\x20packages.\x0a\x0a*\x20archive/tar:\x20document\x20Header\x20fields\x20and\x20Type\x20flags\x20(thanks\x20Mike\x20Rosset).\x0a*\x20bytes:\x20fix\x20Replace\x20so\x20it\x20actually\x20copies\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cgo:\x20use\x20GOARCH\x20from\x20the\x20environment\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko).\x0a*\x20codereview:\x20save\x20CL\x20messages\x20in\x20$(hg\x20root)/last-change.\x0a*\x20crypto/bcrypt:\x20new\x20package\x20(thanks\x20Jeff\x20Hodges).\x0a*\x20crypto/blowfish:\x20exposing\x20the\x20blowfish\x20key\x20schedule\x20(thanks\x20Jeff\x20Hodges).\x0a*\x20doc:\x20link\x20to\x20golang-france.\x0a*\x20doc:\x20when\x20configuring\x20gold\x20for\x20gccgo,\x20use\x20--enable-gold=default.\x0a*\x20exp/norm:\x20changed\x20trie\x20to\x20produce\x20smaller\x20tables.\x0a*\x20exp/ssh:\x20new\x20package,\x0a\x09refactor\x20halfConnection\x20to\x20transport\x20(thanks\x20Dave\x20Cheney).\x0a*\x20exp/template/html:\x20more\x20fixes\x20and\x20improvements.\x0a*\x20filepath:\x20fix\x20Glob\x20to\x20return\x20no\x20error\x20on\x20nonmatching\x20patterns.\x0a*\x20gc:\x20disallow\x20invalid\x20map\x20keys,\x0a\x09handle\x20complex\x20CONVNOP.\x0a*\x20gob:\x20allocation\x20fixes.\x0a*\x20godoc:\x20simplify\x20internal\x20FileSystem\x20interface.\x0a*\x20http/cgi:\x20clean\x20up\x20environment\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20http:\x20always\x20include\x20Content-Length\x20header,\x20even\x20for\x200\x20(thanks\x20Dave\x20Grijalva),\x0a\x09check\x20explicit\x20wrong\x20Request.ContentLength\x20values,\x0a\x09fix\x20TLS\x20handshake\x20blocking\x20server\x20accept\x20loop,\x0a\x09prevent\x20DumpRequest\x20from\x20adding\x20implicit\x20headers.\x0a*\x20httptest:\x20add\x20NewUnstartedServer.\x0a*\x20json:\x20clearer\x20Unmarshal\x20doc,\x0a\x09skip\x20nil\x20in\x20UnmarshalJSON\x20and\x20(for\x20symmetry)\x20MarshalJSON.\x0a*\x20net:\x20use\x20/etc/hosts\x20first\x20when\x20looking\x20up\x20IP\x20addresses\x20(thanks\x20Andrey\x20Mirtchovski).\x0a*\x20reflect:\x20add\x20comment\x20about\x20the\x20doubled\x20semantics\x20of\x20Value.String.\x0a*\x20runtime:\x20implement\x20pprof\x20support\x20for\x20windows\x20(thanks\x20Hector\x20Chu),\x0a\x09increase\x20stack\x20system\x20space\x20on\x20windows/amd64\x20(thanks\x20Hector\x20Chu).\x0a*\x20suffixarray:\x20generate\x20less\x20garbage\x20during\x20construction\x20(thanks\x20Eric\x20Eisner),\x0a\x09improved\x20serialization\x20code\x20using\x20gob\x20instead\x20of\x20encoding/binary.\x0a*\x20sync/atomic:\x20replace\x20MFENCE\x20with\x20LOCK\x20XADD.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-09-16\">2011-09-16</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20image,\x20path/filepath,\x20and\x20time\x0apackages.\x20Code\x20that\x20uses\x20these\x20packages\x20may\x20need\x20to\x20be\x20updated.\x0a\x0aThe\x20image\x20package's\x20NewX\x20functions\x20(NewRGBA,\x20NewNRGBA,\x20etc)\x20have\x20been\x20changed\x0ato\x20take\x20a\x20Rectangle\x20argument\x20instead\x20of\x20a\x20width\x20and\x20height.\x0aGofix\x20can\x20make\x20these\x20changes\x20automatically.\x0a\x0aThe\x20path/filepath\x20package's\x20Walk\x20function\x20has\x20been\x20changed\x20to\x20take\x20a\x20WalkFunc\x0afunction\x20value\x20instead\x20of\x20a\x20Visitor\x20interface\x20value.\x20WalkFunc\x20is\x20like\x20the\x0aVisitor's\x20VisitDir\x20and\x20VisitFile\x20methods\x20except\x20it\x20handles\x20both\x20files\x20and\x0adirectories:\x0a\x09func(path\x20string,\x20info\x20*os.FileInfo,\x20err\x20os.Error)\x20os.Error\x0aTo\x20skip\x20walking\x20a\x20directory\x20(like\x20returning\x20false\x20from\x20VisitDir)\x20the\x20WalkFunc\x0amust\x20return\x20SkipDir.\x0a\x0aThe\x20time\x20package's\x20Time\x20struct's\x20Weekday\x20field\x20has\x20been\x20changed\x20to\x20a\x20method.\x0aThe\x20value\x20is\x20calculated\x20on\x20demand,\x20avoiding\x20the\x20need\x20to\x20re-parse\x0aprogrammatically-constructed\x20Time\x20values\x20to\x20find\x20the\x20correct\x20weekday.\x0a\x0aThere\x20are\x20no\x20gofixes\x20for\x20the\x20filepath\x20or\x20time\x20API\x20changes,\x20but\x20instances\x20of\x20the\x0aold\x20APIs\x20will\x20be\x20caught\x20by\x20the\x20compiler.\x20The\x20Weekday\x20one\x20is\x20easy\x20to\x20update\x20by\x0ahand.\x20The\x20Walk\x20one\x20may\x20take\x20more\x20consideration,\x20but\x20will\x20have\x20fewer\x20instances\x0ato\x20fix.\x0a\x0a*\x20build:\x20add\x20build\x20comments\x20to\x20core\x20packages.\x0a*\x20codereview:\x20Mercurial\x201.9\x20fix\x20for\x20hg\x20diff\x20@nnn.\x0a*\x20crypto/tls:\x20handle\x20non-TLS\x20more\x20robustly,\x0a\x09support\x20SSLv3.\x0a*\x20debug/elf:\x20permit\x20another\x20case\x20of\x20SHT_NOBITS\x20section\x20overlap\x20in\x20test.\x0a*\x20exm/template/html:\x20more\x20work\x20on\x20this\x20auto-escaping\x20HTML\x20template\x20package.\x0a*\x20exp/norm:\x20added\x20regression\x20test\x20tool\x20for\x20the\x20standard\x20Unicode\x20test\x20set.\x0a*\x20exp/regexp/syntax:\x20fix\x20invalid\x20input\x20parser\x20crash,\x0a\x09import\x20all\x20RE2\x20parse\x20tests\x20+\x20fix\x20bugs.\x0a*\x20exp/regexp:\x20add\x20MustCompilePOSIX,\x20CompilePOSIX,\x20leftmost-longest\x20matching.\x0a*\x20flag:\x20make\x20zero\x20FlagSet\x20useful.\x0a*\x20gc:\x20clean\x20up\x20if\x20grammar.\x0a*\x20go/build:\x20handle\x20cgo,\x20//\x20+build\x20comments.\x0a*\x20go/printer:\x20use\x20panic/defer\x20instead\x20of\x20goroutine\x20for\x20handling\x20errors.\x0a*\x20go/token:\x20support\x20to\x20serialize\x20file\x20sets.\x0a*\x20godoc,\x20suffixarray:\x20switch\x20to\x20exp/regexp.\x0a*\x20godoc:\x20show\x20packages\x20matching\x20a\x20query\x20at\x20the\x20top,\x0a\x09support\x20for\x20complete\x20index\x20serialization,\x0a\x09use\x20go/build\x20to\x20find\x20files\x20in\x20a\x20package.\x0a*\x20gofmt:\x20accept\x20program\x20fragments\x20on\x20standard\x20input,\x20add\x20else\x20test.\x0a*\x20http/cgi:\x20add\x20openbsd\x20environment\x20configuration.\x0a*\x20http:\x20document\x20that\x20Response.Body\x20is\x20non-nil.\x0a*\x20image/png:\x20don't\x20use\x20a\x20goroutine\x20to\x20decode,\x20to\x20permit\x20decode\x20during\x20init.\x0a*\x20json:\x20if\x20a\x20field's\x20tag\x20is\x20\"-\",\x20ignore\x20the\x20field\x20for\x20encoding\x20and\x20decoding.\x0a*\x20ld:\x20grow\x20dwarf\x20includestack\x20on\x20demand.\x0a*\x20net,\x20syscall:\x20implement\x20SetsockoptIPMReq(),\x20and\x0a\x09move\x20to\x20winsock\x20v2.2\x20for\x20multicast\x20support\x20(thanks\x20Paul\x20Lalonde).\x0a*\x20net:\x20add\x20a\x20LookupTXT\x20function.\x0a*\x20os:\x20os.RemoveAll\x20to\x20check\x20for\x20wboth\x20error\x20codes\x20on\x20Windows\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko).\x0a*\x20path/filepath:\x20fix\x20Visitor\x20doc\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09make\x20UNC\x20file\x20names\x20work\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20runtime:\x20optimizations\x20to\x20channels\x20on\x20Windows\x20(thanks\x20Hector\x20Chu),\x0a\x09syscall\x20to\x20return\x20both\x20AX\x20and\x20DX\x20for\x20windows/386\x20(thanks\x20Alex\x20Brainman).\x0a*\x20sync/atomic:\x20add\x2064-bit\x20Load\x20and\x20Store.\x0a*\x20syscall:\x20add\x20route\x20flags\x20for\x20linux\x20(thanks\x20Mikio\x20Hara).\x0a*\x20test:\x20add\x20test\x20for\x20inheriting\x20private\x20method\x20from\x20anonymous\x20field.\x0a*\x20websocket:\x20fix\x20infinite\x20recursion\x20in\x20Addr.String()\x20(thanks\x20Tarmigan\x20Casebolt),\x0a\x09rename\x20websocket.WebSocketAddr\x20to\x20*websocket.Addr.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-09-07\">2011-09-07</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20consists\x20of\x20improvements\x20and\x20bug\x20fixes,\x20including\x20fixes\x0afor\x20issues\x20introduced\x20by\x20escape\x20analysis\x20changes\x20in\x20the\x20gc\x20compiler.\x0a\x0a*\x20build:\x20clear\x20execute\x20bit\x20from\x20Go\x20files\x20(thanks\x20Mike\x20Rosset),\x0a\x09error\x20out\x20if\x20problem\x20with\x20sudo.bash\x20/usr/local/bin\x20(thanks\x20Mike\x20Rosset).\x0a*\x20exp/norm:\x20add\x20Reader\x20and\x20Writer,\x0a\x09performance\x20improvements\x20of\x20quickSpan.\x0a*\x20exp/regexp:\x20bug\x20fixes\x20and\x20RE2\x20tests.\x0a*\x20exp/template/html:\x20string\x20replacement\x20refactoring,\x0a\x09tweaks\x20to\x20js{,_test}.go.\x0a*\x20gc:\x20add\x20-p\x20flag\x20to\x20catch\x20import\x20cycles\x20earlier,\x0a\x09fix\x20label\x20recursion\x20bugs,\x0a\x09fix\x20zero-length\x20struct\x20eval,\x0a\x09zero\x20stack-allocated\x20slice\x20backing\x20arrays,\x0a*\x20gc,\x20ld:\x20fix\x20Windows\x20file\x20paths\x20(thanks\x20Hector\x20Chu).\x0a*\x20go/parser:\x20accept\x20corner\x20cases\x20of\x20signature\x20syntax.\x0a*\x20gobuilder:\x20ignore\x20_test.go\x20files\x20when\x20looking\x20for\x20docs,\x20more\x20logging.\x0a*\x20godoc:\x20minor\x20tweaks\x20for\x20App\x20Engine\x20use.\x0a*\x20gofix:\x20do\x20not\x20convert\x20url\x20in\x20field\x20names\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20gofmt:\x20indent\x20multi-line\x20signatures.\x0a*\x20gopprof:\x20regexp\x20fixes\x20(thanks\x20Hector\x20Chu).\x0a*\x20image/png:\x20check\x20zlib\x20checksum\x20during\x20Decode.\x0a*\x20libmach:\x20fix\x20incorrect\x20use\x20of\x20memset\x20(thanks\x20Dave\x20Cheney).\x0a*\x20misc/goplay:\x20fix\x20template\x20output.\x0a*\x20net:\x20ParseCIDR\x20returns\x20IPNet\x20instead\x20of\x20IPMask\x20(thanks\x20Mikio\x20Hara),\x0a\x09sync\x20CIDRMask\x20code,\x20doc.\x0a*\x20os:\x20use\x20GetFileAttributesEx\x20to\x20implement\x20Stat\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime:\x20fix\x20openbsd\x20386\x20raisesigpipe,\x0a\x09implement\x20exception\x20handling\x20on\x20windows/amd64\x20(thanks\x20Hector\x20Chu),\x0a\x09test\x20for\x20concurrent\x20channel\x20consumers\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20sort:\x20use\x20heapsort\x20to\x20bail\x20out\x20quicksort\x20(thanks\x20Ziad\x20Hatahet).\x0a*\x20sync/atomic:\x20add\x20LoadUintptr,\x20add\x20Store\x20functions.\x0a*\x20syscall:\x20update\x20routing\x20message\x20attributes\x20handling\x20(thanks\x20Mikio\x20Hara).\x0a*\x20template:\x20fix\x20deadlock,\x0a\x09indirect\x20or\x20dereference\x20function\x20arguments\x20if\x20necessary,\x0a\x09slightly\x20simplify\x20the\x20test\x20for\x20assignability\x20of\x20arguments.\x0a*\x20url:\x20handle\x20;\x20in\x20ParseQuery.\x0a*\x20websocket:\x20fix\x20incorrect\x20prints\x20found\x20by\x20govet\x20(thanks\x20Robert\x20Hencke).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-09-01\">2011-09-01</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20contains\x20performance\x20improvements\x20and\x20bug\x20fixes.\x0a\x0aThe\x20gc\x20compiler\x20now\x20does\x20escape\x20analysis,\x20which\x20improves\x20program\x20performance\x0aby\x20placing\x20variables\x20on\x20the\x20call\x20stack\x20instead\x20of\x20the\x20heap\x20when\x20it\x20is\x20safe\x20to\x0ado\x20so.\x0a\x0aThe\x20container/vector\x20package\x20is\x20deprecated\x20and\x20will\x20be\x20removed\x20at\x20some\x20point\x0ain\x20the\x20future.\x0a\x0aOther\x20changes:\x0a*\x20archive/tar:\x20support\x20symlinks.\x20(thanks\x20Mike\x20Rosset)\x0a*\x20big:\x20fix\x20nat.scan\x20bug.\x20(thanks\x20Evan\x20Shaw)\x0a*\x20bufio:\x20handle\x20a\x20\"\\r\\n\"\x20that\x20straddles\x20the\x20buffer.\x0a\x09add\x20openbsd.\x0a\x09avoid\x20redundant\x20bss\x20declarations.\x0a\x09fix\x20unused\x20parameters.\x0a\x09fix\x20windows/amd64\x20build\x20with\x20newest\x20mingw-w64.\x20(thanks\x20Hector\x20Chu)\x0a*\x20bytes:\x20clarify\x20that\x20NewBuffer\x20is\x20not\x20for\x20beginners.\x0a*\x20cgo:\x20explain\x20how\x20to\x20free\x20something.\x0a\x09fix\x20GoBytes.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a\x09fixes\x20callback\x20for\x20windows\x20amd64.\x20(thanks\x20Wei\x20Guangjing)\x0a\x09note\x20that\x20CString\x20result\x20must\x20be\x20freed.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a*\x20cov:\x20remove\x20tautological\x20#defines.\x20(thanks\x20Lucio\x20De\x20Re)\x0a*\x20dashboard:\x20yet\x20another\x20utf-8\x20fix.\x0a*\x20doc/codelab/wiki:\x20fix\x20Makefile.\x0a*\x20doc/progs:\x20fix\x20windows/amd64.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a*\x20doc/tmpltohtml:\x20update\x20to\x20new\x20template\x20package.\x0a*\x20doc:\x20emphasize\x20that\x20environment\x20variables\x20are\x20optional.\x0a*\x20effective_go:\x20convert\x20to\x20use\x20tmpltohtml.\x0a*\x20exp/norm:\x20reduced\x20the\x20size\x20of\x20the\x20byte\x20buffer\x20used\x20by\x20reorderBuffer\x20by\x20half\x20by\x20reusing\x20space\x20when\x20combining.\x0a\x09a\x20few\x20minor\x20fixes\x20to\x20support\x20the\x20implementation\x20of\x20norm.\x0a\x09added\x20implementation\x20for\x20[]byte\x20versions\x20of\x20methods.\x0a*\x20exp/template/html:\x20add\x20some\x20tests\x20for\x20\">\"\x20attributes.\x0a\x09added\x20handling\x20for\x20URL\x20attributes.\x0a\x09differentiate\x20URL-valued\x20attributes\x20(such\x20as\x20href).\x0a\x09reworked\x20escapeText\x20to\x20recognize\x20attr\x20boundaries.\x0a*\x20exp/wingui:\x20made\x20compatible\x20with\x20windows/amd64.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a*\x20flag:\x20add\x20Parsed,\x20restore\x20Usage.\x0a*\x20gc:\x20add\x20openbsd.\x0a\x09escape\x20analysis.\x0a\x09fix\x20build\x20on\x20Plan\x209.\x20(thanks\x20Lucio\x20De\x20Re)\x0a\x09fix\x20div\x20bug.\x0a\x09fix\x20pc/line\x20table.\x20(thanks\x20Julian\x20Phillips)\x0a\x09fix\x20some\x20spurious\x20leaks.\x0a\x09make\x20static\x20initialization\x20more\x20static.\x0a\x09remove\x20JCXZ;\x20add\x20JCXZW,\x20JCXZL,\x20and\x20JCXZQ\x20instructions.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a\x09shuffle\x20#includes.\x0a\x09simplify\x20escape\x20analysis\x20recursion.\x0a\x09tweak\x20and\x20enable\x20escape\x20analysis.\x0a*\x20go/ast\x20cleanup:\x20base\x20File/PackageExports\x20on\x20FilterFile/FilterPackage\x20code.\x0a\x09adjustments\x20to\x20filter\x20function.\x0a\x09fix\x20ast.MergePackageFiles\x20to\x20collect\x20infos\x20about\x20imports.\x20(thanks\x20Sebastien\x20Binet)\x0a\x09generalize\x20ast.FilterFile.\x0a*\x20go/build:\x20add\x20test\x20support\x20&\x20use\x20in\x20gotest.\x0a\x09separate\x20test\x20imports\x20out\x20when\x20scanning.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a*\x20go/parser:\x20fix\x20type\x20switch\x20scoping.\x0a\x09fix\x20type\x20switch\x20scoping.\x0a*\x20gob:\x20explain\x20that\x20Debug\x20isn't\x20useful\x20unless\x20it's\x20compiled\x20in.\x0a*\x20gobuilder:\x20increase\x20log\x20limit.\x0a*\x20godashboard:\x20fix\x20utf-8\x20in\x20user\x20names.\x0a*\x20godoc:\x20first\x20step\x20towards\x20reducing\x20index\x20size.\x0a\x09add\x20dummy\x20playground.js\x20to\x20silence\x20godoc\x20warning\x20at\x20start-up.\x0a\x09added\x20systematic\x20throttling\x20to\x20indexing\x20goroutine.\x0a\x09fix\x20bug\x20in\x20zip.go.\x0a\x09support\x20for\x20reading/writing\x20(splitted)\x20index\x20files.\x0a\x09use\x20virtual\x20file\x20system\x20when\x20generating\x20package\x20synopses.\x0a*\x20gofix:\x20forgot\x20to\x20rename\x20the\x20URL\x20type.\x0a\x09osopen:\x20fixed=true\x20when\x20changing\x20O_CREAT.\x20(thanks\x20Tarmigan\x20Casebolt)\x0a*\x20goinstall:\x20error\x20out\x20with\x20paths\x20that\x20end\x20with\x20'/'.\x20(thanks\x20Tarmigan\x20Casebolt)\x0a\x09report\x20lack\x20of\x20$GOPATH\x20on\x20errors.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a\x09select\x20the\x20tag\x20that\x20is\x20closest\x20to\x20runtime.Version.\x0a*\x20gotry:\x20add\x20missing\x20$.\x20(thanks\x20Tarmigan\x20Casebolt)\x0a*\x20http:\x20add\x20MaxBytesReader\x20to\x20limit\x20request\x20body\x20size.\x0a\x09add\x20file\x20protocol\x20transport.\x0a\x09adjust\x20test\x20threshold\x20for\x20larger\x20suse\x20buffers.\x0a\x09delete\x20error\x20kludge.\x0a\x09on\x20invalid\x20request,\x20send\x20400\x20response.\x0a\x09return\x20413\x20instead\x20of\x20400\x20when\x20the\x20request\x20body\x20is\x20too\x20large.\x20(thanks\x20Dave\x20Cheney)\x0a\x09support\x20setting\x20Transport's\x20TLS\x20client\x20config.\x0a*\x20image/tiff:\x20add\x20a\x20decode\x20benchmark.\x20(thanks\x20Benny\x20Siegert)\x0a\x09decoder\x20optimization.\x20(thanks\x20Benny\x20Siegert)\x0a*\x20image:\x20add\x20PalettedImage\x20interface,\x20and\x20make\x20image/png\x20recognize\x20it.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a*\x20io:\x20add\x20TeeReader.\x20(thanks\x20Hector\x20Chu)\x0a*\x20json:\x20add\x20struct\x20tag\x20option\x20to\x20wrap\x20literals\x20in\x20strings.\x0a\x09calculate\x20Offset\x20for\x20Indent\x20correctly.\x20(thanks\x20Jeff\x20Hodges)\x0a\x09fix\x20decode\x20bug\x20with\x20struct\x20tag\x20names\x20with\x20,opts\x20being\x20ignored.\x0a*\x20ld:\x20handle\x20Plan\x209\x20ar\x20format.\x20(thanks\x20Lucio\x20De\x20Re)\x0a\x09remove\x20duplicate\x20bss\x20definitions.\x0a*\x20libmach:\x20support\x20reading\x20symbols\x20from\x20Windows\x20.exe\x20for\x20nm.\x20(thanks\x20Mateusz\x20Czapli\xc5\x84ski)\x0a*\x20math:\x20fix\x20Pow10\x20loop.\x20(thanks\x20Volker\x20Dobler)\x0a*\x20mime:\x20ParseMediaType\x20returns\x20os.Error\x20now,\x20not\x20a\x20nil\x20map.\x0a\x09media\x20type\x20formatter.\x20(thanks\x20Pascal\x20S.\x20de\x20Kloe)\x0a\x09text\x20charset\x20defaults.\x20(thanks\x20Pascal\x20S.\x20de\x20Kloe)\x0a*\x20misc/dashboard:\x20remove\x20limit\x20for\x20json\x20package\x20list.\x0a*\x20misc/emacs:\x20refine\x20label\x20detection.\x0a*\x20net:\x20add\x20ParseMAC\x20function.\x20(thanks\x20Paul\x20Borman)\x0a\x09change\x20the\x20internal\x20form\x20of\x20IPMask\x20for\x20IPv4.\x20(thanks\x20Mikio\x20Hara)\x0a\x09disable\x20\"tcp\"\x20test\x20on\x20openbsd.\x0a\x09fix\x20windows\x20build.\x20(thanks\x20Alex\x20Brainman)\x0a\x09join\x20and\x20leave\x20a\x20IPv6\x20group\x20address,\x20on\x20a\x20specific\x20interface.\x20(thanks\x20Mikio\x20Hara)\x0a\x09make\x20use\x20of\x20IPv4len,\x20IPv6len.\x20(thanks\x20Mikio\x20Hara)\x0a\x09move\x20internal\x20string\x20manipulation\x20routines\x20to\x20parse.go.\x20(thanks\x20Mikio\x20Hara)\x0a*\x20os:\x20disable\x20Hostname\x20test\x20on\x20OpenBSD.\x0a\x09fix\x20WNOHANG\x20Waitmsg.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a*\x20reflect:\x20add\x20Value.Bytes,\x20Value.SetBytes\x20methods.\x0a*\x20rpc:\x20add\x20benchmark\x20for\x20async\x20rpc\x20calls.\x0a*\x20runtime:\x20add\x20openbsd\x20386\x20defs.h.\x0a\x09add\x20runtime\x20support\x20for\x20openbsd\x20386.\x0a\x09add\x20runtime\xc2\xb7\x20prefix\x20to\x20showframe.\x0a\x09ctrlhandler\x20for\x20windows\x20amd64.\x20(thanks\x20Wei\x20Guangjing)\x0a\x09fix\x20stack\x20cleanup\x20on\x20windows/amd64.\x20(thanks\x20Hector\x20Chu)\x0a\x09fix\x20void\x20warnings.\x0a\x09go\x20interface\x20to\x20cdecl\x20calbacks.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a\x09handle\x20string\x20+\x20char\x20literals\x20in\x20goc2c.\x0a\x09make\x20arm\x20work\x20on\x20Ubuntu\x20Natty\x20qemu.\x0a\x09openbsd\x20thread\x20tweaks.\x0a\x09simplify\x20stack\x20traces.\x0a\x09speed\x20up\x20cgo\x20calls.\x20(thanks\x20Alex\x20Brainman)\x0a\x09use\x20cgo\x20runtime\x20functions\x20to\x20call\x20windows\x20syscalls.\x20(thanks\x20Alex\x20Brainman)\x0a\x09windows/amd64\x20callbacks\x20fixed\x20and\x20syscall\x20fixed\x20to\x20allow\x20using\x20it\x20in\x20callbacks.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a*\x20strconv:\x20put\x20decimal\x20on\x20stack.\x0a*\x20spec:\x20update\x20section\x20on\x20Implementation\x20Differences.\x0a*\x20syscall:\x20SOMAXCONN\x20should\x20be\x200x7fffffff\x20at\x20winsock2.\x20(thanks\x20Yasuhiro\x20Matsumoto)\x0a\x09add\x20openbsd\x20386.\x0a\x09handle\x20RTM_NEWROUTE\x20in\x20ParseNetlinkRouteAttr\x20on\x20Linux.\x20(thanks\x20Albert\x20Strasheim)\x0a\x09handle\x20routing\x20entry\x20in\x20ParseRoutingSockaddr\x20on\x20BSD\x20variants.\x20(thanks\x20Mikio\x20Hara)\x0a\x09openbsd\x20amd64\x20syscall\x20support.\x0a\x09use\x20the\x20vdso\x20page\x20on\x20linux\x20x86\x20for\x20faster\x20syscalls\x20instead\x20of\x20int\x20$0x80.\x20(thanks\x20Yuval\x20Pavel\x20Zholkover)\x0a*\x20template/parse:\x20give\x20if,\x20range,\x20and\x20with\x20a\x20common\x20representation.\x0a*\x20template:\x20grammar\x20fix\x20for\x20template\x20documentation.\x20(thanks\x20Bill\x20Neubauer)\x0a\x09range\x20over\x20channel.\x0a\x09remove\x20else\x20and\x20end\x20nodes\x20from\x20public\x20view.\x0a*\x20test:\x20put\x20GOROOT/bin\x20before\x20all\x20others\x20in\x20run.\x0a*\x20time:\x20fix\x20Plan\x209\x20build.\x20(thanks\x20Fazlul\x20Shahriar)\x0a\x09fix\x20zone\x20during\x20windows\x20test.\x0a*\x20type\x20switches:\x20test\x20for\x20pathological\x20case.\x0a*\x20version.bash:\x20update\x20VERSION\x20on\x20-save\x20if\x20already\x20present.\x20(thanks\x20Gustavo\x20Niemeyer)\x0a*\x20websocket:\x20implements\x20new\x20version\x20of\x20WebSocket\x20protocol.\x20(thanks\x20Fumitoshi\x20Ukai)\x0a*\x20windows/386:\x20clean\x20stack\x20after\x20syscall.\x20(thanks\x20Jaroslavas\x20Po\xc4\x8depko)\x0a*\x20xml:\x20marshal\x20\"parent>child\"\x20tags\x20correctly.\x20(thanks\x20Ross\x20Light)\x0a</pre>\x0a\x0a<h2\x20id=\"2011-08-17\">2011-08-17\x20(<a\x20href=\"release.html#r60\">base\x20for\x20r60</a>)</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20contains\x20some\x20package\x20re-shuffling.\x20Users\x20of\x20the\x20http\x20and\x0atemplate\x20packages\x20may\x20be\x20affected.\x0a\x0aThis\x20weekly\x20replaces\x20the\x20template\x20package\x20with\x20exp/template.\x0aThe\x20original\x20template\x20package\x20is\x20still\x20available\x20as\x20old/template.\x0aThe\x20old/template\x20package\x20is\x20deprecated\x20and\x20will\x20be\x20removed\x20at\x20some\x20point\x0ain\x20the\x20future.\x20The\x20Go\x20tree\x20has\x20been\x20updated\x20to\x20use\x20the\x20new\x20template\x20package.\x0aWe\x20encourage\x20users\x20of\x20the\x20old\x20template\x20package\x20to\x20switch\x20to\x20the\x20new\x20one.\x0aCode\x20that\x20uses\x20template\x20or\x20exp/template\x20will\x20need\x20to\x20change\x0aits\x20import\x20lines\x20to\x20\"old/template\"\x20or\x20\"template\",\x20respectively.\x0a\x0aThe\x20http\x20package's\x20URL\x20parsing\x20and\x20query\x20escaping\x20code\x20(such\x20as\x20ParseURL\x20and\x0aURLEscape)\x20has\x20been\x20moved\x20to\x20the\x20new\x20url\x20package,\x20with\x20several\x20simplifications\x0ato\x20the\x20names.\x20Client\x20code\x20can\x20be\x20updated\x20automatically\x20with\x20gofix.\x0a\x0a*\x20asn1:\x20support\x20unmarshaling\x20structs\x20with\x20int32\x20members\x20(thanks\x20Dave\x20Cheney).\x0a*\x20build:\x20allow\x20builds\x20without\x20cgo\x20or\x20hg,\x0a\x09support\x20versioning\x20without\x20hg\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20builtin:\x20add\x20documentation\x20for\x20builtins.\x0a*\x20cgo:\x20omit\x20duplicate\x20symbols\x20in\x20writeDefs\x20(thanks\x20Julian\x20Phillips).\x0a*\x20misc:\x20add\x20support\x20for\x20OpenBSD.\x0a*\x20doc/codewalk:\x20new\x20Markov\x20chain\x20codewalk.\x0a*\x20exp/norm:\x20added\x20trie\x20lookup\x20code\x20and\x20associated\x20tests,\x0a\x09generate\x20trie\x20struct\x20in\x20triegen.go\x20for\x20better\x20encapsulation,\x0a\x09implementation\x20of\x20decomposition\x20and\x20composing\x20functionality.\x0a*\x20exp/template/html:\x20new\x20experimental\x20package\x20for\x20auto-escaping\x20HTML\x20templates.\x0a*\x20exp/template:\x20don't\x20panic\x20on\x20range\x20of\x20nil\x20interface,\x0a\x09rename\x20Parse*File\x20and\x20Parse*Files\x20for\x20clarity,\x0a\x09support\x20field\x20syntax\x20on\x20maps\x20(thanks\x20Gustavo\x20Niemeyer),\x20and\x0a\x09many\x20other\x20fixes\x20and\x20changes.\x0a*\x20gc:\x20implement\x20nil\x20chan\x20and\x20nil\x20map\x20support.\x0a*\x20go/parser:\x20range\x20clause\x20and\x20type\x20literal\x20fixes.\x0a*\x20godoc:\x20show\x20all\x20top-level\x20decls\x20for\x20(fake)\x20package\x20builtin.\x0a*\x20goinstall:\x20really\x20report\x20all\x20newly-installed\x20public\x20packages.\x0a*\x20html:\x20parse\x20more\x20malformed\x20tags.\x0a*\x20http:\x20fix\x20ParseMultipartForm\x20after\x20MultipartReader\x20error,\x0a\x09fix\x20side\x20effects\x20in\x20DefaultTransport's\x20RoundTrip\x20method\x20(thanks\x20Dave\x20Grijalva).\x0a*\x20json:\x20fix\x20[]unmarshaler\x20case.\x0a*\x20ld:\x20make\x20addaddrplus4\x20static\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20syscall:\x20move\x20multicast\x20address\x20handling\x20to\x20the\x20net\x20package.\x0a*\x20net:\x20Plan\x209\x20support\x20(thanks\x20Fazlul\x20Shahriar),\x0a\x09add\x20SetTimeout\x20to\x20Listener\x20interface\x20(thanks\x20Aleksandar\x20Dezelin),\x0a\x09add\x20multicast\x20stubs\x20for\x20OpenBSD,\x0a\x09return\x20correct\x20local\x20address\x20for\x20an\x20accepted\x20TCP\x20connection\x20(thanks\x20Mikio\x20Hara).\x0a*\x20reflect:\x20panic\x20on\x20Invalid\x20Interface\x20call\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20rpc:\x20implement\x20ServeRequest\x20to\x20synchronously\x20serve\x20a\x20single\x20request,\x0a\x09make\x20Server.Mutex\x20unexported.\x0a*\x20runtime:\x20better\x20checks\x20for\x20syscall.NewCallback\x20parameter\x20(thanks\x20Alex\x20Brainman),\x0a\x09correct\x20SEH\x20installation\x20during\x20callbacks\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20GC\x20bitmap\x20corruption,\x0a\x09fix\x20pseudo-randomness\x20on\x20some\x20selects\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20syscall:\x20make\x20LazyDLL/LazyProc.Mutex\x20unexported.\x0a*\x20test:\x20allow\x20multiple\x20patterns\x20in\x20errchk,\x0a\x09new\x20nil\x20semantics.\x0a*\x20time:\x20take\x20fractional\x20seconds\x20even\x20if\x20not\x20in\x20the\x20format\x20string.\x0a*\x20url:\x20new\x20package.\x0a*\x20utf8:\x20rename\x20some\x20internal\x20constants\x20to\x20remove\x20leading\x20underscores.\x0a*\x20xml:\x20escape\x20string\x20chardata\x20in\x20xml.Marshal.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-08-10\">2011-08-10</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20contains\x20performance\x20improvements\x20and\x20bug\x20fixes.\x0a\x0aThere\x20are\x20no\x20outward-facing\x20changes,\x20but\x20imports\x20of\x20the\x20old-style\x0acontainer/vector\x20package\x20have\x20also\x20been\x20removed\x20from\x20the\x20core\x20library\x20(thanks\x0aJohn\x20Asmuth,\x20Kyle\x20Consalus).\x0a\x0aOther\x20changes:\x0a\x0a*\x205g:\x20fix\x20set\x20but\x20not\x20used\x20error\x20(thanks\x20Dave\x20Cheney).\x0a*\x20cmd/ld:\x20Corrected\x20mismatched\x20print\x20formats\x20and\x20variables\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20errchk:\x20add\x20-0\x20flag.\x0a*\x20exp/norm:\x20fix\x20build\x20by\x20adding\x20a\x20test\x20placeholder,\x0a\x09maketables\x20tool\x20for\x20generating\x20tables\x20for\x20normalization.\x0a*\x20exp/template:\x20bug\x20fixes,\x0a\x09ensure\x20that\x20a\x20valid\x20Set\x20is\x20returned\x20even\x20on\x20error\x20(thanks\x20Roger\x20Peppe),\x0a\x09make\x20index\x20on\x20maps\x20return\x20zero\x20when\x20key\x20not\x20present\x20(thanks\x20Roger\x20Peppe),\x0a\x09split\x20the\x20parse\x20tree\x20into\x20a\x20separate\x20package\x20exp/template/parse,\x0a\x09add\x20url\x20query\x20formatting\x20filter.\x0a*\x20faq:\x20lots\x20of\x20small\x20tweaks\x20plus\x20a\x20couple\x20of\x20new\x20discussions,\x0a\x09variant\x20types,\x20unions.\x0a*\x20fmt:\x20call\x20UpdateMemStats\x20in\x20malloc\x20counter.\x0a*\x20go/build:\x20use\x20GOBIN\x20as\x20binary\x20path\x20for\x20GOROOT.\x0a*\x20gob:\x20add\x20UpdateMemStats\x20calls\x20to\x20malloc\x20counter,\x0a\x09avoid\x20a\x20couple\x20of\x20init-time\x20allocations,\x0a\x09don't\x20invoke\x20GobEncoder\x20on\x20zero\x20values.\x0a*\x20gofmt:\x20update\x20test\x20script\x20so\x20'make\x20test'\x20succeeds.\x0a*\x20html:\x20parse\x20doctype\x20tokens;\x20merge\x20adjacent\x20text\x20nodes.\x0a*\x20http:\x20add\x20more\x20MPEG-4\x20MIME\x20types\x20to\x20sniffer,\x20and\x20disable\x20MP4\x20sniffing,\x0a\x09add\x20test\x20to\x20serve\x20content\x20in\x20index.html\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x09configurable\x20and\x20default\x20request\x20header\x20size\x20limit,\x0a\x09correct\x20format\x20flags\x20when\x20printing\x20errors\x20in\x20tests\x20(thanks\x20Alex\x20Brainman),\x0a\x09correct\x20path\x20to\x20serve\x20index.html\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a*\x20ld:\x20add\x20one\x20empty\x20symbol\x20into\x20pe\x20to\x20make\x20dumpbin\x20works\x20(thanks\x20Wei\x20Guangjing),\x0a\x09fail\x20linking\x20if\x20the\x20top-level\x20package\x20is\x20not\x20main.\x0a*\x20misc/vim:\x20godoc\x20command\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20net:\x20add\x20support\x20for\x20openbsd\x20(thanks\x20Joel\x20Sing),\x0a\x09fix\x20/proc/net/igmp,igmp6\x20reading\x20bug\x20on\x20linux\x20(thanks\x20Mikio\x20Hara),\x0a\x09implement\x20windows\x20LookupMX\x20and\x20LookupAddr\x20(thanks\x20Mikio\x20Hara),\x0a\x09sort\x20SRV\x20records\x20before\x20returning\x20from\x20LookupSRV\x20(thanks\x20Alex\x20Brainman),\x0a*\x20os:\x20add\x20support\x20for\x20openbsd\x20(thanks\x20Joel\x20Sing).\x0a*\x20runtime:\x20add\x20more\x20specialized\x20type\x20algorithms,\x0a\x09correct\x20Note\x20documentation,\x0a\x09faster\x20chan\x20creation\x20on\x20Linux/FreeBSD/Plan9,\x0a\x09openbsd\x20amd64\x20runtime\x20support\x20(thanks\x20Joel\x20Sing),\x0a\x09remove\x20unnecessary\x20locking\x20(thanks\x20Hector\x20Chu).\x0a*\x20scanner:\x20correct\x20error\x20position\x20for\x20illegal\x20UTF-8\x20encodings.\x0a*\x20syscall:\x20delay\x20load\x20of\x20dll\x20functions\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09move\x20BSD\x20mmap\x20syscall\x20(thanks\x20Joel\x20Sing),\x0a\x09update\x20routing\x20message\x20support\x20for\x20BSD\x20variants\x20(thanks\x20Mikio\x20Hara).\x0a*\x20test/bench:\x20note\x20changes\x20after\x20recent\x20improvements\x20to\x20locking\x20and\x20runtime.\x0a*\x20time:\x20add\x20nanoseconds\x20to\x20the\x20Time\x20structure,\x0a\x09parse\x20and\x20format\x20fractional\x20seconds.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-07-29\">2011-07-29</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20contains\x20performance\x20improvements\x20and\x20many\x20bug\x20fixes.\x0a\x0a*\x206l:\x20OpenBSD\x20support.\x0a*\x20archive/zip:\x20handle\x20zip\x20files\x20with\x20more\x20than\x2065535\x20files,\x0a\x09more\x20efficient\x20reader\x20and\x20bug\x20fix.\x0a*\x20big:\x20refine\x20printf\x20formatting\x20and\x20optimize\x20string\x20conversion.\x0a*\x20build:\x20fixes\x20for\x20mingw-w64\x20(thanks\x20Wei\x20Guangjing),\x0a\x09miscellaneous\x20fixes.\x0a*\x20cgo:\x20add\x20GoBytes,\x20fix\x20gmp\x20example.\x0a*\x20exp/norm:\x20API\x20for\x20normalization\x20library.\x0a*\x20exp/regexp:\x20implement\x20regexp\x20API\x20using\x20exp/regexp/syntax.\x0a*\x20exp/template:\x20more\x20tweaks\x20and\x20fixes,\x20convert\x20the\x20tree\x20to\x20use\x20exp/template.\x0a*\x20fmt:\x20handle\x20precision\x200\x20format\x20strings\x20in\x20standard\x20way.\x0a*\x20gc:\x20a\x20raft\x20of\x20bug\x20fixes.\x0a*\x20go/parser:\x20report\x20illegal\x20label\x20declarations\x20at\x20':'.\x0a*\x20gob:\x20send\x20empty\x20but\x20non-nil\x20maps.\x0a*\x20godoc:\x20allow\x20form\x20feed\x20in\x20text\x20files,\x0a\x09app\x20engine\x20configuration\x20and\x20updated\x20documentation.\x0a*\x20goinstall:\x20abort\x20and\x20warn\x20when\x20using\x20any\x20url\x20scheme,\x20not\x20just\x20'http://',\x0a\x09write\x20to\x20goinstall.log\x20in\x20respective\x20GOPATH.\x0a*\x20html:\x20handle\x20character\x20entities\x20without\x20semicolons\x20(thanks\x20Andrew\x20Balholm),\x0a\x09parse\x20misnested\x20formatting\x20tags\x20according\x20to\x20the\x20HTML5\x20spec,\x0a\x09sync\x20html/testdata/webkit\x20with\x20upstream\x20WebKit.\x0a*\x20http:\x20content-type\x20sniffing,\x0a\x09make\x20serveFile\x20redirects\x20relative\x20(thanks\x20Andrew\x20Balholm),\x0a\x09other\x20fixes.\x0a*\x20image/tiff:\x20Do\x20not\x20panic\x20when\x20RowsPerStrip\x20is\x20missing\x20(thanks\x20Benny\x20Siegert).\x0a*\x20io/ioutil:\x20improve\x20performance\x20of\x20ioutil.Discard\x20(thanks\x20Mike\x20Solomon).\x0a*\x20ld:\x20detect\x20all\x20import\x20cycles,\x0a\x09ldpe\x20fixes\x20(thanks\x20Wei\x20Guangjing),\x0a\x09remove\x20cseekend\x20and\x20redo\x20pe\x20writing\x20(thanks\x20Alex\x20Brainman),\x0a\x09remove\x20overlap\x20of\x20ELF\x20sections\x20on\x20dynamic\x20binaries\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20net/textproto:\x20avoid\x201\x20copy\x20in\x20ReadLine,\x20ReadContinuedLine.\x0a*\x20net:\x20fix\x20memory\x20corruption\x20in\x20windows\x20*netFD.ReadFrom\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime:\x20faster\x20entersyscall/exitsyscall,\x0a\x09fix\x20scheduler\x20races\x20(thanks\x20Hector\x20Chu),\x0a\x09higher\x20goroutine\x20arg\x20limit,\x20clearer\x20error,\x0a\x09parallelism-related\x20performance\x20optimizations\x20and\x20fixes,\x0a\x09replace\x20byte-at-a-time\x20zeroing\x20loop\x20with\x20memclr\x20(thanks\x20Quan\x20Yong\x20Zhai).\x0a*\x20sort:\x20fix\x20Float64Slice\x20sort;\x20NaN\x20smallest\x20value\x20(thanks\x20Florian\x20Uekermann).\x0a*\x20src:\x20removed\x20some\x20uses\x20of\x20container/vector\x20(thanks\x20John\x20Asmuth).\x0a*\x20sync:\x20improve\x20Once\x20fast\x20path.\x0a*\x20unicode:\x20fix\x20case-mapping\x20for\x20roman\x20numerals.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-07-19\">2011-07-19</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20a\x20language\x20change\x20and\x20a\x20change\x20to\x20the\x20image\x0apackage\x20that\x20may\x20require\x20changes\x20to\x20client\x20code.\x0a\x0aThe\x20language\x20change\x20is\x20that\x20an\x20\"else\"\x20block\x20is\x20now\x20required\x20to\x20have\x20braces\x0aexcept\x20if\x20the\x20body\x20of\x20the\x20\"else\"\x20is\x20another\x20\"if\".\x20Since\x20gofmt\x20always\x20puts\x20those\x0abraces\x20in\x20anyway,\x20programs\x20will\x20not\x20be\x20affected\x20unless\x20they\x20contain\x20\"else\x20for\",\x0a\"else\x20switch\",\x20or\x20\"else\x20select\".\x20Run\x20gofmt\x20to\x20fix\x20any\x20such\x20programs.\x0a\x0aThe\x20image\x20package\x20has\x20had\x20significant\x20changes\x20made\x20to\x20the\x20Pix\x20field\x20of\x20struct\x0atypes\x20such\x20as\x20image.RGBA\x20and\x20image.NRGBA.\x20The\x20image.Image\x20interface\x20type\x20has\x0anot\x20changed,\x20though,\x20and\x20you\x20should\x20not\x20need\x20to\x20change\x20your\x20code\x20if\x20you\x20don't\x0aexplicitly\x20refer\x20to\x20Pix\x20fields.\x20For\x20example,\x20if\x20you\x20decode\x20a\x20number\x20of\x20images\x0ausing\x20the\x20image/jpeg\x20package,\x20compose\x20them\x20using\x20image/draw,\x20and\x20then\x20encode\x0athe\x20result\x20using\x20image/png,\x20then\x20your\x20code\x20should\x20still\x20work\x20as\x20before.\x0a\x0aIf\x20you\x20do\x20explicitly\x20refer\x20to\x20Pix\x20fields,\x20there\x20are\x20two\x20changes.\x20\x20First,\x20Pix[0]\x0anow\x20refers\x20to\x20the\x20pixel\x20at\x20Bounds().Min\x20instead\x20of\x20the\x20pixel\x20at\x20(0,\x200).\x20Second,\x0athe\x20element\x20type\x20of\x20the\x20Pix\x20slice\x20is\x20now\x20uint8\x20instead\x20of\x20image.FooColor.\x20For\x0aexample,\x20for\x20an\x20image.RGBA,\x20the\x20channel\x20values\x20will\x20be\x20packed\x20R,\x20G,\x20B,\x20A,\x20R,\x20G,\x0aB,\x20A,\x20etc.\x20For\x2016-bits-per-channel\x20color\x20types,\x20the\x20pixel\x20data\x20will\x20be\x20stored\x0aas\x20big-endian\x20uint8s.\x0a\x0aMost\x20Pix\x20field\x20types\x20have\x20changed,\x20and\x20so\x20if\x20your\x20code\x20still\x20compiles\x20after\x0athis\x20change,\x20then\x20you\x20probably\x20don't\x20need\x20to\x20make\x20any\x20further\x20changes\x20(unless\x0ayou\x20use\x20an\x20image.Paletted's\x20Pix\x20field).\x20If\x20you\x20do\x20get\x20compiler\x20errors,\x20code\x0athat\x20used\x20to\x20look\x20like\x20this:\x0a\x0a\x09//\x20Get\x20the\x20R,\x20G,\x20B,\x20A\x20values\x20for\x20the\x20pixel\x20at\x20(x,\x20y).\x0a\x09var\x20m\x20*image.RGBA\x20=\x20loadAnImage()\x0a\x09c\x20:=\x20m.Pix[y*m.Stride\x20+\x20x]\x0a\x09r,\x20g,\x20b,\x20a\x20:=\x20c.R,\x20c.G,\x20c.B,\x20c.A\x0a\x0ashould\x20now\x20look\x20like\x20this:\x0a\x0a\x09//\x20Get\x20the\x20R,\x20G,\x20B,\x20A\x20values\x20for\x20the\x20pixel\x20at\x20(x,\x20y).\x0a\x09var\x20m\x20*image.RGBA\x20=\x20loadAnImage()\x0a\x09i\x20:=\x20(y-m.Rect.Min.Y)*m.Stride\x20+\x20(x-m.Rect.Min.X)*4\x0a\x09r\x20:=\x20m.Pix[i+0]\x0a\x09g\x20:=\x20m.Pix[i+1]\x0a\x09b\x20:=\x20m.Pix[i+2]\x0a\x09a\x20:=\x20m.Pix[i+3]\x0a\x0aThis\x20image\x20package\x20change\x20will\x20not\x20be\x20fixed\x20by\x20gofix:\x20how\x20best\x20to\x20translate\x0acode\x20into\x20something\x20efficient\x20and\x20idiomatic\x20depends\x20on\x20the\x20surrounding\x20context,\x0aand\x20is\x20not\x20easily\x20automatable.\x20Examples\x20of\x20what\x20to\x20do\x20can\x20be\x20found\x20in\x20the\x0achanges\x20to\x20image/draw/draw.go\x20in\x20http://codereview.appspot.com/4675076/\x0a\x0aOther\x20changes:\x0a*\x206l:\x20change\x20default\x20output\x20name\x20to\x206.out.exe\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20archive/zip:\x20add\x20Writer,\x0a\x09add\x20Mtime_ns\x20function\x20to\x20get\x20modified\x20time\x20in\x20sensible\x20format.\x0a*\x20cc,\x20ld,\x20gc:\x20fixes\x20for\x20Plan\x209\x20build\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20cgi:\x20close\x20stdout\x20reader\x20pipe\x20when\x20finished.\x0a*\x20cgo:\x20add\x20missing\x20semicolon\x20in\x20generated\x20struct,\x0a\x09windows\x20amd64\x20port\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20codereview:\x20fix\x20for\x20Mercurial\x201.9.\x0a*\x20dashboard:\x20list\x20\"most\x20installed\x20this\x20week\"\x20with\x20rolling\x20count.\x0a*\x20debug/elf:\x20read\x20ELF\x20Program\x20headers\x20(thanks\x20Matthew\x20Horsnell).\x0a*\x20debug/pe:\x20fixes\x20ImportedSymbols\x20for\x20Win64\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20debug/proc:\x20remove\x20unused\x20package.\x0a*\x20doc/talks/io2010:\x20update\x20with\x20gofix\x20and\x20handle\x20the\x20errors.\x0a*\x20exp/eval,\x20exp/ogle:\x20remove\x20packages\x20eval\x20and\x20ogle.\x0a*\x20exp/regexp/syntax:\x20add\x20Prog.NumCap.\x0a*\x20exp/template:\x20API\x20changes,\x20bug\x20fixes,\x20and\x20tweaks.\x0a*\x20flag:\x20make\x20-help\x20nicer.\x0a*\x20fmt:\x20Scan(&amp;int)\x20was\x20mishandling\x20a\x20lone\x20digit.\x0a*\x20gc:\x20fix\x20closure\x20bug,\x0a\x09fix\x20to\x20build\x20with\x20clang\x20(thanks\x20Dave\x20Cheney),\x0a\x09make\x20size\x20of\x20struct{}\x20and\x20[0]byte\x200\x20bytes\x20(thanks\x20Robert\x20Hencke),\x0a\x09some\x20enhancements\x20to\x20printing\x20debug\x20info.\x0a*\x20gif:\x20fix\x20local\x20color\x20map\x20and\x20coordinates.\x0a*\x20go/build:\x20fixes\x20for\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09include\x20processing\x20of\x20.c\x20files\x20for\x20cgo\x20packages\x20(thanks\x20Alex\x20Brainman),\x0a\x09less\x20aggressive\x20failure\x20when\x20GOROOT\x20not\x20found.\x0a*\x20go/printer:\x20changed\x20max.\x20number\x20of\x20newlines\x20from\x203\x20to\x202.\x0a*\x20gob:\x20register\x20more\x20slice\x20types\x20(thanks\x20Bobby\x20Powers).\x0a*\x20godoc:\x20support\x20for\x20file\x20systems\x20stored\x20in\x20.zip\x20files.\x0a*\x20goinstall,\x20dashboard:\x20Google\x20Code\x20now\x20supports\x20git\x20(thanks\x20Tarmigan\x20Casebolt).\x0a*\x20hash/crc32:\x20add\x20SSE4.2\x20support.\x0a*\x20html:\x20update\x20section\x20references\x20in\x20comments\x20to\x20the\x20latest\x20HTML5\x20spec.\x0a*\x20http:\x20drain\x20the\x20pipe\x20output\x20in\x20TestHandlerPanic\x20to\x20avoid\x20logging\x20deadlock,\x0a\x09fix\x20Content-Type\x20of\x20file\x20extension\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x09implement\x20http.FileSystem\x20for\x20zip\x20files,\x0a\x09let\x20FileServer\x20work\x20when\x20path\x20doesn't\x20begin\x20with\x20a\x20slash,\x0a\x09support\x20for\x20periodic\x20flushing\x20in\x20ReverseProxy.\x0a*\x20image/draw:\x20add\x20benchmarks.\x0a*\x20json:\x20add\x20omitempty\x20struct\x20tag\x20option,\x0a\x09allow\x20using\x20'$'\x20and\x20'-'\x20as\x20the\x20struct\x20field's\x20tag\x20(thanks\x20Mikio\x20Hara),\x0a\x09encode\x20\\r\x20and\x20\\n\x20in\x20strings\x20as\x20e.g.\x20\"\\n\",\x20not\x20\"\\u000A\"\x20(thanks\x20Evan\x20Martin),\x0a\x09escape\x20<\x20and\x20>\x20in\x20any\x20JSON\x20string\x20for\x20XSS\x20prevention.\x0a*\x20ld:\x20allow\x20seek\x20within\x20write\x20buffer<\x0a\x09add\x20a\x20PT_LOAD\x20PHDR\x20entry\x20for\x20the\x20PHDR\x20(thanks\x20David\x20Anderson).\x0a*\x20net:\x20windows/amd64\x20port\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20os:\x20plan9:\x20add\x20Process.Signal\x20as\x20a\x20way\x20to\x20send\x20notes\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20os:\x20don't\x20permit\x20Process.Signal\x20after\x20a\x20successful\x20Wait.\x0a*\x20path/filepath:\x20fixes\x20for\x20windows\x20paths\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20add\x20Value.NumMethod,\x0a\x09panic\x20if\x20Method\x20index\x20is\x20out\x20of\x20range\x20for\x20a\x20type.\x0a*\x20runtime:\x20faster\x20entersyscall,\x20exitsyscall,\x0a\x09fix\x20panic\x20for\x20make(chan\x20[0]byte),\x0a\x09fix\x20subtle\x20select\x20bug\x20(thanks\x20Hector\x20Chu),\x0a\x09make\x20goc2c\x20build\x20on\x20Plan\x209\x20(thanks\x20Lucio\x20De\x20Re),\x0a\x09make\x20TestSideEffectOrder\x20work\x20twice,\x0a\x09several\x20parallelism-related\x20optimizations\x20and\x20fixes,\x0a\x09stdcall_raw\x20stack\x2016byte\x20align\x20for\x20Win64\x20(thanks\x20Wei\x20Guangjing),\x0a\x09string-related\x20optimizations\x20(thanks\x20Quan\x20Yong\x20Zhai),\x0a\x09track\x20running\x20goroutine\x20count.\x0a*\x20strconv:\x20handle\x20[-+]Infinity\x20in\x20atof.\x0a*\x20sync:\x20add\x20fast\x20paths\x20to\x20WaitGroup,\x0a\x09improve\x20RWMutex\x20performance.\x0a*\x20syscall:\x20add\x20Flock\x20on\x20Linux,\x0a\x09parse\x20and\x20encode\x20SCM_RIGHTS\x20and\x20SCM_CREDENTIALS\x20(thanks\x20Albert\x20Strasheim).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-07-07\">2011-07-07\x20(<a\x20href=\"release.html#r59\">base\x20for\x20r59</a>)</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20snapshot\x20includes\x20changes\x20to\x20the\x20strings,\x20http,\x20reflect,\x20json,\x20and\x0axml\x20packages.\x20Code\x20that\x20uses\x20these\x20packages\x20will\x20need\x20changes.\x20Most\x20of\x20these\x0achanges\x20can\x20be\x20made\x20automatically\x20with\x20gofix.\x0a\x0aThe\x20strings\x20package's\x20Split\x20function\x20has\x20itself\x20been\x20split\x20into\x20Split\x20and\x0aSplitN.\x20SplitN\x20is\x20the\x20same\x20as\x20the\x20old\x20Split.\x20The\x20new\x20Split\x20is\x20equivalent\x20to\x0aSplitN\x20with\x20a\x20final\x20argument\x20of\x20-1.\x0a\x0aThe\x20http\x20package\x20has\x20a\x20new\x20FileSystem\x20interface\x20that\x20provides\x20access\x20to\x20files.\x0aThe\x20FileServer\x20helper\x20now\x20takes\x20a\x20FileSystem\x20argument\x20instead\x20of\x20an\x20explicit\x0afile\x20system\x20root.\x20By\x20implementing\x20your\x20own\x20FileSystem\x20you\x20can\x20use\x20the\x0aFileServer\x20to\x20serve\x20arbitrary\x20data.\x0a\x0aThe\x20reflect\x20package\x20supports\x20a\x20new\x20struct\x20tag\x20scheme\x20that\x20enables\x20sharing\x20of\x0astruct\x20tags\x20between\x20multiple\x20packages.\x0aIn\x20this\x20scheme,\x20the\x20tags\x20must\x20be\x20of\x20the\x20form:\x0a\x20\x20\x20\x20\x20\x20\x20\x20key:\"value\"\x20key2:\"value2\"\x0areflect.StructField's\x20Tag\x20field\x20now\x20has\x20type\x20StructTag\x20(a\x20string\x20type),\x20which\x0ahas\x20method\x20Get(key\x20string)\x20string\x20that\x20returns\x20the\x20associated\x20value.\x0aClients\x20of\x20json\x20and\x20xml\x20will\x20need\x20to\x20be\x20updated.\x20Code\x20that\x20says\x0a\x20\x20\x20\x20\x20\x20\x20\x20type\x20T\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20X\x20int\x20\"name\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0ashould\x20become\x0a\x20\x20\x20\x20\x20\x20\x20\x20type\x20T\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20X\x20int\x20`json:\"name\"`\x20\x20//\x20or\x20`xml:\"name\"`\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0aUse\x20govet\x20to\x20identify\x20struct\x20tags\x20that\x20need\x20to\x20be\x20changed\x20to\x20use\x20the\x20new\x20syntax.\x0a\x0aOther\x20changes:\x0a*\x205l,\x206l,\x208l:\x20drop\x20use\x20of\x20ed\x20during\x20build.\x0a*\x20asn1:\x20support\x20T61\x20and\x20UTF8\x20string.\x0a*\x20bufio:\x20do\x20not\x20cache\x20Read\x20errors\x20(thanks\x20Graham\x20Miller).\x0a*\x20build:\x20make\x20version.bash\x20aware\x20of\x20branches.\x0a*\x20cgi:\x20don't\x20depend\x20on\x20CGI.pm\x20for\x20tests.\x0a*\x20codereview:\x20make\x20--ignore_hgpatch_failure\x20work\x20again,\x0a\x09restrict\x20sync\x20to\x20default\x20branch.\x0a*\x20crypto/openpgp:\x20add\x20ability\x20to\x20reserialize\x20keys,\x0a\x09bug\x20fix\x20(thanks\x20Gideon\x20Jan-Wessel\x20Redelinghuys).\x0a*\x20crypto/tls:\x20fix\x20generate_cert.go.\x0a*\x20crypto/x509:\x20prevent\x20chain\x20cycles\x20in\x20Verify.\x0a*\x20csv:\x20new\x20package.\x0a*\x20doc:\x20remove\x20ed\x20from\x20apt-get\x20package\x20list.\x0a*\x20docs:\x20fold\x20the\x20prog.sh\x20scripting\x20from\x20makehtml\x20into\x20htmlgen\x20itself.\x0a*\x20ebnflint:\x20better\x20handling\x20of\x20stdin.\x0a*\x20exp/regexp/syntax:\x20new\x20experimental\x20RE2-based\x20regexp\x20implementation.\x0a*\x20exp/template:\x20a\x20new\x20experimental\x20templating\x20package.\x0a*\x20fmt:\x20add\x20SkipSpace\x20to\x20fmt's\x20ScanState\x20interface.\x0a*\x20fmt:\x20rename\x20errno\x20and\x20error\x20to\x20err\x20for\x20doc\x20consistency.\x0a*\x20gc:\x20avoid\x20package\x20name\x20ambiguity\x20in\x20error\x20messages,\x0a\x09fix\x20package\x20quoting\x20logic,\x0a\x09fixes\x20for\x20Plan\x209\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20go/build:\x20evaluate\x20symlinks\x20before\x20comparing\x20path\x20to\x20GOPATH.\x0a*\x20gob:\x20use\x20exported\x20fields\x20in\x20structs\x20in\x20the\x20package\x20documentation.\x0a*\x20godoc:\x20ignore\x20directories\x20that\x20begin\x20with\x20'.',\x0a\x09search\x20GOPATH\x20for\x20documentation.\x0a*\x20gofix:\x20os/signal,\x20path/filepath,\x20and\x20sort\x20fixes\x20(thanks\x20Robert\x20Hencke),\x0a*\x20goinstall:\x20add\x20support\x20for\x20generic\x20hosts\x20(thanks\x20Julian\x20Phillips),\x0a\x09only\x20report\x20successfully-installed\x20packages\x20to\x20the\x20dashboard,\x0a\x09try\x20to\x20access\x20via\x20https\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20gotest:\x20add\x20-test.benchtime\x20and\x20-test.cpu\x20flags.\x0a*\x20html:\x20fixes\x20and\x20improvements\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20http/cgi:\x20add\x20Handler.Dir\x20to\x20specify\x20working\x20directory\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20http:\x20add\x20StripPrefix\x20handler\x20wrapper,\x0a\x09assume\x20ContentLength\x200\x20on\x20GET\x20requests,\x0a\x09better\x20handling\x20of\x200-length\x20Request.Body,\x0a\x09do\x20TLS\x20handshake\x20explicitly\x20before\x20copying\x20TLS\x20state,\x0a\x09document\x20that\x20ServerConn\x20and\x20ClientConn\x20are\x20low-level,\x0a\x09make\x20NewChunkedReader\x20public\x20(thanks\x20Andrew\x20Balholm),\x0a\x09respect\x20Handlers\x20setting\x20Connection:\x20close\x20in\x20their\x20response.\x0a*\x20image:\x20more\x20tests,\x20Paletted.Opaque\x20optimization.\x0a*\x20io.WriteString:\x20if\x20the\x20object\x20has\x20a\x20WriteString\x20method,\x20use\x20it\x20(thanks\x20Evan\x20Shaw).\x0a*\x20ld:\x20elide\x20the\x20Go\x20symbol\x20table\x20when\x20using\x20-s\x20(thanks\x20Anthony\x20Martin).\x0a*\x20ld:\x20fix\x20ELF\x20strip\x20by\x20removing\x20overlap\x20of\x20sections\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20mime/multipart:\x20parse\x20LF-delimited\x20messages,\x20not\x20just\x20CRLF.\x0a*\x20mime:\x20permit\x20lower-case\x20media\x20type\x20parameters\x20(thanks\x20Pascal\x20S.\x20de\x20Kloe).\x0a*\x20misc/dashboard:\x20new\x20features\x20and\x20improvements\x20(not\x20yet\x20deployed).\x0a*\x20misc/emacs:\x20update\x20list\x20of\x20builtins\x20(thanks\x20Quan\x20Yong\x20Zhai).\x0a*\x20misc/vim:\x20allow\x20only\x20utf-8\x20for\x20file\x20encoding\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20os:\x20fix\x20documentation\x20for\x20FileInfo.Name,\x0a\x09simplify\x20WriteString,\x0a\x09use\x20a\x20different\x20symbol\x20from\x20syscall\x20in\x20mkunixsignals.sh.\x0a*\x20path/filepath:\x20enable\x20TestWalk\x20to\x20run\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20add\x20MethodByName,\x0a\x09allow\x20Len\x20on\x20String\x20values.\x0a*\x20regexp:\x20document\x20that\x20Regexp\x20is\x20thread-safe.\x0a*\x20runtime/cgo:\x20check\x20for\x20errors\x20from\x20pthread_create\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20runtime:\x20add\x20Semacquire/Semrelease\x20benchmarks,\x0a\x09improved\x20Semacquire/Semrelease\x20implementation,\x0a\x09windows/amd64\x20port\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20sync:\x20add\x20fast\x20path\x20to\x20Once,\x0a\x09improve\x20Mutex\x20to\x20allow\x20successive\x20acquisitions,\x0a\x09new\x20and\x20improved\x20benchmarks.\x0a*\x20syscall:\x20regenerate\x20zerrors\x20for\x20darwin/linux/freebsd,\x0a\x09support\x20for\x20tty\x20options\x20in\x20StartProcess\x20(thanks\x20Ken\x20Rockot).\x0a*\x20testing:\x20make\x20ResetTimer\x20not\x20start/stop\x20the\x20timer,\x0a\x09scale\x20benchmark\x20precision\x20to\x200.01ns\x20if\x20needed.\x0a*\x20time:\x20zero-pad\x20two-digit\x20years.\x0a*\x20unicode/maketables:\x20update\x20debugging\x20data.\x0a*\x20windows:\x20define\x20and\x20use\x20syscall.Handle\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20xml:\x20add\x20Marshal\x20and\x20MarshalIndent.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-06-23\">2011-06-23</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20a\x20language\x20change\x20that\x20restricts\x20the\x20use\x20of\x20goto.\x0aIn\x20essence,\x20a\x20\"goto\"\x20statement\x20outside\x20a\x20block\x20cannot\x20jump\x20to\x20a\x20label\x20inside\x0athat\x20block.\x20Your\x20code\x20may\x20require\x20changes\x20if\x20it\x20uses\x20goto.\x0aThis\x20changeset\x20shows\x20how\x20the\x20new\x20rule\x20affected\x20the\x20Go\x20tree:\x0a\x09http://code.google.com/p/go/source/detail?r=dc6d3cf9279d\x0a\x0aThe\x20os.ErrorString\x20type\x20has\x20been\x20hidden.\x20If\x20your\x20code\x20uses\x20os.ErrorString\x20it\x0amust\x20be\x20changed.\x20Most\x20uses\x20of\x20os.ErrorString\x20can\x20be\x20replaced\x20with\x20os.NewError.\x0a\x0aOther\x20changes:\x0a*\x205c:\x20do\x20not\x20use\x20R9\x20and\x20R10.\x0a*\x208l:\x20more\x20fixes\x20for\x20Plan\x209\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20build:\x20Make.ccmd:\x20link\x20with\x20mach\x20lib\x20(thanks\x20Joe\x20Poirier).\x0a*\x20build:\x20exclude\x20packages\x20that\x20fail\x20on\x20Plan\x209\x20(thanks\x20Anthony\x20Martin).\x0a*\x20cc:\x20nit:\x20silence\x20comment\x20warnings\x20(thanks\x20Dave\x20Cheney).\x0a*\x20codereview.py:\x20note\x20that\x20hg\x20change\x20-d\x20abandons\x20a\x20change\x20list\x20(thanks\x20Robert\x20Hencke).\x0a*\x20crypto/openpgp:\x20add\x20ElGamal\x20support.\x0a*\x20doc/faq:\x20add\x20question\x20about\x20converting\x20from\x20[]T\x20to\x20[]interface{}.\x0a*\x20doc:\x20Effective\x20Go:\x20fix\x20variadic\x20function\x20example\x20(thanks\x20Ben\x20Lynn).\x0a*\x20exec:\x20LookPath\x20should\x20not\x20search\x20%PATH%\x20for\x20files\x20like\x20c:cmd.exe\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20support\x20for\x20Plan\x209\x20(thanks\x20Anthony\x20Martin),\x0a\x20\x20\x20\x20\x20\x20\x20\x20better\x20error\x20message\x20for\x20windows\x20LookPath\x20(thanks\x20Alex\x20Brainman).\x0a*\x20fmt:\x20catch\x20panics\x20from\x20calls\x20to\x20String\x20etc.\x0a*\x20gc:\x20descriptive\x20panic\x20for\x20nil\x20pointer\x20-&gt;\x20value\x20method\x20call,\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20goto\x20restriction,\x0a\x20\x20\x20\x20\x20\x20\x20\x20unsafe.Alignof,\x20unsafe.Offsetof,\x20unsafe.Sizeof\x20now\x20return\x20uintptr.\x0a*\x20go/build:\x20include\x20Import\x20objects\x20in\x20Script\x20Inputs.\x0a*\x20godefs:\x20rudimentary\x20tests\x20(thanks\x20Robert\x20Hencke).\x0a*\x20goinstall:\x20refactor\x20and\x20generalize\x20repo\x20handling\x20code\x20(thanks\x20Julian\x20Phillips),\x0a\x20\x20\x20\x20\x20\x20\x20\x20temporarily\x20use\x20Makefiles\x20by\x20default\x20(override\x20with\x20-make=false).\x0a*\x20gopprof:\x20update\x20list\x20of\x20memory\x20allocators.\x0a*\x20http:\x20add\x20Server.ListenAndServeTLS,\x0a\x20\x20\x20\x20\x20\x20\x20\x20buffer\x20request.Write,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20req.Cookie(name)\x20with\x20cookies\x20in\x20one\x20header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20permit\x20handlers\x20to\x20explicitly\x20remove\x20the\x20Date\x20header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20write\x20Header\x20keys\x20with\x20empty\x20values.\x0a*\x20image:\x20basic\x20test\x20for\x20the\x2016-bits-per-color-channel\x20types.\x0a*\x20io:\x20clarify\x20Read,\x20ReadAt,\x20Copy,\x20Copyn\x20EOF\x20behavior.\x0a*\x20ld:\x20don't\x20attempt\x20to\x20build\x20dynamic\x20sections\x20unnecessarily\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20libmach:\x20fix\x20disassembly\x20of\x20FCMOVcc\x20and\x20FCOMI\x20(thanks\x20Anthony\x20Martin),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20tracing\x20on\x20linux\x20(for\x20cov)\x20(thanks\x20Anthony\x20Martin).\x0a*\x20mime:\x20fix\x20RFC\x20references\x20(thanks\x20Pascal\x20S.\x20de\x20Kloe).\x0a*\x20misc/gobuilder:\x20run\x20make\x20single-threaded\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20misc/godashboard:\x20Accept\x20sub-directories\x20for\x20goinstall's\x20report\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20nacl,\x20tiny:\x20remove\x20vestiges\x20(thanks\x20Robert\x20Hencke).\x0a*\x20net,\x20syscall:\x20interface\x20for\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20os:\x20change\x20Waitmsg\x20String\x20method\x20to\x20use\x20pointer\x20receiver\x20(thanks\x20Graham\x20Miller).\x0a*\x20runtime:\x20don't\x20use\x20twice\x20the\x20memory\x20with\x20grsec-like\x20kernels\x20(thanks\x20Gustavo\x20Niemeyer),\x0a*\x20spec:\x20disallow\x20goto\x20into\x20blocks.\x0a*\x20sync:\x20restore\x20GOMAXPROCS\x20during\x20benchmarks.\x0a*\x20syscall:\x20add\x20LSF\x20support\x20for\x20linux\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20socket\x20control\x20message\x20support\x20for\x20darwin,\x20freebsd,\x20linux\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20tty\x20support\x20to\x20StartProcess\x20(thanks\x20Ken\x20Rockot),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20build\x20for\x20Sizeof\x20change.\x0a*\x20test:\x20test\x20of\x20goto\x20restrictions.\x0a*\x20time:\x20add\x20support\x20for\x20Plan\x209\x20(thanks\x20Anthony\x20Martin).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-06-16\">2011-06-16</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20sort\x20and\x20image/draw\x20packages\x20that\x20will\x0arequire\x20changes\x20to\x20client\x20code.\x0a\x0aThe\x20sort.IntArray\x20type\x20has\x20been\x20renamed\x20to\x20IntSlice,\x20and\x20similarly\x20for\x0aStringArray\x20and\x20Float64Array.\x0a\x0aThe\x20image/draw\x20package's\x20Draw\x20function\x20now\x20takes\x20an\x20additional\x20argument,\x0aa\x20compositing\x20operator.\x20If\x20in\x20doubt,\x20use\x20draw.Over.\x0a\x0aOther\x20changes:\x0a*\x20build:\x20fix\x20header\x20files\x20for\x20Plan\x209\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20cgo:\x20handle\x20new\x20Apple\x20LLVM-based\x20gcc\x20from\x20Xcode\x204.2.\x0a*\x20crypto/openpgp:\x20add\x20ability\x20to\x20encrypt\x20and\x20sign\x20messages.\x0a*\x20doc/gopher:\x20add\x20goggled\x20gopher\x20logo\x20for\x20App\x20Engine.\x0a*\x20doc:\x20Update\x20notes\x20for\x203-day\x20Go\x20course.\x0a*\x20exec:\x20make\x20LookPath\x20work\x20when\x20PATHEXT\x20var\x20not\x20set\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20exp/regexp/syntax:\x20syntax\x20data\x20structures,\x20parser,\x20escapes,\x20character\x20classes.\x0a*\x20exp/template:\x20lexical\x20scanner\x20for\x20new\x20template\x20package.\x0a*\x20fmt:\x20debugging\x20formats\x20for\x20characters:\x20%+q\x20%#U.\x0a*\x20gc:\x20frame\x20compaction\x20for\x20arm,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20go\x20print()\x20and\x20go\x20println(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20work\x20around\x20goto\x20bug.\x0a*\x20go/build:\x20fixes,\x20self-contained\x20tests.\x0a*\x20go/printer,\x20gofmt:\x20print\x20\"select\x20{}\"\x20on\x20one\x20line.\x0a*\x20godoc:\x20replace\x20OS\x20file\x20system\x20accesses\x20in\x20favor\x20of\x20a\x20FileSystem\x20interface.\x0a*\x20gofix:\x20fix\x20inconsistent\x20indentation\x20in\x20help\x20output\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20goinstall:\x20use\x20go/build\x20package\x20to\x20scan\x20and\x20build\x20packages.\x0a*\x20http/spdy:\x20improve\x20error\x20handling\x20(thanks\x20William\x20Chan).\x0a*\x20http:\x20use\x20runtime/debug.Stack()\x20to\x20dump\x20stack\x20trace\x20on\x20panic.\x0a*\x20ld:\x20dwarf\x20emit\x20filenames\x20in\x20debug_line\x20header\x20instead\x20of\x20as\x20extended\x20opcodes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20link\x20Windows\x20PE\x20__declspec(dllimport)\x20symbol\x20(thanks\x20Wei\x20Guangjing),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20.rodata\x20section\x20read-only\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20mail:\x20decode\x20RFC\x202047\x20\"B\"\x20encoding.\x0a*\x20mime/multipart:\x20remove\x20temp\x20files\x20after\x20tests\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20net:\x20export\x20all\x20fields\x20in\x20Interface\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20rearrange\x20source\x20to\x20run\x20more\x20tests\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20sendfile\x20for\x20win32\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20os:\x20Plan\x209,\x20fix\x20OpenFile\x20&amp;\x20Chmod,\x20add\x20Process.Kill\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20runtime:\x20fix\x20Plan\x209\x20\"lingering\x20goroutines\x20bug\"\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20spec:\x20clarify\x20rules\x20for\x20append,\x20scope\x20rules\x20for\x20:=,\x0a\x20\x20\x20\x20\x20\x20\x20\x20specify\x20constant\x20conversions,\x0a\x20\x20\x20\x20\x20\x20\x20\x20unsafe.Alignof/Offsetof/Sizeof\x20return\x20uintptr.\x0a*\x20syscall,\x20os,\x20exec:\x20add\x20*syscall.SysProcAttr\x20field\x20to\x20os.ProcAttr\x20and\x20exec.Cmd.\x0a*\x20syscall:\x20add\x20ptrace\x20on\x20darwin\x20(thanks\x20Jeff\x20Hodges),\x0a\x20\x20\x20\x20\x20\x20\x20\x20mksyscall_windows.pl\x20should\x20output\x20unix\x20newline\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20BPF\x20support\x20for\x20BSD\x20variants\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20strict\x20in\x20perl\x20scripts\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20xml:\x20handle\x20non-string\x20attribute\x20fields\x20(thanks\x20Maxim\x20Ushakov).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-06-09\">2011-06-09\x20(<a\x20href=\"release.html#r58\">base\x20for\x20r58</a>)</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20strconv,\x20http,\x20and\x20exp/draw\x20packages.\x0aClient\x20code\x20that\x20uses\x20the\x20http\x20or\x20exp/draw\x20packages\x20will\x20need\x20to\x20be\x20changed,\x0aand\x20code\x20that\x20uses\x20strconv\x20or\x20fmt's\x20\"%q\"\x20formatting\x20directive\x20merits\x20checking.\x0a\x0aThe\x20strconv\x20package's\x20Quote\x20function\x20now\x20escapes\x20only\x20those\x20Unicode\x20code\x20points\x0anot\x20classified\x20as\x20printable\x20by\x20unicode.IsPrint.\x20Previously\x20Quote\x20would\x20escape\x0aall\x20non-ASCII\x20characters.\x20This\x20also\x20affects\x20the\x20fmt\x20package's\x20\"%q\"\x20formatting\x0adirective.\x20The\x20previous\x20quoting\x20behavior\x20is\x20still\x20available\x20via\x20strconv's\x20new\x0aQuoteToASCII\x20function.\x20\x20\x20\x0a\x0aMost\x20instances\x20of\x20the\x20type\x20map[string][]string\x20in\x20the\x20http\x20package\x20have\x20been\x0areplaced\x20with\x20the\x20new\x20Values\x20type.\x20The\x20http.Values\x20type\x20has\x20the\x20Get,\x20Set,\x20Add,\x0aand\x20Del\x20helper\x20methods\x20to\x20make\x20working\x20with\x20query\x20parameters\x20and\x20form\x20values\x0amore\x20convenient.\x0a\x0aThe\x20exp/draw\x20package\x20has\x20been\x20split\x20into\x20the\x20image/draw\x20and\x20exp/gui\x20packages.\x0a\x0aOther\x20changes:\x0a*\x208l,\x20ld:\x20initial\x20adjustments\x20for\x20Plan\x209\x20native\x20compilation\x20of\x208l\x20(thanks\x20Lucio\x20De\x20Re).\x0a*\x20arm:\x20floating\x20point\x20improvements\x20(thanks\x20Fan\x20Hongjian).\x0a*\x20big:\x20Improved\x20speed\x20of\x20nat-to-string\x20conversion\x20(thanks\x20Michael\x20T.\x20Jones),\x0a\x20\x20\x20\x20\x20\x20\x20\x20Rat\x20outputs\x20the\x20requested\x20precision\x20from\x20FloatString\x20(thanks\x20Graham\x20Miller),\x0a\x20\x20\x20\x20\x20\x20\x20\x20gobs\x20for\x20big.Rats.\x0a*\x20cgo:\x20support\x20non\x20intel\x20gcc\x20machine\x20flags\x20(thanks\x20Dave\x20Cheney).\x0a*\x20compress/lzw:\x20do\x20not\x20use\x20background\x20goroutines,\x0a\x20\x20\x20\x20\x20\x20\x20\x20reduce\x20decoder\x20buffer\x20size\x20from\x203*4096\x20to\x202*4096.\x0a*\x20crypto/twofish:\x20fix\x20Reset\x20index\x20overflow\x20bug.\x0a*\x20crypto:\x20reorg,\x20cleanup\x20and\x20add\x20function\x20for\x20generating\x20CRLs.\x0a*\x20exec:\x20export\x20the\x20underlying\x20*os.Process\x20in\x20Cmd.\x0a*\x20gc:\x20enable\x20building\x20under\x20clang/2.9\x20(thanks\x20Dave\x20Cheney),\x0a\x20\x20\x20\x20\x20\x20\x20\x20preparatory\x20work\x20toward\x20escape\x20analysis,\x20compact\x20stack\x20frames.\x0a*\x20go/build:\x20new\x20incomplete\x20package\x20for\x20building\x20go\x20programs.\x0a*\x20godefs:\x20do\x20not\x20assume\x20forward\x20type\x20references\x20are\x20enums\x20(thanks\x20Robert\x20Hencke).\x0a*\x20gofix,\x20gofmt:\x20fix\x20diff\x20regression\x20from\x20exec\x20change.\x0a*\x20html:\x20improve\x20attribute\x20parsing,\x20note\x20package\x20status.\x0a*\x20http:\x20don't\x20fail\x20on\x20accept\x20hitting\x20EMFILE,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20handling\x20of\x200-length\x20HTTP\x20requests.\x0a*\x20image/draw:\x20fix\x20clipping\x20bug\x20where\x20sp/mp\x20were\x20not\x20shifted\x20when\x20r.Min\x20was.\x0a*\x20image/gif:\x20fix\x20buglet\x20in\x20graphics\x20extension.\x0a*\x20image/tiff:\x20support\x20for\x20bit\x20depths\x20other\x20than\x208\x20(thanks\x20Benny\x20Siegert).\x0a*\x20ld:\x20fix\x20and\x20simplify\x20ELF\x20symbol\x20generation\x20(thanks\x20Anthony\x20Martin)\x0a*\x20libmach:\x20use\x20the\x20standardized\x20format\x20for\x20designated\x20initializers\x20(thanks\x20Jeff\x20Hodges)\x0a*\x20mail:\x20address\x20list\x20parsing.\x0a*\x20net:\x20add\x20network\x20interface\x20identification\x20API\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20bug\x20in\x20net.Interfaces:\x20handle\x20elastic\x20sdl_data\x20size\x20correctly\x20(thanks\x20Mikio\x20Hara).\x0a*\x20netchan:\x20added\x20drain\x20method\x20to\x20importer\x20(thanks\x20David\x20Jakob\x20Fritz).\x0a*\x20os:\x20add\x20Process.Kill\x20and\x20Process.Signal\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Getenv\x20for\x20Plan\x209\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20runtime:\x20improve\x20memmove\x20by\x20checking\x20memory\x20overlap\x20(thanks\x20Quan\x20Yong\x20Zhai),\x0a\x20\x20\x20\x20\x20\x20\x20\x20support\x20for\x20Linux\x20grsecurity\x20systems\x20(thanks\x20Jonathan\x20Mark).\x0a*\x20spec:\x20handle\x20a\x20corner\x20case\x20for\x20shifts.\x0a*\x20testing:\x20check\x20that\x20tests\x20and\x20benchmarks\x20do\x20not\x20affect\x20GOMAXPROCS\x20(thanks\x20Dmitriy\x20Vyukov).\x0a*\x20unicode:\x20add\x20IsPrint\x20and\x20related\x20properties,\x20general\x20categories.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-06-02\">2011-06-02</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20exec\x20package\x20that\x20will\x20require\x20changes\x0ato\x20client\x20code.\x0a\x0aThe\x20exec\x20package\x20has\x20been\x20re-designed\x20with\x20a\x20more\x20convenient\x20and\x20succinct\x20API.\x0aThis\x20code:\x0a\x09args\x20:=\x20[]string{\"diff\",\x20\"-u\",\x20\"file1.txt\",\x20\"file2.txt\"}\x0a\x09p,\x20err\x20:=\x20exec.Run(\"/usr/bin/diff\",\x20args,\x20os.Environ(),\x20\"\",\x0a\x09\x09exec.DevNull,\x20exec.Pipe,\x20exec.DevNull)\x0a\x09if\x20err\x20!=\x20nil\x20{\x0a\x09\x09return\x20nil,\x20err\x0a\x09}\x0a\x09var\x20buf\x20bytes.Buffer\x0a\x09io.Copy(&amp;buf,\x20p.Stdout)\x0a\x09w,\x20err\x20:=\x20p.Wait(0)\x0a\x09p.Close()\x0a\x09if\x20err\x20!=\x20nil\x20{\x0a\x09\x09return\x20nil,\x20err\x0a\x09}\x0a\x09return\x20buf.Bytes(),\x20err\x0acan\x20be\x20rewritten\x20as:\x0a\x09return\x20exec.Command(\"diff\",\x20\"-u\",\x20\"file1.txt\",\x20\"file2.txt\").Output()\x0aSee\x20the\x20exec\x20package\x20documentation\x20for\x20the\x20details\x20(\"godoc\x20exec\").\x0a\x0aBy\x20setting\x20the\x20GOPATH\x20environment\x20variable\x20you\x20can\x20use\x20goinstall\x20to\x20build\x20and\x0ainstall\x20your\x20own\x20code\x20and\x20external\x20libraries\x20outside\x20of\x20the\x20Go\x20tree\x20(and\x20avoid\x0awriting\x20Makefiles).\x0aSee\x20the\x20goinstall\x20command\x20documentation\x20for\x20the\x20details\x20(\"godoc\x20goinstall\").\x0a\x0aOther\x20changes:\x0a*\x205g:\x20alignment\x20fixes.\x0a*\x206l,\x208l:\x20fix\x20Mach-O\x20binaries\x20with\x20many\x20dynamic\x20libraries.\x0a*\x208l:\x20emit\x20resources\x20(.rsrc)\x20in\x20Windows\x20PE.\x20\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20asn1:\x20fix\x20marshaling\x20of\x20empty\x20optional\x20RawValues\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20big:\x20make\x20Int\x20and\x20Rat\x20implement\x20fmt.Scanner\x20(thanks\x20Evan\x20Shaw),\x0a\x09~8x\x20faster\x20number\x20scanning,\x0a\x09remove\x20some\x20unnecessary\x20conversions.\x0a*\x20cgo:\x20restrict\x20#cgo\x20directives\x20to\x20prevent\x20shell\x20expansion\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09support\x20pkg-config\x20for\x20flags\x20and\x20libs\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20compress/flate:\x20fix\x20Huffman\x20tree\x20bug,\x0a\x09do\x20not\x20use\x20background\x20goroutines.\x0a*\x20crypto/openpgp:\x20add\x20support\x20for\x20symmetrically\x20encrypting\x20files.\x0a*\x20crypto/tls/generate_cert.go:\x20fix\x20misspelling\x20of\x20O_CREATE.\x0a*\x20dashboard:\x20send\x20notification\x20emails\x20when\x20the\x20build\x20breaks.\x0a*\x20doc:\x20mention\x20go/printer\x20instead\x20of\x20container/vector\x20in\x20effective\x20go,\x0a\x09put\x20Release\x20History\x20link\x20on\x20'Documentation'\x20page,\x0a\x09put\x20Weekly\x20Snapshot\x20History\x20link\x20on\x20'Contributing'\x20page.\x0a*\x20encoding/base64:\x20add\x20DecodeString\x20and\x20EncodeToString.\x0a*\x20encoding/binary:\x20add\x20a\x20non-reflect\x20fast\x20path\x20for\x20Read,\x0a\x09add\x20a\x20non-reflect\x20fast\x20path\x20for\x20Write.\x0a*\x20encoding/hex:\x20add\x20hex\x20dumping.\x0a*\x20encoding/line:\x20delete\x20package.\x20Its\x20functionality\x20is\x20now\x20in\x20bufio.\x0a*\x20filepath:\x20Abs\x20must\x20always\x20return\x20a\x20clean\x20path\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20fmt:\x20fix\x20bug\x20in\x20UnreadRune,\x0a\x09make\x20%q\x20work\x20for\x20integers,\x20printing\x20a\x20quoted\x20character\x20literal,\x0a\x09return\x20EOF\x20when\x20out\x20of\x20input\x20in\x20Scan*.\x0a*\x20gc:\x20check\x20parameter\x20declarations\x20in\x20interface\x20fields\x20(thanks\x20Anthony\x20Martin),\x0a\x09disallow\x20...\x20in\x20type\x20conversions\x20(thanks\x20Anthony\x20Martin),\x0a\x09do\x20not\x20force\x20heap\x20allocation\x20on\x20referencing\x20outer\x20variable\x20in\x20a\x20closure,\x0a\x09fix\x20m[x],\x20_\x20=\x20y.(T),\x0a\x09implement\x20new\x20shift\x20rules,\x0a\x09patch\x20y.tab.c\x20to\x20fix\x20build\x20when\x20using\x20Bison\x202.5,\x0a\x09relax\x20assignability\x20of\x20method\x20receivers\x20(thanks\x20Anthony\x20Martin),\x0a\x09typecheck\x20the\x20whole\x20tree\x20before\x20walking.\x0a*\x20go/scanner:\x20don't\x20allow\x20\"0x\"\x20and\x20\"0X\"\x20as\x20integers\x20(thanks\x20Evan\x20Shaw).\x0a*\x20gobuilder:\x20fixes\x20for\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20godoc:\x20basic\x20setup\x20for\x20running\x20godoc\x20on\x20local\x20app\x20engine\x20emulator,\x0a\x09display\x20advert\x20for\x20the\x20package\x20dashboard\x20on\x20package\x20list\x20page.\x0a*\x20goinstall:\x20fixes\x20for\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09more\x20verbose\x20logging\x20with\x20-v.\x0a*\x20gotest,\x20pkg/exec:\x20use\x20bash\x20to\x20run\x20shell\x20scripts\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20http/spdy:\x20redo\x20interfaces,\x20flesh\x20out\x20implementation\x20&amp;\x20frame\x20types\x20(thanks\x20William\x20Chan).\x0a*\x20http:\x20Transport\x20hook\x20to\x20register\x20non-http(s)\x20protocols,\x0a\x09add\x20client+server\x20benchmark,\x0a\x09catch\x20Handler\x20goroutine\x20panics,\x0a\x09fix\x20Set-Cookie\x20date\x20parsing,\x0a\x09have\x20client\x20set\x20Content-Length\x20when\x20possible,\x0a\x09let\x20Transport\x20use\x20a\x20custom\x20net.Dial\x20function,\x0a\x09propagate\x20Set-Cookie\x20in\x20reverse\x20proxy,\x0a\x09ServeFile\x20shouldn't\x20send\x20Content-Length\x20when\x20Content-Encoding\x20is\x20set.\x0a*\x20image:\x20add\x20a\x20SubImage\x20method.\x0a*\x20image/gif:\x20simplify\x20blockReader.Read.\x0a*\x20image/png:\x20fix\x20encoding\x20of\x20images\x20that\x20don't\x20start\x20at\x20(0,\x200).\x0a*\x20io,\x20net,\x20http:\x20sendfile\x20support.\x0a*\x20io:\x20add\x20ByteScanner,\x20RuneScanner\x20interfaces.\x0a*\x20ld:\x20add\x20-w\x20to\x20disable\x20dwarf,\x20make\x20errors\x20obviously\x20from\x20dwarf.\x0a*\x20mail:\x20new\x20package.\x0a*\x20mime/multipart:\x20misc\x20code/doc\x20fixes.\x0a*\x20misc/cgo:\x20remove\x20reference\x20to\x20'destroy'\x20function.\x0a*\x20misc/emacs:\x20don't\x20select\x20the\x20mark\x20after\x20gofmt\x20(thanks\x20Eric\x20Eisner).\x0a*\x20misc/gophertool:\x20Chrome\x20extension\x20to\x20aid\x20in\x20Go\x20development\x0a*\x20misc/vim:\x20limit\x20Fmt\x20command\x20to\x20Go\x20buffers\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20net:\x20if\x20we\x20stop\x20polling,\x20remove\x20any\x20pending\x20events\x20for\x20the\x20socket,\x0a\x09update\x20IP\x20multicast\x20socket\x20options\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20Fix\x20test\x20to\x20work\x20on\x20Solaris,\x0a\x09fix\x20Readdir(0)\x20on\x20EOF,\x0a\x09fix\x20Readdir,\x20Readdirnames\x20(thanks\x20Yuval\x20Pavel\x20Zholkover),\x0a\x09fix\x20os.MkdirAll\x20with\x20backslash\x20path\x20separator\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x09handle\x20OpenFile\x20flag\x20parameter\x20properly\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20path/filepath:\x20remove\x20string\x20constants.\x0a*\x20pkg:\x20spelling\x20tweaks,\x20I-Z\x20(thanks\x20Robert\x20Hencke).\x0a*\x20quietgcc:\x20fix\x20typo,\x20respect\x20$TMPDIR.\x0a*\x20runtime:\x20do\x20not\x20garbage\x20collect\x20windows\x20callbacks\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20mmap\x20error\x20return\x20on\x20linux\x20(thanks\x20Dmitry\x20Chestnykh),\x0a\x09reset\x20GOMAXPROCS\x20during\x20tests,\x0a\x09save\x20cdecl\x20registers\x20in\x20Windows\x20SEH\x20handler\x20(thanks\x20Alexey\x20Borzenkov).\x0a*\x20spec:\x20be\x20precise\x20with\x20the\x20use\x20of\x20the\x20informal\x20ellipsis\x20and\x20the\x20Go\x20token,\x0a\x09clarify\x20rules\x20for\x20shifts.\x0a*\x20strconv:\x20add\x20QuoteRune;\x20analogous\x20to\x20Quote\x20but\x20for\x20runes\x20rather\x20than\x20strings.\x0a*\x20strings:\x20implement\x20UnreadByte,\x20UnreadRune.\x0a*\x20sync:\x20always\x20wake\x20up\x20sleeping\x20goroutines\x20on\x20Cond.Signal\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20sync/atomic:\x20fix\x20check64.\x0a*\x20syscall:\x20add\x20ProcAttr\x20field\x20to\x20pass\x20an\x20unescaped\x20command\x20line\x20on\x20windows\x20(thanks\x20Vincent\x20Vanackere),\x0a\x09add\x20routing\x20messages\x20support\x20for\x20Linux\x20and\x20BSD\x20(thanks\x20Mikio\x20Hara).\x0a*\x20template:\x20fixes\x20and\x20clean-ups\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20time:\x20fix\x20Format\x20bug:\x20midnight/noon\x20are\x2012AM/PM\x20not\x200AM/PM.\x0a*\x20unicode:\x20make\x20the\x20tables\x20smaller.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-05-22\">2011-05-22</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20http\x20package\x20that\x20will\x20require\x20changes\x20to\x0aclient\x20code.\x0a\x0aThe\x20finalURL\x20return\x20value\x20of\x20the\x20Client.Get\x20method\x20has\x20been\x20removed.\x0aThis\x20value\x20is\x20now\x20accessible\x20via\x20the\x20new\x20Request\x20field\x20on\x20http.Response.\x0aFor\x20example,\x20this\x20code:\x0a\x0a\x09res,\x20finalURL,\x20err\x20:=\x20http.Get(...)\x0a\x0ashould\x20be\x20rewritten\x20as:\x0a\x0a\x09res,\x20err\x20:=\x20http.Get(...)\x0a\x09if\x20err\x20!=\x20nil\x20{\x0a\x09\x09//\x20...\x0a\x09}\x0a\x09finalURL\x20:=\x20res.Request.URL.String()\x0a\x0aUses\x20of\x20http.Get\x20that\x20assign\x20the\x20finalURL\x20value\x20to\x20_\x20can\x20be\x20rewritten\x0aautomatically\x20with\x20gofix.\x0a\x0aThis\x20snapshot\x20also\x20includes\x20an\x20optimization\x20to\x20the\x20append\x20function\x20that\x20makes\x20it\x0abetween\x202\x20and\x205\x20times\x20faster\x20in\x20typical\x20use\x20cases.\x0a\x0aOther\x20changes:\x0a*\x205a,\x206a,\x208a,\x20cc:\x20remove\x20old\x20environment\x20variables.\x0a*\x205c,\x205g:\x20fix\x20build\x20with\x20too-smart\x20gcc.\x0a*\x205l,\x208l:\x20add\x20ELF\x20symbol\x20table\x20to\x20binary.\x0a*\x205l:\x20delete\x20pre-ARMv4\x20instruction\x20implementations,\x20other\x20fixes.\x0a*\x206l,\x208l:\x20emit\x20windows\x20dwarf\x20sections\x20like\x20other\x20platforms\x20(thanks\x20Alex\x20Brainman).\x0a*\x206l:\x20fix\x20emit\x20windows\x20dwarf\x20sections\x20(thanks\x20Wei\x20Guangjing).\x0a*\x208g:\x20fix\x20conversion\x20from\x20float\x20to\x20uint64\x20(thanks\x20Anthony\x20Martin).\x0a*\x20Make.cmd:\x20create\x20TARGDIR\x20if\x20necessary\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20asn1:\x20add\x20big\x20support.\x0a*\x20big:\x20add\x20Int\x20methods\x20to\x20act\x20on\x20numbered\x20bits\x20(thanks\x20Roger\x20Peppe),\x0a\x09better\x20support\x20for\x20string\x20conversions,\x0a\x09support\x20%v\x20and\x20#\x20modifier,\x20better\x20handling\x20of\x20unknown\x20formats.\x0a*\x20cgi:\x20export\x20RequestFromMap\x20(thanks\x20Evan\x20Shaw),\x0a\x09set\x20Request.TLS\x20and\x20Request.RemoteAddr\x20for\x20children.\x0a*\x20cgo:\x20use\x20packed\x20struct\x20to\x20fix\x20Windows\x20behavior.\x0a*\x20codereview:\x20add\x20release\x20branch\x20support,\x0a\x09fetch\x20metadata\x20using\x20JSON\x20API,\x20not\x20XML\x20scraping,\x0a\x09handle\x20'null\x20as\x20missing\x20field'\x20in\x20rietveld\x20json.\x0a*\x20compress/lzw:\x20silently\x20drop\x20implied\x20codes\x20that\x20are\x20too\x20large.\x0a*\x20compress/zlib:\x20actually\x20use\x20provided\x20dictionary\x20in\x20NewWriterDict\x0a*\x20crypto/openpgp:\x20add\x20key\x20generation\x20support,\x0a\x09change\x20PublicKey.Serialize\x20to\x20include\x20the\x20header.\x0a*\x20crypto/rand:\x20add\x20utility\x20functions\x20for\x20number\x20generation\x20(thanks\x20Anthony\x20Martin).\x0a*\x20crypto/tls:\x20export\x20the\x20verified\x20chains.\x0a*\x20crypto/x509/crl:\x20add\x20package.\x0a*\x20crypto/x509:\x20export\x20raw\x20SubjectPublicKeyInfo,\x0a\x09support\x20DSA\x20public\x20keys\x20in\x20X.509\x20certs,\x0a\x09support\x20parsing\x20and\x20verifying\x20DSA\x20signatures\x20(thanks\x20Jonathan\x20Allie).\x0a*\x20doc/roadmap:\x20put\x20\"App\x20Engine\x20support\"\x20under\x20\"Done\".\x0a*\x20doc:\x20add\x20I/O\x202011\x20talks\x20to\x20talks/,\x20docs.html,\x20and\x20front\x20page.\x0a*\x20effective\x20go:\x20explain\x20about\x20values/pointers\x20in\x20String()\x20example,\x0a\x09update\x20to\x20new\x20Open\x20signature.\x0a*\x20exp/draw:\x20fast\x20paths\x20for\x20drawing\x20a\x20YCbCr\x20or\x20an\x20NRGBA\x20onto\x20an\x20RGBA.\x0a*\x20filepath:\x20make\x20EvalSymlinks\x20work\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20flag:\x20allow\x20distinct\x20sets\x20of\x20flags.\x0a*\x20gc:\x20fix\x20type\x20switch\x20error\x20message\x20for\x20invalid\x20cases\x20(thanks\x20Lorenzo\x20Stoakes),\x0a\x09fix\x20unsafe.Sizeof,\x0a\x09preserve\x20original\x20expression\x20for\x20errors.\x0a*\x20go/ast,\x20go/doc,\x20godoc:\x20consider\x20struct\x20fields\x20and\x20interface\x20methods\x20when\x20filtering\x20ASTs.\x0a*\x20go/ast:\x20consider\x20anonymous\x20fields\x20and\x20set\x20Incomplete\x20bit\x20when\x20filtering\x20ASTs,\x0a\x09properly\x20maintain\x20map\x20of\x20package\x20global\x20imports.\x0a*\x20go/doc,\x20godoc:\x20when\x20filtering\x20for\x20godoc,\x20don't\x20remove\x20elements\x20of\x20a\x20declaration.\x0a*\x20go/parser:\x20accept\x20parenthesized\x20receive\x20operations\x20in\x20select\x20statements,\x0a\x09always\x20introduce\x20an\x20ast.Object\x20when\x20declaring\x20an\x20identifier.\x0a*\x20go/printer,\x20gofmt:\x20fix\x20alignment\x20of\x20\"=\"\x20in\x20const/var\x20declarations,\x0a\x09fix\x20formatting\x20of\x20expression\x20lists\x20(missing\x20blank).\x0a*\x20go/printer:\x20added\x20simple\x20performance\x20benchmark,\x0a\x09make\x20tests\x20follow\x20syntactic\x20restrictions,\x0a\x09more\x20accurate\x20comment\x20for\x20incomplete\x20structs/interfaces,\x0a*\x20go/token:\x20faster\x20FileSet.Position\x20implementation.\x0a*\x20go/types:\x20type\x20checker\x20API\x20+\x20testing\x20infrastructure.\x0a*\x20godoc:\x20added\x20-index\x20flag\x20to\x20enable/disable\x20search\x20index,\x0a\x09if\x20there\x20is\x20no\x20search\x20box,\x20don't\x20run\x20the\x20respective\x20JS\x20code.\x0a*\x20gofmt:\x20update\x20test.sh\x20(exclude\x20a\x20file\x20w/\x20incorrect\x20syntax).\x0a*\x20html:\x20parse\x20empty,\x20unquoted,\x20and\x20single-quoted\x20attribute\x20values.\x0a*\x20http/cgi:\x20correctly\x20set\x20request\x20Content-Type\x20(thanks\x20Evan\x20Shaw),\x0a\x09pass\x20down\x20environment\x20variables\x20for\x20IRIX\x20and\x20Solaris.\x0a*\x20http/pprof:\x20fix\x20POST\x20reading\x20bug.\x0a*\x20http/spdy:\x20new\x20incomplete\x20package\x20(thanks\x20Ross\x20Light).\x0a*\x20http:\x20Client.Do\x20should\x20follow\x20redirects\x20for\x20GET\x20and\x20HEAD,\x0a\x09add\x20Header.Write\x20method\x20(thanks\x20Evan\x20Shaw),\x0a\x09add\x20Request.SetBasicAuth\x20method,\x0a\x09add\x20Transport.ProxySelector,\x0a\x09add\x20http.SetCookie(ResponseWriter,\x20*Cookie),\x0a\x09don't\x20Clean\x20query\x20string\x20in\x20relative\x20redirects,\x0a\x09fix\x20FormFile\x20nil\x20pointer\x20dereference\x20on\x20missing\x20multipart\x20form,\x0a\x09fix\x20racy\x20test\x20with\x20a\x20simpler\x20version,\x0a\x09fix\x20two\x20Transport\x20gzip+persist\x20crashes,\x0a\x09include\x20Host\x20header\x20in\x20requests,\x0a\x09make\x20HEAD\x20client\x20request\x20follow\x20redirects\x20(thanks\x20Eivind\x20Uggedal).\x0a\x09update\x20cookie\x20doc\x20to\x20reference\x20new\x20RFC\x206265,\x0a\x09write\x20cookies\x20according\x20to\x20RFC\x206265\x20(thanks\x20Christian\x20Himpel).\x0a*\x20image/bmp:\x20implement\x20a\x20BMP\x20decoder.\x0a*\x20image/gif:\x20new\x20package\x20provides\x20a\x20GIF\x20decoder.\x0a*\x20image/jpeg:\x20decode\x20grayscale\x20images,\x20not\x20just\x20color\x20images.\x0a\x09optimizations\x20and\x20tweaks.\x0a*\x20image/png:\x20encode\x20paletted\x20images\x20with\x20alpha\x20channel\x20(thanks\x20Dmitry\x20Chestnykh),\x0a\x09speed\x20up\x20opaque\x20RGBA\x20encoding.\x0a*\x20image/tiff:\x20implement\x20a\x20decoder\x20(thanks\x20Benny\x20Siegert).\x0a*\x20image:\x20add\x20type-specific\x20Set\x20methods\x20and\x20use\x20them\x20when\x20decoding\x20PNG,\x0a\x09make\x20AlphaColor.Set\x20conform\x20to\x20usual\x20signature\x20(thanks\x20Roger\x20Peppe),\x0a\x09png\x20&amp;\x20jpeg\x20encoding\x20benchmarks.\x0a*\x20ld:\x20do\x20not\x20emit\x20reference\x20to\x20dynamic\x20library\x20named\x20\"\",\x0a\x09fix\x20alignment\x20of\x20rodata\x20section\x20on\x20Plan\x209\x20(thanks\x20Anthony\x20Martin),\x0a\x09make\x20ELF\x20binaries\x20with\x20no\x20shared\x20library\x20dependencies\x20static\x20binaries.\x0a*\x20make.bash:\x20remove\x20old\x20bash\x20version\x20of\x20gotest\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20make:\x20add\x20nuke\x20target\x20for\x20C\x20commands\x20and\x20libs\x20(thanks\x20Anthony\x20Martin).\x0a*\x20mime/multipart:\x20add\x20FileName\x20accessor\x20on\x20Part,\x0a\x09add\x20Writer,\x0a\x09return\x20an\x20error\x20on\x20Reader\x20EOF,\x20not\x20(nil,\x20nil).\x0a*\x20misc/cgo/test:\x20run\x20tests.\x0a*\x20misc/emacs:\x20use\x20UTF-8\x20when\x20invoking\x20gofmt\x20as\x20a\x20subprocess\x20(thanks\x20Sameer\x20Ajmani).\x0a*\x20misc/vim:\x20new\x20Vim\x20indentation\x20script.\x0a*\x20net,\x20http:\x20add\x20and\x20make\x20use\x20of\x20IP\x20address\x20scope\x20identification\x20API\x20(thanks\x20Mikio\x20Hara).\x0a*\x20net:\x20default\x20to\x20127.0.0.1,\x20not\x20localhost,\x20in\x20TestICMP,\x0a\x09don't\x20crash\x20on\x20unexpected\x20DNS\x20SRV\x20responses,\x0a\x09enable\x20SO_REUSEPORT\x20on\x20BSD\x20variants\x20(thanks\x20Mikio\x20Hara),\x0a\x09protocol\x20family\x20adaptive\x20address\x20family\x20selection\x20(thanks\x20Mikio\x20Hara),\x0a\x09re-enable\x20wildcard\x20listening\x20(thanks\x20Mikio\x20Hara),\x0a\x09sort\x20records\x20returned\x20by\x20LookupSRV\x20(thanks\x20Gary\x20Burd).\x0a*\x20os:\x20make\x20Readdir\x20&amp;\x20Readdirnames\x20return\x20os.EOF\x20at\x20end,\x0a\x09make\x20Setenv\x20update\x20C\x20environment\x20variables.\x0a*\x20reflect:\x20allow\x20unexported\x20key\x20in\x20Value.MapIndex.\x0a*\x20runtime,\x20sync/atomic:\x20fix\x20arm\x20cas.\x0a*\x20runtime:\x20add\x20newline\x20to\x20\"finalizer\x20already\x20set\"\x20error\x20(thanks\x20Albert\x20Strasheim),\x0a\x09handle\x20out-of-threads\x20on\x20Linux\x20gracefully\x20(thanks\x20Albert\x20Strasheim),\x0a\x09fix\x20function\x20args\x20not\x20checked\x20warning\x20on\x20ARM\x20(thanks\x20Dave\x20Cheney),\x0a\x09make\x20StackSystem\x20part\x20of\x20StackGuard\x20(thanks\x20Alexey\x20Borzenkov),\x0a\x09maybe\x20fix\x20Windows\x20build\x20broken\x20by\x20cgo\x20setenv\x20CL.\x0a*\x20spec:\x20clarify\x20semantics\x20of\x20integer\x20division,\x0a\x09clarify\x20semantics\x20of\x20range\x20clause,\x0a\x09fix\x20error\x20in\x20production\x20syntax,\x0a\x09narrow\x20syntax\x20for\x20expression\x20and\x20select\x20statements,\x0a\x09newlines\x20cannot\x20be\x20used\x20inside\x20a\x20char\x20or\x20\"\"\x20string\x20literal,\x0a\x09restricted\x20expressions\x20may\x20still\x20be\x20parenthesized.\x0a*\x20strings:\x20make\x20Reader.Read\x20use\x20copy\x20instead\x20of\x20an\x20explicit\x20loop.\x0a*\x20syscall:\x20add\x20Windows\x20file\x20mapping\x20functions\x20and\x20constants\x20(thanks\x20Evan\x20Shaw),\x0a\x09add\x20IPv6\x20scope\x20zone\x20ID\x20support\x20(thanks\x20Mikio\x20Hara),\x0a\x09add\x20netlink\x20support\x20for\x20linux/386,\x20linux/amd64,\x20linux/arm\x20(thanks\x20Mikio\x20Hara),\x0a\x09add\x20Sendfile,\x0a\x09adjust\x20freebsd\x20syscalls.master\x20URL\x20properly\x20(thanks\x20Mikio\x20Hara),\x0a\x09change\x20Overlapped.HEvent\x20type,\x20it\x20is\x20a\x20handle\x20(thanks\x20Alex\x20Brainman).\x0a*\x20syslog:\x20fix\x20skipping\x20of\x20net\x20tests\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20template:\x20support\x20string,\x20int\x20and\x20float\x20literals\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20xml:\x20fix\x20reflect\x20error.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-04-27\">2011-04-27\x20(<a\x20href=\"release.html#r57\">base\x20for\x20r57</a>)</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20revisions\x20to\x20the\x20reflect\x20package\x20to\x20make\x20it\x20more\x0aefficient,\x20after\x20the\x20last\x20weekly's\x20major\x20API\x20update.\x20If\x20your\x20code\x20uses\x20reflect\x0ait\x20may\x20require\x20further\x20changes,\x20not\x20all\x20of\x20which\x20can\x20be\x20made\x20automatically\x20by\x0agofix.\x20For\x20the\x20full\x20details\x20of\x20the\x20change,\x20see\x0a\x09http://codereview.appspot.com/4435042\x0aAlso,\x20the\x20Typeof\x20and\x20NewValue\x20functions\x20have\x20been\x20renamed\x20to\x20TypeOf\x20and\x20ValueOf.\x0a\x0aOther\x20changes:\x0a*\x205c:\x20make\x20alignment\x20rules\x20match\x205g,\x20just\x20like\x206c\x20matches\x206g.\x0a*\x208g,\x208l:\x20fix\x20\"set\x20but\x20not\x20used\"\x20gcc\x20error\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20all-qemu.bash:\x20remove\x20DISABLE_NET_TESTS.\x0a*\x20build:\x20remove\x20DISABLE_NET_TESTS.\x0a*\x20builder:\x20build\x20multiple\x20targets\x20in\x20parallel.\x0a*\x20cgo:\x20avoid\x20\"incompatible\x20pointer\x20type\"\x20warning\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20codereview:\x20add\x20'hg\x20undo'\x20command,\x20various\x20other\x20fixes.\x0a*\x20compress/flate:\x20dictionary\x20support.\x0a*\x20compress/zlib:\x20add\x20FDICT\x20flag\x20in\x20Reader/Writer\x20(thanks\x20Ross\x20Light).\x0a*\x20container/heap:\x20fix\x20circular\x20dependency\x20in\x20test.\x0a*\x20crypto/openpgp:\x20better\x20handling\x20of\x20keyrings.\x0a*\x20crypto/rsa:\x20support\x20>\x203\x20primes.\x0a*\x20crypto/tls:\x20add\x20server-side\x20OCSP\x20stapling\x20support.\x0a*\x20crypto/x509:\x20memorize\x20chain\x20building.\x0a*\x20crypto:\x20move\x20certificate\x20verification\x20into\x20x509.\x0a*\x20dashboard:\x20build\x20most\x20recent\x20revision\x20first.\x0a*\x20doc:\x20mention\x20make\x20version\x20in\x20install.html.\x0a*\x20expvar:\x20add\x20Func\x20for\x20functions\x20that\x20return\x20values\x20that\x20are\x20JSON\x20marshalable.\x0a*\x20fmt:\x20decrease\x20recursion\x20depth\x20in\x20tests\x20to\x20permit\x20them\x20to\x20run\x20under\x20gccgo,\x0a\x09tweak\x20the\x20doc\x20for\x20%U.\x0a*\x20gc:\x20allow\x20complex\x20types\x20to\x20be\x20receiver\x20types\x20(thanks\x20Robert\x20Hencke),\x0a\x09correct\x20handling\x20of\x20unexported\x20method\x20names\x20in\x20embedded\x20interfaces,\x0a\x09explain\x20why\x20invalid\x20receiver\x20types\x20are\x20invalid,\x0a\x09fix\x20copy([]int,\x20string)\x20error\x20message\x20(thanks\x20Quan\x20Yong\x20Zhai),\x0a\x09fix\x20'invalid\x20recursive\x20type'\x20error\x20(thanks\x20Lorenzo\x20Stoakes),\x0a\x09many\x20bug\x20fixes.\x0a*\x20go\x20spec:\x20attempt\x20at\x20clarifying\x20language\x20for\x20\"append\",\x0a\x09for\x20map\x20types,\x20mention\x20indexing\x20operations.\x0a*\x20go/types:\x20update\x20for\x20export\x20data\x20format\x20change.\x0a*\x20gob:\x20fix\x20handling\x20of\x20indirect\x20receivers\x20for\x20GobDecoders,\x0a\x09fix\x20trivial\x20bug\x20in\x20map\x20marshaling,\x0a\x09have\x20errorf\x20always\x20prefix\x20the\x20message\x20with\x20\"gob:\x20\",\x0a\x09test\x20case\x20for\x20indirection\x20to\x20large\x20field,\x0a\x09use\x20new\x20Implements\x20and\x20AssignableTo\x20methods\x20in\x20reflect,\x0a\x09when\x20decoding\x20a\x20string,\x20allocate\x20a\x20string,\x20not\x20a\x20[]byte.\x0a*\x20gobuilder:\x20permit\x20builders\x20of\x20the\x20form\x20goos-goarch-foo,\x0a\x09respect\x20MAKEFLAGS\x20if\x20provided\x20(thanks\x20Dave\x20Cheney).\x0a*\x20godoc:\x20use\x20\"search\"\x20input\x20type\x20for\x20search\x20box\x20(thanks\x20Dmitry\x20Chestnykh).\x0a*\x20gofix:\x20add\x20support\x20for\x20reflect\x20rename.\x0a*\x20gofmt:\x20add\x20-d\x20(diff)\x20(thanks\x20David\x20Crawshaw),\x0a\x09don't\x20crash\x20when\x20rewriting\x20nil\x20interfaces\x20in\x20AST,\x0a\x09exclude\x20test\x20case\x20that\x20doesn't\x20compile\x20w/o\x20errors,\x0a\x09gofmt\x20test\x20harness\x20bug\x20fix.\x0a*\x20goinstall:\x20support\x20GOPATH;\x20building\x20and\x20installing\x20outside\x20the\x20Go\x20tree,\x0a\x09support\x20building\x20executable\x20commands.\x0a*\x20gopack:\x20fix\x20prefix\x20bug,\x0a\x09preserve\x20safe\x20flag\x20when\x20not\x20adding\x20unsafe\x20objects\x20to\x20archive.\x0a*\x20gotest:\x20add\x20timing,\x20respect\x20$GOARCH,\x0a\x09generate\x20gofmt-compliant\x20code.\x0a*\x20http/cgi:\x20copy\x20some\x20PATH\x20environment\x20variables\x20to\x20child,\x0a\x09improve\x20Location\x20response\x20handling,\x0a\x09pass\x20some\x20default\x20environment\x20variables.\x0a*\x20http/fcgi:\x20new\x20package\x20(thanks\x20Evan\x20Shaw).\x0a*\x20http:\x20add\x20NewRequest\x20helper,\x0a\x09add\x20MultipartForm,\x20ParseMultipartForm,\x20and\x20FormFile\x20to\x20Request,\x0a\x09be\x20clear\x20when\x20failing\x20to\x20connect\x20to\x20a\x20proxy,\x0a\x09bug\x20fixes\x20and\x20new\x20tests,\x0a\x09consume\x20request\x20bodies\x20before\x20replying,\x0a\x09don't\x20quote\x20Set-Cookie\x20Domain\x20and\x20Path\x20(thanks\x20Petar\x20Maymounkov),\x0a\x09fix\x20IP\x20confusion\x20in\x20TestServerTimeouts,\x0a\x09handler\x20timeout\x20support,\x0a\x09ServerConn,\x20ClientConn:\x20add\x20real\x20Close\x20(thanks\x20Petar\x20Maymounkov),\x0a\x09make\x20Client\x20redirect\x20policy\x20configurable,\x0a\x09put\x20a\x20limit\x20on\x20POST\x20size,\x0a\x09reverse\x20proxy\x20handler.\x0a*\x20image/jpeg:\x20add\x20an\x20encoder,\x0a\x09decode\x20to\x20a\x20YCbCr\x20image\x20instead\x20of\x20an\x20RGBA\x20image.\x0a*\x20ioutil:\x20add\x20Discard.\x0a*\x20json:\x20keep\x20track\x20of\x20error\x20offset\x20in\x20SyntaxError.\x0a*\x20ld:\x20defend\x20against\x20some\x20broken\x20object\x20files,\x0a\x09do\x20not\x20emit\x20empty\x20dwarf\x20pe\x20sections\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x206l\x20-d\x20on\x20Mac,\x20diagnose\x20invalid\x20use\x20of\x20-d,\x0a\x09fix\x20Plan\x209\x20symbol\x20table\x20(thanks\x20Anthony\x20Martin),\x0a\x09remove\x20MachoLoad\x20limit.\x0a*\x20make:\x20prevent\x20rm\x20provoking\x20'text\x20file\x20busy'\x20errors\x20(thanks\x20Lorenzo\x20Stoakes).\x0a*\x20mime/multipart:\x20add\x20ReadForm\x20for\x20parsing\x20multipart\x20forms,\x0a\x09limit\x20line\x20length\x20to\x20prevent\x20abuse.\x0a*\x20mime:\x20RFC\x202231\x20continuation\x20/\x20non-ASCII\x20support,\x0a\x09bunch\x20more\x20tests,\x20few\x20minor\x20parsing\x20fixes.\x0a*\x20misc/goplay:\x20fix\x20Tab\x20and\x20Shift+Enter\x20in\x20Firefox\x20(thanks\x20Dmitry\x20Chestnykh).\x0a*\x20net:\x20disable\x20one\x20more\x20external\x20network\x20test,\x0a\x09fix\x20EAI_BADFLAGS\x20error\x20on\x20freebsd\x20(thanks\x20Mikio\x20Hara),\x0a\x09fix\x20ParseIP\x20(thanks\x20Quan\x20Yong\x20Zhai),\x0a\x09fix\x20dialgoogle_test.go\x20(thanks\x20Quan\x20Yong\x20Zhai),\x0a\x09try\x20/etc/hosts\x20before\x20loading\x20DNS\x20config\x20(thanks\x20Dmitry\x20Chestnykh),\x0a\x09use\x20C\x20library\x20resolver\x20on\x20FreeBSD,\x20Linux,\x20OS\x20X\x20/\x20amd64,\x20386.\x0a*\x20os/user:\x20new\x20package\x20to\x20look\x20up\x20users.\x0a*\x20os:\x20Open\x20with\x20O_APPEND|O_CREATE\x20to\x20append\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20race\x20in\x20ReadAt/WriteAt\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09turn\x20EPIPE\x20exit\x20into\x20panic.\x0a*\x20rc/env.bash:\x20fix\x20to\x20build\x20on\x20windows\x20under\x20msys\x20(thanks\x20Joe\x20Poirier).\x0a*\x20reflect:\x20allow\x20Slice\x20of\x20arrays,\x0a\x09fix\x20Copy\x20of\x20arrays\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x09require\x20package\x20qualifiers\x20to\x20match\x20during\x20interface\x20check,\x0a\x09add\x20Type.Implements,\x20Type.AssignableTo,\x20Value.CallSlice,\x0a\x09make\x20Set\x20match\x20Go.\x0a*\x20rpc:\x20allow\x20the\x20first\x20argument\x20of\x20a\x20method\x20to\x20be\x20a\x20value\x20rather\x20than\x20a\x20pointer,\x0a\x09run\x20benchmarks\x20over\x20HTTP\x20as\x20well\x20as\x20direct\x20network\x20connections.\x0a*\x20run.bash:\x20remove\x20redundant\x20rebuilds.\x0a*\x20runtime/plan9:\x20warning\x20remediation\x20for\x20Plan\x209\x20(thanks\x20Lucio\x20De\x20Re),\x0a*\x20runtime:\x20many\x20bug\x20fixes,\x0a\x09fix\x20GOMAXPROCS\x20vs\x20garbage\x20collection\x20bug\x20(thanks\x20Dmitriy\x20Vyukov),\x0a\x09fix\x20mkversion\x20to\x20output\x20valid\x20path\x20separators\x20(thanks\x20Peter\x20Mundy),\x0a\x09more\x20graceful\x20out-of-memory\x20crash,\x0a\x09require\x20package\x20qualifiers\x20to\x20match\x20during\x20interface\x20check,\x0a\x09skip\x20functions\x20with\x20no\x20lines\x20when\x20building\x20src\x20line\x20table,\x0a\x09turn\x20\"too\x20many\x20EPIPE\"\x20into\x20real\x20SIGPIPE.\x0a*\x20src/pkg:\x20make\x20package\x20doc\x20comments\x20consistently\x20start\x20with\x20\"Package\x20foo\".\x0a*\x20syscall:\x20Madvise\x20and\x20Mprotect\x20for\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x09Mlock,\x20Munlock,\x20Mlockall,\x20Munlockall\x20on\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x09add\x20BPF\x20support\x20for\x20darwin/386,\x20darwin/amd64\x20(thanks\x20Mikio\x20Hara),\x0a\x09correct\x20Windows\x20CreateProcess\x20input\x20parameters\x20(thanks\x20Alex\x20Brainman),\x0a\x09fix\x20Ftruncate\x20under\x20linux/arm5\x20(thanks\x20Dave\x20Cheney),\x0a\x09permit\x20StartProcess\x20to\x20hide\x20the\x20executed\x20program\x20on\x20windows\x20(thanks\x20Vincent\x20Vanackere).\x0a*\x20test/bench:\x20update\x20timings;\x20moving\x20to\x20new\x20machine.\x0a*\x20time:\x20support\x20Irix\x206\x20location\x20for\x20zoneinfo\x20files.\x0a*\x20tutorial:\x20modernize\x20the\x20definition\x20and\x20use\x20of\x20Open,\x0a\x09replace\x20the\x20forever\x20loops\x20with\x20finite\x20counts\x20in\x20sieve\x20programs.\x0a*\x20websocket:\x20include\x20*http.Request\x20in\x20websocket.Conn.\x0a*\x20xml:\x20Parser\x20hook\x20for\x20non-UTF-8\x20charset\x20converters.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-04-13\">2011-04-13</h2>\x0a\x0a<pre>\x0aweekly.2011-04-13\x0a\x0aThis\x20weekly\x20snapshot\x20includes\x20major\x20changes\x20to\x20the\x20reflect\x20package\x20and\x20the\x0aos.Open\x20function.\x20\x20Code\x20that\x20uses\x20reflect\x20or\x20os.Open\x20will\x20require\x20updating,\x0awhich\x20can\x20be\x20done\x20mechanically\x20using\x20the\x20gofix\x20tool.\x0a\x0aThe\x20reflect\x20package's\x20Type\x20and\x20Value\x20types\x20have\x20changed.\x20\x20Type\x20is\x20now\x20an\x0ainterface\x20that\x20implements\x20all\x20the\x20possible\x20type\x20methods.\x20\x20Instead\x20of\x20a\x20type\x0aswitch\x20on\x20a\x20reflect.Type\x20t,\x20switch\x20on\x20t.Kind().\x20\x20Value\x20is\x20now\x20a\x20struct\x20value\x0athat\x20implements\x20all\x20the\x20possible\x20value\x20methods.\x20\x20Instead\x20of\x20a\x20type\x20switch\x20on\x20a\x0areflect.Value\x20v,\x20switch\x20on\x20v.Kind().\x20\x20See\x20the\x20change\x20for\x20the\x20full\x20details:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://code.google.com/p/go/source/detail?r=843855f3c026\x0a\x0aThe\x20os\x20package's\x20Open\x20function\x20has\x20been\x20replaced\x20by\x20three\x20functions:\x0a\x20\x20\x20\x20\x20\x20\x20\x20OpenFile(name,\x20flag,\x20perm)\x20//\x20same\x20as\x20old\x20Open\x0a\x20\x20\x20\x20\x20\x20\x20\x20Open(name)\x20//\x20same\x20as\x20old\x20Open(name,\x20O_RDONLY,\x200)\x0a\x20\x20\x20\x20\x20\x20\x20\x20Create(name)\x20//\x20same\x20as\x20old\x20Open(name,\x20O_RDWR|O_TRUNC|O_CREAT,\x200666)\x0a\x0aTo\x20update\x20your\x20code\x20to\x20use\x20the\x20new\x20APIs,\x20run\x20\"gofix\x20path/to/code\".\x20\x20Gofix\x20can't\x0ahandle\x20all\x20situations\x20perfectly,\x20so\x20read\x20and\x20test\x20the\x20changes\x20it\x20makes\x20before\x0acommitting\x20them.\x0a\x0aOther\x20changes:\x0a*\x20archive/zip:\x20add\x20func\x20OpenReader,\x20type\x20ReadCloser\x20(thanks\x20Dmitry\x20Chestnykh).\x0a*\x20asn1:\x20Implement\x20correct\x20marshaling\x20of\x20length\x20octets\x20(thanks\x20Luit\x20van\x20Drongelen).\x0a*\x20big:\x20don't\x20crash\x20when\x20printing\x20nil\x20ints.\x0a*\x20bufio:\x20add\x20ReadLine,\x20to\x20replace\x20encoding/line.\x0a*\x20build:\x20make\x20the\x20build\x20faster,\x20quieter.\x0a*\x20codereview:\x20automatically\x20port\x20old\x20diffs\x20forward,\x0a\x20\x20\x20\x20\x20\x20\x20\x20drop\x20Author:\x20line\x20on\x20self-clpatch,\x0a\x20\x20\x20\x20\x20\x20\x20\x20recognize\x20code\x20URL\x20without\x20trailing\x20slash.\x0a*\x20crypto/block:\x20remove\x20deprecated\x20package.\x0a*\x20crypto/des:\x20new\x20package\x20implementating\x20DES\x20and\x20TDEA\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20crypto/ecdsa,\x20crypto/rsa:\x20use\x20io.ReadFull\x20to\x20read\x20from\x20random\x20source\x20(thanks\x20Dmitry\x20Chestnykh).\x0a*\x20crypto/rsa:\x20add\x203-prime\x20support,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20support\x20for\x20precomputing\x20CRT\x20values,\x0a\x20\x20\x20\x20\x20\x20\x20\x20flip\x20the\x20CRT\x20code\x20over\x20so\x20that\x20it\x20matches\x20PKCS#1.\x0a*\x20crypto/x509:\x20expose\x20complete\x20DER\x20data\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20doc:\x20new\x20\"Functions\"\x20codewalk\x20(thanks\x20John\x20DeNero).\x0a*\x20doc/roadmap:\x20add\x20sections\x20on\x20tools,\x20packages.\x0a*\x20fmt:\x20allow\x20%U\x20for\x20unsigned\x20integers.\x0a*\x20gc:\x20fixes\x20and\x20optimizations.\x0a*\x20go/printer,\x20gofmt:\x20use\x20blank\x20to\x20separate\x20import\x20rename\x20from\x20import\x20path.\x0a*\x20go/scanner:\x20better\x20TokenString\x20output.\x0a*\x20go/types:\x20new\x20Go\x20type\x20hierarchy\x20implementation\x20for\x20AST.\x0a*\x20godashboard:\x20show\x20packages\x20at\x20launchpad.net\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20gofix:\x20add\x20-diff,\x20various\x20fixes\x20and\x20helpers.\x0a*\x20gotest:\x20fix\x20a\x20bug\x20in\x20error\x20handling,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fixes\x20for\x20[^.]_test\x20file\x20pattern\x20(thanks\x20Peter\x20Mundy),\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20\\r\\n\x20returned\x20by\x20gomake\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20gotype:\x20use\x20go/types\x20GcImporter.\x0a*\x20govet:\x20make\x20name-matching\x20for\x20printf\x20etc.\x20case-insensitive.\x0a*\x20http:\x20allow\x20override\x20of\x20Content-Type\x20for\x20ServeFile,\x0a\x20\x20\x20\x20\x20\x20\x20\x20client\x20gzip\x20support,\x0a\x20\x20\x20\x20\x20\x20\x20\x20do\x20not\x20listen\x20on\x200.0.0.0\x20during\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20flesh\x20out\x20server\x20Expect\x20handling\x20+\x20tests.\x0a*\x20image/ycbcr:\x20new\x20package.\x0a*\x20image:\x20allow\x20\"?\"\x20wildcards\x20when\x20registering\x20image\x20formats.\x0a*\x20io:\x20fixes\x20for\x20Read\x20with\x20n\x20>\x200,\x20os.EOF\x20(thanks\x20Robert\x20Hencke).\x0a*\x20ld:\x20correct\x20Plan\x209\x20compiler\x20warnings\x20(thanks\x20Lucio\x20De\x20Re),\x0a\x20\x20\x20\x20\x20\x20\x20\x20ELF\x20header\x20function\x20declarations\x20(thanks\x20Lucio\x20De\x20Re),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Mach-O\x20X86_64_RELOC_SIGNED\x20relocations\x20(thanks\x20Mikkel\x20Krautz),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Mach-O\x20bss\x20bug\x20(thanks\x20Mikkel\x20Krautz),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20dwarf\x20decoding\x20of\x20strings\x20for\x20struct's\x20fieldnames\x20(thanks\x20Luuk\x20van\x20Dijk),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fixes\x20and\x20optimizations\x20(25%\x20faster).\x0a*\x20log:\x20generalize\x20getting\x20and\x20setting\x20flags\x20and\x20prefix.\x0a*\x20misc/cgo/life:\x20enable\x20build\x20and\x20test\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20misc/vim:\x20add\x20plugin\x20with\x20Fmt\x20command\x20(thanks\x20Dmitry\x20Chestnykh),\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20type\x20highlighting\x20for\x20new\x20reflect\x20package.\x0a*\x20net:\x20disable\x20multicast\x20tests\x20by\x20default\x20(thanks\x20Dave\x20Cheney),\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort\x20records\x20returned\x20by\x20LookupMX\x20(thanks\x20Corey\x20Thomasson).\x0a*\x20openpgp:\x20Fix\x20improper\x20:=\x20shadowing\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20os:\x20rename\x20Open\x20to\x20OpenFile,\x20add\x20new\x20Open,\x20Create,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Readdir\x20in\x20Plan\x209\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20os/inotify:\x20use\x20_test\x20for\x20test\x20files,\x20not\x20_obj.\x0a*\x20pkg/path:\x20enable\x20tests\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20new\x20Type\x20and\x20Value\x20API.\x0a*\x20src/pkg/Makefile:\x20trim\x20per-directory\x20make\x20output\x20except\x20on\x20failure.\x0a*\x20syscall:\x20Add\x20DT_*\x20and\x20MADV_*\x20constants\x20on\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20Mmap,\x20Munmap\x20on\x20Linux,\x20FreeBSD,\x20OS\x20X,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20StartProcess\x20in\x20Plan\x209\x20(thanks\x20Fazlul\x20Shahriar),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Windows\x20Signaled\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/bench:\x20enable\x20build\x20and\x20test\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-04-04\">2011-04-04</h2>\x0a\x0a<pre>\x0aThis\x20snapshot\x20includes\x20changes\x20to\x20the\x20net\x20package.\x20Your\x20code\x20will\x20require\x0achanges\x20if\x20it\x20uses\x20the\x20Dial\x20or\x20LookupHost\x20functions.\x0a\x0aThe\x20laddr\x20argument\x20has\x20been\x20removed\x20from\x20net.Dial,\x20and\x20the\x20cname\x20return\x20value\x0ahas\x20been\x20removed\x20from\x20net.LookupHost.\x20The\x20new\x20net.LookupCNAME\x20function\x20can\x20be\x0aused\x20\x20to\x20find\x20the\x20canonical\x20host\x20for\x20a\x20given\x20name.\x20\x20You\x20can\x20update\x20your\x0anetworking\x20code\x20with\x20gofix.\x0a\x0aThe\x20gotest\x20shell\x20script\x20has\x20been\x20replaced\x20by\x20a\x20Go\x20program,\x20making\x20testing\x0asignificantly\x20faster.\x0a\x0aOther\x20changes:\x0a*\x20asn1:\x20extensions\x20needed\x20for\x20parsing\x20Kerberos.\x0a*\x20bufio:\x20Write\x20and\x20WriteString\x20cleanup\x20(thanks\x20Evan\x20Shaw).\x0a*\x20bytes,\x20strings:\x20simplify\x20Join\x20(thanks\x20Evan\x20Shaw).\x0a*\x20crypto/cipher:\x20bad\x20CTR\x20IV\x20length\x20now\x20triggers\x20panic.\x0a*\x20crypto/tls:\x20extend\x20NPN\x20support\x20to\x20the\x20client,\x0a\x09added\x20X509KeyPair\x20function\x20to\x20parse\x20a\x20Certificate\x20from\x20memory.\x0a*\x20crypto/x509:\x20parse\x20Extended\x20Key\x20Usage\x20extension\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20debug/gosym:\x20remove\x20need\x20for\x20gotest\x20to\x20run\x20preparatory\x20commands.\x0a*\x20fmt:\x20implement\x20precision\x20(length\x20of\x20input)\x20values\x20for\x20%q:\x20%.20q.\x0a*\x20go/parser:\x20fix\x20scoping\x20for\x20local\x20type\x20declarations\x20(thanks\x20Roger\x20Peppe),\x0a\x09package\x20name\x20must\x20not\x20be\x20the\x20blank\x20identifier.\x0a*\x20go/printer,\x20gofmt:\x20remove\x20special\x20case\x20for\x20multi-line\x20raw\x20strings.\x0a*\x20gopack:\x20add\x20P\x20flag\x20to\x20remove\x20prefix\x20from\x20filename\x20information.\x0a*\x20gotest:\x20add\x20-test.timeout\x20option,\x0a\x09replace\x20the\x20shell\x20script\x20with\x20the\x20compiled\x20program\x20written\x20in\x20go,\x0a\x09execute\x20gomake\x20properly\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20gotry:\x20move\x20into\x20its\x20own\x20directory,\x20separate\x20from\x20gotest.\x0a*\x20gotype:\x20support\x20for\x20more\x20tests,\x20added\x20one\x20new\x20test.\x0a*\x20http:\x20add\x20Transport.MaxIdleConnsPerHost,\x0a\x09use\x20upper\x20case\x20hex\x20in\x20URL\x20escaping\x20(thanks\x20Matt\x20Jones).\x0a*\x20httptest:\x20add\x20NewTLSServer.\x0a*\x20misc/kate:\x20reorganize,\x20remove\x20closed()\x20(thanks\x20Evan\x20Shaw).\x0a*\x20misc/notepadplus:\x20support\x20for\x20notepad++\x20(thanks\x20Anthony\x20Starks).\x0a*\x20net:\x20implement\x20non-blocking\x20connect\x20(thanks\x20Alexey\x20Borzenkov).\x0a*\x20os:\x20fix\x20MkdirAll(\"/thisdoesnotexist\")\x20(thanks\x20Albert\x20Strasheim),\x0a\x09Plan\x209\x20support\x20(thanks\x20Yuval\x20Pavel\x20Zholkover),\x0a\x09add\x20a\x20few\x20missing\x20Plan\x209\x20errors\x20(thanks\x20Andrey\x20Mirtchovski),\x0a\x09fix\x20FileInfo.Name\x20returned\x20by\x20Stat\x20(thanks\x20David\x20Forsythe).\x0a*\x20path/filepath.Glob:\x20add\x20an\x20error\x20return,\x0a\x09don't\x20drop\x20known\x20matches\x20on\x20error.\x0a*\x20path/filepath:\x20add\x20support\x20for\x20Plan\x209\x20(thanks\x20Andrey\x20Mirtchovski).\x0a*\x20scanner:\x20treat\x20line\x20comments\x20like\x20in\x20Go.\x0a*\x20syscall:\x20Plan\x209\x20support\x20(thanks\x20Yuval\x20Pavel\x20Zholkover),\x0a\x09StartProcess\x20Chroot\x20and\x20Credential\x20(thanks\x20Albert\x20Strasheim),\x0a\x09add\x20BPF\x20support\x20for\x20freebsd/386,\x20freebsd/amd64\x20(thanks\x20Mikio\x20Hara),\x0a\x09make\x20[Raw]Syscall6\x20pass\x206th\x20arg\x20on\x20linux/386\x20(thanks\x20Evan\x20Shaw).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-03-28\">2011-03-28</h2>\x0a\x0a<pre>\x0aThis\x20weekly\x20release\x20includes\x20improved\x20support\x20for\x20testing.\x0a\x0aMemory\x20and\x20CPU\x20profiling\x20is\x20now\x20available\x20via\x20the\x20gotest\x20tool.\x20Gotest\x20will\x0aproduce\x20memory\x20and\x20CPU\x20profiling\x20data\x20when\x20invoked\x20with\x20the\x20-test.memprofile\x0aand\x20-test.cpuprofile\x20flags.\x20Run\x20\"godoc\x20gotest\"\x20for\x20details.\x0a\x0aWe\x20have\x20also\x20introduced\x20a\x20way\x20for\x20tests\x20to\x20run\x20quickly\x20when\x20an\x20exhaustive\x20test\x0ais\x20unnecessary.\x20Gotest's\x20new\x20-test.short\x20flag\x20in\x20combination\x20with\x20the\x20testing\x0apackage's\x20new\x20Short\x20function\x20allows\x20you\x20to\x20write\x20tests\x20that\x20can\x20be\x20run\x20in\x0anormal\x20or\x20\"short\"\x20mode;\x20short\x20mode\x20is\x20now\x20used\x20by\x20all.bash\x20to\x20reduce\x0ainstallation\x20time.\x0aThe\x20Makefiles\x20know\x20about\x20the\x20flag\x20-\x20you\x20can\x20just\x20run\x20\"make\x20testshort\".\x0a\x0aOther\x20changes:\x0a*\x20.hgignore:\x20Ignore\x20all\x20goinstalled\x20packages\x20(thanks\x20Evan\x20Shaw).\x0a*\x20build:\x20add\x20all-qemu.bash,\x20handful\x20of\x20arm\x20fixes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20support\x20for\x20SWIG,\x20and\x20add\x20two\x20SWIG\x20examples,\x0a\x20\x20\x20\x20\x20\x20\x20\x20diagnose\x20Ubuntu's\x20buggy\x20copy\x20of\x20gold,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20broken\x20awk\x20in\x20version.bash\x20(thanks\x20Dave\x20Cheney),\x0a\x20\x20\x20\x20\x20\x20\x20\x20reenable\x20clean.bash\x20without\x20gomake\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20cgo:\x20fix\x20index-out-of-bounds\x20bug.\x0a*\x20codereview:\x20permit\x20CLs\x20of\x20the\x20form\x20weekly.DATE\x0a*\x20crypto/ecdsa:\x20truncate\x20hash\x20values.\x0a*\x20crypto/openpgp:\x20add\x20DSA\x20signature\x20support.\x0a*\x20dashboard:\x20remove\x20old\x20python/bash\x20builder,\x20update\x20README.\x0a*\x20doc:\x20explain\x20release\x20and\x20weekly\x20tags\x20in\x20install.html.\x0a*\x20exec:\x20document\x20dir\x20option\x20for\x20Run\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20flag:\x20document\x20Nflag\x20function\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20gc:\x20remove\x20interim\x20...\x20error\x20which\x20rejects\x20valid\x20code.\x0a*\x20go/ast:\x20implemented\x20NewPackage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20merge\x20CaseClause\x20and\x20TypeCaseClause.\x0a*\x20go/parser:\x20fix\x20memory\x20leak\x20by\x20making\x20a\x20copy\x20of\x20token\x20literals,\x0a\x20\x20\x20\x20\x20\x20\x20\x20resolve\x20identifiers\x20properly.\x0a*\x20go/printer,\x20gofmt:\x20avoid\x20exponential\x20layout\x20algorithm,\x0a\x20\x20\x20\x20\x20\x20\x20\x20gofmt:\x20simplify\x20struct\x20formatting\x20and\x20respect\x20line\x20breaks.\x0a*\x20go/scanner:\x20to\x20interpret\x20line\x20comments\x20with\x20Windows\x20filenames\x20(thanks\x20Alex\x20Brainman).\x0a*\x20go/token:\x20use\x20array\x20instead\x20of\x20map\x20for\x20token-&gt;string\x20table.\x0a*\x20gob:\x20optimizations\x20to\x20reduce\x20allocations,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20pointers\x20in\x20bootstrapType\x20so\x20interfaces\x20behave\x20properly.\x0a*\x20gobuilder:\x20recognize\x20CLs\x20of\x20the\x20form\x20weekly.DATE.\x0a*\x20godefs:\x20handle\x20volatile.\x0a*\x20godoc:\x20add\x20-template\x20flag\x20to\x20specify\x20custom\x20templates,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20path\x20problem\x20for\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20gofix:\x20httpserver\x20-\x20rewrite\x20rw.SetHeader\x20to\x20rw.Header.Set.\x0a*\x20gofmt:\x20add\x20profiling\x20flag.\x0a*\x20gopprof:\x20fix\x20bug:\x20do\x20not\x20rotate\x20180\x20degrees\x20for\x20large\x20scrolls,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20list\x20of\x20memory\x20allocation\x20functions.\x0a*\x20gotest:\x20fix\x20gofmt\x20issue\x20in\x20generated\x20_testmain.go.\x0a*\x20http:\x20add\x20NewProxyClientConn,\x0a\x20\x20\x20\x20\x20\x20\x20\x20avoid\x20crash\x20when\x20asked\x20for\x20multiple\x20file\x20ranges,\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20chunk\x20304\x20responses,\x0a\x20\x20\x20\x20\x20\x20\x20\x20export\x20Transport,\x20add\x20keep-alive\x20support.\x0a*\x20ld:\x20return\x20>\x200\x20exit\x20code\x20on\x20unsafe\x20import.\x0a*\x20misc/bbedit:\x20remove\x20closed\x20keyword\x20(thanks\x20Anthony\x20Starks).\x0a*\x20misc/emacs:\x20gofmt:\x20don't\x20clobber\x20the\x20current\x20buffer\x20on\x20failure.\x0a*\x20misc/vim:\x20remove\x20'closed'\x20as\x20a\x20builtin\x20function.\x0a*\x20net:\x20add\x20FileConn,\x20FilePacketConn,\x20FileListener\x20(thanks\x20Albert\x20Strasheim),\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20force\x20epoll/kqueue\x20to\x20wake\x20up\x20in\x20order\x20to\x20add\x20new\x20events,\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20OS-specific\x20AddFD\x20routine\x20wake\x20up\x20polling\x20thread,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20preallocated\x20buffer\x20for\x20epoll\x20and\x20kqueue/kevent.\x0a*\x20path/filepath:\x20add\x20EvalSymlinks\x20function,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20TestEvalSymlinks\x20when\x20run\x20under\x20symlinked\x20GOROOT.\x0a*\x20path:\x20work\x20for\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20rpc:\x20increase\x20server_test\x20timeout\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20\x20optimizations\x20to\x20reduce\x20allocations.\x0a*\x20runtime:\x20fix\x20darwin/amd64\x20thread\x20VM\x20footprint\x20(thanks\x20Alexey\x20Borzenkov),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20gdb\x20support\x20for\x20goroutines,\x0a\x20\x20\x20\x20\x20\x20\x20\x20more\x20stack\x20split\x20fixes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20os-specific\x20types\x20and\x20code\x20for\x20setitimer,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20defs.h\x20for\x20freebsd-386\x20(thanks\x20Devon\x20H.\x20O'Dell).\x0a*\x20strings:\x20Map:\x20avoid\x20allocation\x20when\x20string\x20is\x20unchanged.\x0a*\x20syscall:\x20GetsockoptInt\x20(thanks\x20Albert\x20Strasheim),\x0a\x20\x20\x20\x20\x20\x20\x20\x20StartProcess\x20fixes\x20for\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20permit\x20non-blocking\x20syscalls,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rename\x20from\x20.sh\x20to\x20.pl,\x20because\x20these\x20files\x20are\x20in\x20Perl.\x0a*\x20test:\x20enable\x20tests\x20using\x20v,\x20ok\x20:=\x20&lt;-ch\x20syntax\x20(thanks\x20Robert\x20Hencke).\x0a*\x20time:\x20give\x20a\x20helpful\x20message\x20when\x20we\x20can't\x20set\x20the\x20time\x20zone\x20for\x20testing.\x0a\x20\x20\x20\x20\x20\x20\x20\x20isolate\x20syscall\x20reference\x20in\x20sys.go.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-03-15\">2011-03-15</h2>\x0a\x0a<pre>\x0aThis\x20week's\x20release\x20introduces\x20a\x20new\x20release\x20tagging\x20scheme.\x20We\x20intend\x20to\x0acontinue\x20with\x20our\x20weekly\x20releases,\x20but\x20have\x20renamed\x20the\x20existing\x20tags\x20from\x0a\"release\"\x20to\x20\"weekly\".\x20The\x20\"release\"\x20tag\x20will\x20now\x20be\x20applied\x20to\x20one\x20hand-picked\x0astable\x20release\x20each\x20month\x20or\x20two.\x0a\x0aThe\x20revision\x20formerly\x20tagged\x20\"release.2011-03-07.1\"\x20(now\x20\"weekly.2011-03-07.1\")\x0ahas\x20been\x20nominated\x20our\x20first\x20stable\x20release,\x20and\x20has\x20been\x20given\x20the\x20tag\x0a\"release.r56\".\x20As\x20we\x20tag\x20each\x20stable\x20release\x20we\x20will\x20post\x20an\x20announcement\x20to\x0athe\x20new\x20golang-announce\x20mailing\x20list:\x0a\x20\x20http://groups.google.com/group/golang-announce\x0a\x0aYou\x20can\x20continue\x20to\x20keep\x20your\x20Go\x20installation\x20updated\x20using\x20\"hg\x20update\x0arelease\",\x20but\x20now\x20you\x20should\x20only\x20need\x20to\x20update\x20once\x20we\x20tag\x20a\x20new\x20stable\x0arelease,\x20which\x20we\x20will\x20announce\x20here.\x20If\x20you\x20wish\x20to\x20stay\x20at\x20the\x20leading\x20edge,\x0ayou\x20should\x20switch\x20to\x20the\x20weekly\x20tag\x20with\x20\"hg\x20update\x20weekly\".\x0a\x0a\x0aThis\x20weekly\x20release\x20includes\x20significant\x20changes\x20to\x20the\x20language\x20spec\x20and\x20the\x0ahttp,\x20os,\x20and\x20syscall\x20packages.\x20Your\x20code\x20may\x20need\x20to\x20be\x20changed.\x20It\x20also\x0aintroduces\x20the\x20new\x20gofix\x20tool.\x0a\x0aThe\x20closed\x20function\x20has\x20been\x20removed\x20from\x20the\x20language.\x20The\x20syntax\x20for\x20channel\x0areceives\x20has\x20been\x20changed\x20to\x20return\x20an\x20optional\x20second\x20value,\x20a\x20boolean\x20value\x0aindicating\x20whether\x20the\x20channel\x20is\x20closed.\x20This\x20code:\x0a\x09v\x20:=\x20&lt;-ch\x0a\x09if\x20closed(ch)\x20{\x0a\x09\x09//\x20channel\x20is\x20closed\x0a\x09}\x0ashould\x20now\x20be\x20written\x20as:\x0a\x09v,\x20ok\x20:=\x20&lt;-ch\x0a\x09if\x20!ok\x20{\x0a\x09\x09//\x20channel\x20is\x20closed\x0a\x09}\x0a\x0aIt\x20is\x20now\x20illegal\x20to\x20declare\x20unused\x20labels,\x20just\x20as\x20it\x20is\x20illegal\x20to\x20declare\x0aunused\x20local\x20variables.\x0a\x0aThe\x20new\x20gofix\x20tool\x20finds\x20Go\x20programs\x20that\x20use\x20old\x20APIs\x20and\x20rewrites\x20them\x20to\x20use\x0anewer\x20ones.\x20\x20After\x20you\x20update\x20to\x20a\x20new\x20Go\x20release,\x20gofix\x20helps\x20make\x20the\x0anecessary\x20changes\x20to\x20your\x20programs.\x20Gofix\x20will\x20handle\x20the\x20http,\x20os,\x20and\x20syscall\x0apackage\x20changes\x20described\x20below,\x20and\x20we\x20will\x20update\x20the\x20program\x20to\x20keep\x20up\x20with\x0afuture\x20changes\x20to\x20the\x20libraries.\x0a\x0aThe\x20Hijack\x20and\x20Flush\x20methods\x20have\x20been\x20removed\x20from\x20the\x20http.ResponseWriter\x0ainterface\x20and\x20are\x20accessible\x20via\x20the\x20new\x20http.Hijacker\x20and\x20http.Flusher\x0ainterfaces.\x20The\x20RemoteAddr\x20and\x20UsingTLS\x20methods\x20have\x20been\x20moved\x20from\x0ahttp.ResponseWriter\x20to\x20http.Request.\x0a\x0aThe\x20http.ResponseWriter\x20interface's\x20SetHeader\x20method\x20has\x20been\x20replaced\x20by\x20a\x0aHeader()\x20method\x20that\x20returns\x20the\x20response's\x20http.Header.\x20Caller\x20code\x20needs\x20to\x0achange.\x20This\x20code:\x0a\x09rw.SetHeader(\"Content-Type\",\x20\"text/plain\")\x0ashould\x20now\x20be\x20written\x20as:\x0a\x09rw.Header().Set(\"Content-Type\",\x20\"text/plain\")\x0aThe\x20os\x20and\x20syscall\x20packages'\x20StartProcess\x20functions\x20now\x20take\x20their\x20final\x20three\x0aarguments\x20as\x20an\x20*os.ProcAttr\x20and\x20*syscall.ProcAttr\x20values,\x20respectively.\x20This\x0acode:\x0a\x09os.StartProcess(bin,\x20args,\x20env,\x20dir,\x20fds)\x0ashould\x20now\x20be\x20written\x20as:\x0a\x09os.StartProcess(bin,\x20args,\x20&amp;os.ProcAttr{Files:\x20fds,\x20Dir:\x20dir,\x20Env:\x20env})\x0a\x0aThe\x20gob\x20package\x20will\x20now\x20encode\x20and\x20decode\x20values\x20of\x20types\x20that\x20implement\x20the\x0agob.GobEncoder\x20and\x20gob.GobDecoder\x20interfaces.\x20This\x20allows\x20types\x20with\x20unexported\x0afields\x20to\x20transmit\x20self-consistent\x20descriptions;\x20one\x20instance\x20is\x20big.Int\x20and\x0abig.Rat.\x0a\x0aOther\x20changes:\x0a*\x205l,\x206l,\x208l:\x20reduce\x20binary\x20size\x20about\x2040%\x20by\x20omitting\x20symbols\x20for\x20type,\x20string,\x20go.string.\x0a*\x205l,\x208l:\x20output\x20missing\x20section\x20symbols\x20(thanks\x20Anthony\x20Martin).\x0a*\x206l,\x208l:\x20fix\x20gdb\x20crash.\x0a*\x20Make.cmd:\x20also\x20clean\x20_test*\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20big:\x20implemented\x20custom\x20Gob(En/De)coder\x20for\x20Int\x20type.\x0a*\x20build:\x20remove\x20duplicate\x20dependency\x20in\x20Make.cmd\x20(thanks\x20Robert\x20Hencke),\x0a\x20\x20\x20\x20\x20\x20\x20\x20run\x20gotest\x20in\x20misc/cgo/test.\x0a*\x20codereview.py:\x20don't\x20suggest\x20change\x20-d\x20if\x20user\x20is\x20not\x20CL\x20author\x20(thanks\x20Robert\x20Hencke).\x0a*\x20compress/lzw:\x20benchmark\x20a\x20range\x20of\x20input\x20sizes.\x0a*\x20crypto/ecdsa:\x20add\x20package.\x0a*\x20crypto/elliptic:\x20add\x20the\x20N\x20value\x20of\x20each\x20curve.\x0a*\x20crypto/openpgp:\x20bug\x20fixes\x20and\x20fix\x20misnamed\x20function.\x0a*\x20crypto/tls:\x20fix\x20compile\x20error\x20(thanks\x20Dave\x20Cheney).\x0a*\x20doc:\x20Effective\x20Go:\x20some\x20small\x20cleanups,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20FAQ.\x20hello,\x20world\x20is\x20now\x201.1MB,\x20down\x20from\x201.8MB,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20codelab\x20wiki\x20to\x20fix\x20template.Execute\x20argument\x20order.\x0a*\x20flag:\x20visit\x20the\x20flags\x20in\x20sorted\x20order,\x20for\x20nicer\x20messages.\x0a*\x20fmt:\x20do\x20not\x20export\x20EOF\x20=\x20-1.\x0a*\x20fmt:\x20make\x20ScanState.Token\x20more\x20general\x20(thanks\x20Roger\x20Peppe).\x0a*\x20gc:\x20diagnose\x20unused\x20labels,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20handling\x20of\x20return\x20values\x20named\x20_,\x0a\x20\x20\x20\x20\x20\x20\x20\x20include\x20all\x20dependencies\x20in\x20export\x20metadata,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20unsafe.Pointer\x20its\x20own\x20kind\x20of\x20type,\x20instead\x20of\x20an\x20equivalent\x20to\x20*any.\x0a*\x20go/ast,\x20go/parser:\x20populate\x20identifier\x20scopes\x20at\x20parse\x20time.\x0a*\x20go/ast:\x20add\x20FileSet\x20parameter\x20to\x20ast.Print\x20and\x20ast.Fprint.\x0a*\x20go/parser:\x20first\x20constant\x20in\x20a\x20constant\x20declaration\x20must\x20have\x20a\x20value.\x0a*\x20gob:\x20efficiency\x20and\x20reliability\x20fixes.\x0a*\x20gofmt:\x20remove\x20-trace\x20and\x20-ast\x20flags.\x0a*\x20goinstall:\x20handle\x20$(GOOS)\x20and\x20$(GOARCH)\x20in\x20filenames,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20.c\x20files\x20with\x20gc\x20when\x20cgo\x20isn't\x20used,\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20.s\x20files\x20with\x20gc\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20gopack:\x20omit\x20time\x20stamps,\x20makes\x20output\x20deterministic.\x0a*\x20gotype:\x20commandline\x20tool\x20to\x20typecheck\x20go\x20programs.\x0a*\x20govet:\x20handle\x20'*'\x20in\x20print\x20format\x20strings.\x0a*\x20hash:\x20new\x20FNV-1a\x20implementation\x20(thanks\x20Pascal\x20S.\x20de\x20Kloe).\x0a*\x20http/cgi:\x20child\x20support\x20(e.g.\x20Go\x20CGI\x20under\x20Apache).\x0a*\x20http:\x20adapt\x20Cookie\x20code\x20to\x20follow\x20IETF\x20draft\x20(thanks\x20Petar\x20Maymounkov),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20test\x20for\x20fixed\x20HTTP/1.0\x20keep-alive\x20issue,\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20hit\x20external\x20network\x20in\x20client_test.go,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20transport\x20crash\x20when\x20request\x20URL\x20is\x20nil,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rename\x20interface\x20Transport\x20to\x20RoundTripper,\x0a\x20\x20\x20\x20\x20\x20\x20\x20run\x20tests\x20even\x20with\x20DISABLE_NET_TESTS=1.\x0a*\x20httptest:\x20default\x20the\x20Recorder\x20status\x20code\x20to\x20200\x20on\x20a\x20Write.\x0a*\x20io/ioutil:\x20clean-up\x20of\x20ReadAll\x20and\x20ReadFile.\x0a*\x20ioutil:\x20add\x20NopCloser.\x0a*\x20ld:\x20preserve\x20symbol\x20sizes\x20during\x20data\x20layout.\x0a*\x20lib9,\x20libmach:\x20Change\x20GOOS\x20references\x20to\x20GOHOSTOS\x20(thanks\x20Evan\x20Shaw).\x0a*\x20libmach:\x20correct\x20string\x20comparison\x20to\x20revive\x206cov\x20on\x20darwin\x20(thanks\x20Dave\x20Cheney).\x0a*\x20misc/vim:\x20Add\x20indent\x20script\x20for\x20Vim\x20(thanks\x20Ross\x20Light).\x0a*\x20net,\x20os,\x20syslog:\x20fixes\x20for\x20Solaris\x20support.\x0a*\x20net:\x20don't\x20loop\x20to\x20drain\x20wakeup\x20pipe.\x0a*\x20nm:\x20document\x20-S\x20flag.\x0a*\x20openpgp:\x20add\x20PublicKey\x20KeyId\x20string\x20accessors.\x0a*\x20rpc:\x20optimizations,\x20add\x20benchmarks\x20and\x20memory\x20profiling,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20httptest.Server\x20for\x20tests\x20(thanks\x20Robert\x20Hencke).\x0a*\x20runtime:\x20reduce\x20lock\x20contention\x20via\x20wakeup\x20on\x20scheduler\x20unlock,\x0a\x20\x20\x20\x20\x20\x20\x20\x20scheduler,\x20cgo\x20reorganization,\x0a\x20\x20\x20\x20\x20\x20\x20\x20split\x20non-debugging\x20malloc\x20interface\x20out\x20of\x20debug.go\x20into\x20mem.go.\x0a*\x20spec:\x20clarify\x20return\x20statement\x20rules.\x0a*\x20strings:\x20add\x20IndexRune\x20tests,\x20ASCII\x20fast\x20path,\x0a\x20\x20\x20\x20\x20\x20\x20\x20better\x20benchmark\x20names;\x20add\x20BenchmarkIndex.\x0a*\x20syscall:\x20implement\x20Mount\x20and\x20Unmount\x20for\x20linux,\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20Reboot\x20for\x20linux.\x0a*\x20time:\x20fix\x20Time.ZoneOffset\x20documentation\x20(thanks\x20Peter\x20Mundy).\x0a*\x20tls:\x20move\x20PeerCertificates\x20to\x20ConnectionState.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-03-07\">2011-03-07\x20(<a\x20href=\"release.html#r56\">base\x20for\x20r56</a>)</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20changes\x20to\x20the\x20reflect\x20and\x20path\x20packages.\x0aCode\x20that\x20uses\x20reflect\x20or\x20path\x20may\x20need\x20to\x20be\x20updated.\x0a\x0aThe\x20reflect\x20package's\x20Value.Addr\x20method\x20has\x20been\x20renamed\x20to\x20Value.UnsafeAddr.\x0aCode\x20that\x20uses\x20the\x20Addr\x20method\x20will\x20have\x20to\x20call\x20UnsafeAddr\x20instead.\x0a\x0aThe\x20path\x20package\x20has\x20been\x20split\x20into\x20two\x20packages:\x20path\x20and\x20path/filepath.\x0aPackage\x20path\x20manipulates\x20slash-separated\x20paths,\x20regardless\x20of\x20operating\x20system.\x0aPackage\x20filepath\x20implements\x20the\x20local\x20operating\x20system's\x20native\x20file\x20paths.\x0aOS-specific\x20functioanlity\x20in\x20pacakge\x20path,\x20such\x20as\x20Walk,\x20moved\x20to\x20filepath.\x0a\x0aOther\x20changes:\x0a*\x20build:\x20fixes\x20and\x20simplifications\x20(thanks\x20Dave\x20Cheney),\x0a\x20\x20\x20\x20\x20\x20\x20\x20move\x20$GOBIN\x20ahead\x20of\x20/bin,\x20/usr/bin\x20in\x20build\x20$PATH.\x0a*\x20bzip2:\x20speed\x20up\x20decompression.\x0a*\x20cgo:\x20fix\x20dwarf\x20type\x20parsing\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20\x20put\x20temporary\x20source\x20files\x20in\x20_obj\x20(thanks\x20Roger\x20Peppe),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20bug\x20involving\x200-argument\x20callbacks.\x0a*\x20compress/lzw:\x20optimizations.\x0a*\x20doc:\x20add\x20FAQ\x20about\x20\"implements\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20FAQ\x20about\x20large\x20binaries\x20,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20FAQ\x20about\x20stack\x20vs\x20heap\x20allocation,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20internationalization\x20to\x20roadmap,\x0a\x20\x20\x20\x20\x20\x20\x20\x20describe\x20platform-specific\x20conventions\x20in\x20code.html.\x0a*\x20fmt:\x20allow\x20recursive\x20calls\x20to\x20Fscan\x20etc\x20(thanks\x20Roger\x20Peppe),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20%#p\x20suppress\x20leading\x200x.\x0a*\x20gc,\x20gopack:\x20add\x20some\x20missing\x20flags\x20to\x20the\x20docs.\x0a*\x20gc:\x20fix\x20init\x20of\x20packages\x20named\x20main\x20(thanks\x20Gustavo\x20Niemeyer),\x0a*\x20gob:\x20make\x20recursive\x20map\x20and\x20slice\x20types\x20work,\x20and\x20other\x20fixes.\x0a\x20\x20\x20\x20\x20\x20\x20\x20tentative\x20support\x20for\x20GobEncoder/GobDecoder\x20interfaces.\x0a*\x20gobuilder:\x20add\x20-package\x20flag\x20to\x20build\x20external\x20packages\x20and\x20-v\x20for\x20verbose.\x0a*\x20gofmt:\x20exclude\x20test\x20file\x20that\x20is\x20not\x20legal\x20Go.\x0a*\x20goinstall:\x20protect\x20against\x20malicious\x20filenames\x20(thanks\x20Roger\x20Peppe).\x0a*\x20goyacc:\x20provide\x20-p\x20flag\x20to\x20set\x20prefix\x20for\x20names,\x20documentation\x20update.\x0a*\x20http:\x20add\x20cookie\x20support\x20(thanks\x20Petar\x20Maymounkov),\x0a\x20\x20\x20\x20\x20\x20\x20\x20allow\x20handlers\x20to\x20send\x20non-chunked\x20responses,\x0a\x20\x20\x20\x20\x20\x20\x20\x20export\x20ParseHTTPVersion,\x0a\x20\x20\x20\x20\x20\x20\x20\x20expose\x20Client's\x20Transport,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20WriteProxy,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rename\x20ClientTransport\x20to\x20Transport.\x0a*\x20http/cgi:\x20new\x20package.\x0a*\x20http/httptest:\x20new\x20package.\x0a*\x20image:\x20add\x20a\x20decoding\x20test\x20for\x20common\x20file\x20formats.\x0a*\x20io/ioutil:\x20add\x20TempDir.\x0a*\x20mime/multipart:\x20Header\x20changed\x20from\x20map\x20to\x20MIMEHeader\x0a*\x20path/filepath:\x20new\x20OS-specific\x20path\x20support\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20reflect:\x20add\x20PtrTo,\x20add\x20Value.Addr\x20(old\x20Addr\x20is\x20now\x20UnsafeAddr).\x0a*\x20runtime:\x20use\x20kernel-supplied\x20compare-and-swap\x20on\x20linux/arm.\x0a*\x20spec:\x20minor\x20clarification\x20of\x20scope\x20rule\x20for\x20functions.\x0a*\x20sync/atomic:\x20new\x20package\x20to\x20expose\x20atomic\x20operations.\x0a*\x20syscall:\x20regenerate\x20zerrors_freebsd_amd64.go\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20work\x20around\x20FreeBSD\x20execve\x20kernel\x20bug\x20(thanks\x20Devon\x20H.\x20O'Dell).\x0a*\x20template:\x20document\x20the\x20delimiters.\x0a*\x20testing:\x20run\x20GC\x20before\x20each\x20benchmark\x20run\x20(thanks\x20Roger\x20Peppe).\x0a*\x20unsafe:\x20fix\x20the\x20documentation.\x0a*\x20websocket:\x20use\x20httptest.Server\x20for\x20tests\x20(thanks\x20Robert\x20Hencke).\x0a*\x20xml:\x20permit\x20nested\x20directives\x20(thanks\x20Chris\x20Dollin).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-02-24\">2011-02-24</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20changes\x20to\x20the\x20http\x20package\x20and\x20a\x20small\x20language\x20change.\x0aYour\x20code\x20will\x20require\x20changes\x20if\x20it\x20manipulates\x20http\x20Headers\x20or\x20omits\x20the\x0acondition\x20in\x20if\x20statements.\x0a\x0aThe\x20new\x20http.Header\x20type\x20replaces\x20map[string]string\x20in\x20the\x20Header\x20and\x20Trailer\x0afields\x20of\x20http.Request\x20and\x20http.Response.\x0aA\x20Header\x20value\x20can\x20be\x20manipulated\x20via\x20its\x20Get,\x20Set,\x20Add,\x20and\x20Del\x20methods.\x0aSee\x20http://golang.org/pkg/http/#Header\x0a\x0aThe\x20condition\x20is\x20now\x20mandatory\x20in\x20if\x20statements.\x0aPreviously\x20it\x20would\x20default\x20to\x20true,\x20as\x20in\x20switch\x20and\x20for\x20statements.\x0aThis\x20code\x20is\x20now\x20illegal:\x0a\x09if\x20x\x20:=\x20foo();\x20{\x0a\x09\x09//\x20code\x20that\x20is\x20always\x20executed\x0a\x09}\x0aThe\x20same\x20effect\x20can\x20be\x20achieved\x20like\x20this:\x0a\x09if\x20x\x20:=\x20foo();\x20true\x20{\x0a\x09\x09//\x20code\x0a\x09}\x0aOr,\x20in\x20a\x20simpler\x20form:\x0a\x09{\x0a\x09\x09x\x20:=\x20foo()\x0a\x09\x09//\x20code\x0a\x09}\x0a\x0aOther\x20changes:\x0a*\x206l:\x20new\x20-Hwindowsgui\x20flag\x20allows\x20to\x20build\x20windows\x20gui\x20pe\x20(thanks\x20Alex\x20Brainman),\x0a\x09pe\x20fixes\x20(thanks\x20Wei\x20Guangjing).\x0a*\x208l,\x206l:\x20allow\x20for\x20more\x20os\x20threads\x20to\x20be\x20created\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a*\x20build:\x20reduce\x20the\x20use\x20of\x20subshells\x20in\x20recursive\x20make,\x20and\x0a\x09remove\x20unused\x20NaCl\x20conditional\x20from\x20make.bash\x20(thanks\x20Dave\x20Cheney).\x0a*\x20codereview:\x20fix\x20clpatch\x20with\x20empty\x20diffs\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20compress/bzip2:\x20add\x20package.\x0a*\x20compress/lzw:\x20implement\x20a\x20decoder.\x0a*\x20crypto/openpgp:\x20add\x20package.\x0a*\x20crypto/rand:\x20add\x20read\x20buffer\x20to\x20speed\x20up\x20small\x20requests\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20crypto/rsa:\x20left-pad\x20OAEP\x20results\x20when\x20needed.\x0a*\x20crypto/tls:\x20make\x20protocol\x20negotiation\x20failure\x20fatal.\x0a*\x20fmt:\x20stop\x20giving\x20characters\x20to\x20the\x20Scan\x20method\x20of\x20Scanner\x20when\x20we\x20hit\x20a\x20newline\x20in\x20Scanln.\x0a*\x20gc:\x20interface\x20error\x20message\x20fixes,\x0a\x09make\x20string\x20const\x20comparison\x20unsigned\x20(thanks\x20Jeff\x20R.\x20Allen).\x0a*\x20go\x20spec:\x20minor\x20clarification\x20on\x20channel\x20types.\x0a*\x20go/ast,\x20parser:\x20condition\x20in\x20if\x20statement\x20is\x20mandatory.\x0a*\x20gob:\x20compute\x20information\x20about\x20a\x20user's\x20type\x20once.\x0a\x09protect\x20against\x20pure\x20recursive\x20types.\x0a*\x20godoc:\x20accept\x20symbolic\x20links\x20as\x20path\x20names\x20provided\x20to\x20-path,\x0a\x09add\x20robots.txt,\x20log\x20errors\x20when\x20reading\x20filter\x20files.\x0a*\x20html:\x20tokenize\x20HTML\x20comments.\x0a*\x20http:\x20add\x20proxy\x20support\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x09implement\x20with\x20net/textproto\x20(thanks\x20Petar\x20Maymounkov),\x0a\x09send\x20full\x20URL\x20in\x20proxy\x20requests,\x0a\x09introduce\x20start\x20of\x20Client\x20and\x20ClientTransport.\x0a*\x20image/png:\x20support\x20for\x20more\x20formats\x20(thanks\x20Mikael\x20Tillenius).\x0a*\x20json:\x20only\x20use\x20alphanumeric\x20tags,\x0a\x09use\x20base64\x20to\x20encode\x20[]byte\x20(thanks\x20Roger\x20Peppe).\x0a*\x20ld:\x20detect\x20stack\x20overflow\x20due\x20to\x20NOSPLIT,\x20drop\x20rpath,\x20support\x20weak\x20symbols.\x0a*\x20misc/dashboard/builder:\x20talk\x20to\x20hg\x20with\x20utf-8\x20encoding.\x0a*\x20misc/dashboard:\x20notify\x20golang-dev\x20on\x20build\x20failure.\x0a*\x20net:\x20*netFD.Read\x20to\x20return\x20os.EOF\x20on\x20eof\x20under\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09add\x20IPv4\x20multicast\x20to\x20UDPConn\x20(thanks\x20Dave\x20Cheney),\x0a\x09more\x20accurate\x20IPv4-in-IPv6\x20API\x20test\x20(thanks\x20Mikio\x20Hara),\x0a\x09reject\x20invalid\x20net:proto\x20network\x20names\x20(thanks\x20Olivier\x20Antoine).\x0a*\x20netchan:\x20allow\x20use\x20of\x20arbitrary\x20connections\x20(thanks\x20Roger\x20Peppe).\x0a*\x20os:\x20add\x20ENODATA\x20and\x20ENOTCONN\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20reflect:\x20add\x20a\x20couple\x20of\x20sentences\x20explaining\x20how\x20Methods\x20operate,\x0a\x09add\x20a\x20secret\x20method\x20to\x20ArrayOrSliceType\x20to\x20ensure\x20it's\x20only\x20implemented\x20by\x20arrays\x20and\x20slices,\x0a\x09add\x20pointer\x20word\x20to\x20CommonType\x20(placeholder\x20for\x20future\x20work).\x0a*\x20runtime-gdb.py:\x20gdb\x20pretty\x20printer\x20for\x20go\x20strings\x20properly\x20handles\x20length.\x0a*\x20runtime:\x20various\x20bug\x20fixes,\x20more\x20complete\x20stack\x20traces,\x0a\x09record\x20$GOROOT_FINAL\x20for\x20runtime.GOROOT.\x0a*\x20spec:\x20delete\x20incorrect\x20mention\x20of\x20selector\x20working\x20on\x20pointer\x20to\x20interface\x20type.\x0a*\x20sync:\x20add\x20Cond\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20syscall:\x20add\x20MCL_*\x20flags\x20for\x20mlockall\x20(thanks\x20Albert\x20Strasheim),\x0a\x09implement\x20chmod()\x20for\x20win32\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20test/bench:\x20update\x20timings\x20for\x20new\x20GC.\x0a*\x20testing:\x20rename\x20cmdline\x20flags\x20to\x20avoid\x20conflicts\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20textproto:\x20introduce\x20Header\x20type\x20(thanks\x20Petar\x20Maymounkov).\x0a*\x20websocket:\x20use\x20new\x20interface\x20to\x20access\x20Header.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-02-15\">2011-02-15</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20changes\x20to\x20the\x20io,\x20os,\x20and\x20template\x20packages.\x0aYou\x20may\x20need\x20to\x20update\x20your\x20code.\x0a\x0aThe\x20io.ReadByter\x20and\x20io.ReadRuner\x20interface\x20types\x20have\x20been\x20renamed\x20to\x0aio.ByteReader\x20and\x20io.RuneReader\x20respectively.\x0a\x0aThe\x20os\x20package's\x20ForkExec\x20function\x20has\x20been\x20superseded\x20by\x20the\x20new\x20StartProcess\x0afunction\x20and\x20an\x20API\x20built\x20around\x20the\x20Process\x20type:\x0a\x09http://golang.org/pkg/os/#Process\x0a\x0aThe\x20order\x20of\x20arguments\x20to\x20template.Execute\x20has\x20been\x20reversed\x20to\x20be\x20consistent\x0athe\x20notion\x20of\x20\"destination\x20first\",\x20as\x20with\x20io.Copy,\x20fmt.Fprint,\x20and\x20others.\x0a\x0aGotest\x20now\x20works\x20for\x20package\x20main\x20in\x20directories\x20using\x20Make.cmd-based\x20makefiles.\x0a\x0aThe\x20memory\x20allocation\x20runtime\x20problems\x20from\x20the\x20last\x20release\x20are\x20not\x20completely\x0afixed.\x20\x20The\x20virtual\x20memory\x20exhaustion\x20problems\x20encountered\x20by\x20people\x20using\x0aulimit\x20-v\x20have\x20been\x20fixed,\x20but\x20there\x20remain\x20known\x20garbage\x20collector\x20problems\x0awhen\x20using\x20GOMAXPROCS\x20>\x201.\x0a\x0aOther\x20changes:\x0a*\x205l:\x20stopped\x20generating\x2064-bit\x20eor.\x0a*\x208l:\x20more\x20work\x20on\x20plan9\x20support\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20archive/zip:\x20handle\x20files\x20with\x20data\x20descriptors.\x0a*\x20arm:\x20working\x20peep-hole\x20optimizer.\x0a*\x20asn1:\x20marshal\x20true\x20as\x20255,\x20not\x201.\x0a*\x20buffer.go:\x20minor\x20optimization,\x20expanded\x20comment.\x0a*\x20build:\x20drop\x20syslog\x20on\x20DISABLE_NET_TESTS=1\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20allow\x20clean.bash\x20to\x20work\x20on\x20fresh\x20checkout,\x0a\x20\x20\x20\x20\x20\x20\x20change\x20\"all\x20tests\x20pass\"\x20message\x20to\x20be\x20more\x20obvious,\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20spaces\x20in\x20GOROOT\x20(thanks\x20Christopher\x20Nielsen).\x0a*\x20bytes:\x20fix\x20bug\x20in\x20buffer.ReadBytes\x20(thanks\x20Evan\x20Shaw).\x0a*\x205g:\x20better\x20int64\x20code,\x0a\x20\x20\x20\x20\x20\x20\x20don't\x20use\x20MVN\x20instruction.\x0a*\x20cgo:\x20don't\x20run\x20cgo\x20when\x20not\x20compiling\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20_cgo_run\x20timestamp\x20file\x20order\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20handling\x20of\x20signed\x20enumerations\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20os/arch\x20dependent\x20#cgo\x20directives\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20rename\x20internal\x20f\x20to\x20avoid\x20conflict\x20with\x20possible\x20C\x20global\x20named\x20f.\x0a*\x20codereview:\x20fix\x20hgpatch\x20on\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x20\x20\x20\x20\x20\x20\x20record\x20repository,\x20base\x20revision,\x0a\x20\x20\x20\x20\x20\x20\x20use\x20cmd.communicate\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20container/ring:\x20replace\x20Iter()\x20with\x20Do().\x0a*\x20crypto/cipher:\x20add\x20resync\x20open\x20to\x20OCFB\x20mode.\x0a*\x20crypto/openpgp/armor:\x20bug\x20fixes.\x0a*\x20crypto/openpgp/packet:\x20new\x20subpackage.\x0a*\x20crypto/tls:\x20load\x20a\x20chain\x20of\x20certificates\x20from\x20a\x20file,\x0a\x20\x20\x20\x20\x20\x20\x20select\x20best\x20cipher\x20suite,\x20not\x20worst.\x0a*\x20crypto/x509:\x20add\x20support\x20for\x20name\x20constraints.\x0a*\x20debug/pe:\x20ImportedSymbols\x20fixes\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20doc/code:\x20update\x20to\x20reflect\x20that\x20package\x20names\x20need\x20not\x20be\x20unique.\x0a*\x20doc/codelab/wiki:\x20a\x20bunch\x20of\x20fixes\x20(thanks\x20Andrey\x20Mirtchovski).\x0a*\x20doc/install:\x20update\x20for\x20new\x20versions\x20of\x20Mercurial.\x0a*\x20encoding/line:\x20fix\x20line\x20returned\x20after\x20EOF.\x0a*\x20flag:\x20allow\x20hexadecimal\x20(0xFF)\x20and\x20octal\x20(0377)\x20input\x20for\x20integer\x20flags.\x0a*\x20fmt.Scan:\x20scan\x20binary-exponent\x20floating\x20format,\x202.4p-3,\x0a\x20\x20\x20\x20\x20\x20\x20hexadecimal\x20(0xFF)\x20and\x20octal\x20(0377)\x20integers.\x0a*\x20fmt:\x20document\x20%%;\x20also\x20%b\x20for\x20floating\x20point.\x0a*\x20gc,\x20ld:\x20detect\x20stale\x20or\x20incompatible\x20object\x20files,\x0a\x20\x20\x20\x20\x20\x20\x20package\x20name\x20main\x20no\x20longer\x20reserved.\x0a*\x20gc:\x20correct\x20receiver\x20in\x20method\x20missing\x20error\x20(thanks\x20Lorenzo\x20Stoakes),\x0a\x20\x20\x20\x20\x20\x20\x20correct\x20rounding\x20of\x20denormal\x20constants\x20(thanks\x20Eoghan\x20Sherry),\x0a\x20\x20\x20\x20\x20\x20\x20select\x20receive\x20bug\x20fix.\x0a*\x20go/printer,\x20gofmt:\x20smarter\x20handling\x20of\x20multi-line\x20raw\x20strings.\x0a*\x20go/printer:\x20line\x20comments\x20must\x20always\x20end\x20in\x20a\x20newline,\x0a\x20\x20\x20\x20\x20\x20\x20remove\x20notion\x20of\x20\"Styler\",\x20remove\x20HTML\x20mode.\x0a*\x20gob:\x20allow\x20Decode(nil)\x20and\x20have\x20it\x20just\x20discard\x20the\x20next\x20value.\x0a*\x20godoc:\x20use\x20IsAbs\x20to\x20test\x20for\x20absolute\x20paths\x20(fix\x20for\x20win32)\x20(thanks\x20Yasuhiro\x20Matsumoto),\x0a\x20\x20\x20\x20\x20\x20\x20don't\x20hide\x20package\x20lookup\x20error\x20if\x20there's\x20no\x20command\x20with\x20the\x20same\x20name.\x0a*\x20gotest:\x20enable\x20unit\x20tests\x20for\x20main\x20programs.\x0a*\x20http:\x20add\x20Server\x20type\x20supporting\x20timeouts,\x0a\x20\x20\x20\x20\x20\x20\x20add\x20pipelining\x20to\x20ClientConn,\x20ServerConn\x20(thanks\x20Petar\x20Maymounkov),\x0a\x20\x20\x20\x20\x20\x20\x20handle\x20unchunked,\x20un-lengthed\x20HTTP/1.1\x20responses.\x0a*\x20io:\x20add\x20RuneReader.\x0a*\x20json:\x20correct\x20Marshal\x20documentation.\x0a*\x20netchan:\x20graceful\x20handling\x20of\x20closed\x20connection\x20(thanks\x20Graham\x20Miller).\x0a*\x20os:\x20implement\x20new\x20Process\x20API\x20(thanks\x20Alex\x20Brainman).\x0a*\x20regexp\x20tests:\x20make\x20some\x20benchmarks\x20more\x20meaningful.\x0a*\x20regexp:\x20add\x20support\x20for\x20matching\x20against\x20text\x20read\x20from\x20RuneReader\x20interface.\x0a*\x20rpc:\x20make\x20more\x20tolerant\x20of\x20errors,\x20properly\x20discard\x20values\x20(thanks\x20Roger\x20Peppe).\x0a*\x20runtime:\x20detect\x20failed\x20thread\x20creation\x20on\x20Windows,\x0a\x20\x20\x20\x20\x20\x20\x20faster\x20allocator,\x20garbage\x20collector,\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20virtual\x20memory\x20exhaustion,\x0a\x20\x20\x20\x20\x20\x20\x20implemented\x20windows\x20console\x20ctrl\x20handler\x20(SIGINT)\x20(thanks\x20Hector\x20Chu),\x0a\x20\x20\x20\x20\x20\x20\x20more\x20detailed\x20panic\x20traces,\x20line\x20number\x20work,\x0a\x20\x20\x20\x20\x20\x20\x20improved\x20Windows\x20callback\x20handling\x20(thanks\x20Hector\x20Chu).\x0a*\x20spec:\x20adjust\x20notion\x20of\x20Assignability,\x0a\x20\x20\x20\x20\x20\x20\x20allow\x20import\x20of\x20packages\x20named\x20main,\x0a\x20\x20\x20\x20\x20\x20\x20clarification\x20re:\x20method\x20sets\x20of\x20newly\x20declared\x20pointer\x20types,\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20a\x20few\x20typos\x20(thanks\x20Anthony\x20Martin),\x0a\x20\x20\x20\x20\x20\x20\x20fix\x20Typeof()\x20return\x20type\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20move\x20to\x20Unicode\x206.0.\x0a*\x20sync:\x20diagnose\x20Unlock\x20of\x20unlocked\x20Mutex,\x0a\x20\x20\x20\x20\x20\x20\x20new\x20Waitgroup\x20type\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20syscall:\x20add\x20SetsockoptIpMreq\x20(thanks\x20Dave\x20Cheney),\x0a\x20\x20\x20\x20\x20\x20\x20add\x20sockaddr_dl,\x20sysctl\x20with\x20routing\x20message\x20support\x20for\x20darwin,\x20freebsd\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20do\x20not\x20use\x20NULL\x20for\x20zero-length\x20read,\x20write,\x0a\x20\x20\x20\x20\x20\x20\x20implement\x20windows\x20version\x20of\x20Fsync\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20make\x20ForkExec\x20acquire\x20the\x20ForkLock\x20under\x20windows\x20(thanks\x20Hector\x20Chu),\x0a\x20\x20\x20\x20\x20\x20\x20make\x20windows\x20API\x20return\x20errno\x20instead\x20of\x20bool\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20remove\x20obsolete\x20socket\x20IO\x20control\x20(thanks\x20Mikio\x20Hara).\x0a*\x20template:\x20add\x20simple\x20formatter\x20chaining\x20(thanks\x20Kyle\x20Consalus),\x0a\x20\x20\x20\x20\x20\x20\x20allow\x20a\x20leading\x20'*'\x20to\x20indirect\x20through\x20a\x20pointer.\x0a*\x20testing:\x20include\x20elapsed\x20time\x20in\x20test\x20output\x0a*\x20windows:\x20replace\x20remaining\x20__MINGW32__\x20instances\x20with\x20_WIN32\x20(thanks\x20Joe\x20Poirier).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-02-01\">2011-02-01</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20significant\x20changes\x20to\x20channel\x20operations\x20and\x20minor\x0achanges\x20to\x20the\x20log\x20package.\x20Your\x20code\x20will\x20require\x20modification\x20if\x20it\x20uses\x0achannels\x20in\x20non-blocking\x20communications\x20or\x20the\x20log\x20package's\x20Exit\x20functions.\x0a\x0aNon-blocking\x20channel\x20operations\x20have\x20been\x20removed\x20from\x20the\x20language.\x0aThe\x20equivalent\x20operations\x20have\x20always\x20been\x20possible\x20using\x20a\x20select\x20statement\x0awith\x20a\x20default\x20clause.\x20\x20If\x20a\x20default\x20clause\x20is\x20present\x20in\x20a\x20select,\x20that\x20clause\x0awill\x20execute\x20(only)\x20if\x20no\x20other\x20is\x20ready,\x20which\x20allows\x20one\x20to\x20avoid\x20blocking\x20on\x0aa\x20communication.\x0a\x0aFor\x20example,\x20the\x20old\x20non-blocking\x20send\x20operation,\x0a\x0a\x09if\x20ch\x20&lt;-\x20v\x20{\x0a\x09\x09//\x20sent\x0a\x09}\x20else\x20{\x0a\x09\x09//\x20not\x20sent\x0a\x09}\x0a\x0ashould\x20be\x20rewritten\x20as,\x0a\x0a\x09select\x20{\x0a\x09case\x20ch\x20&lt;-\x20v:\x0a\x09\x09//\x20sent\x0a\x09default:\x0a\x09\x09//\x20not\x20sent\x0a\x09}\x0a\x0aSimilarly,\x20this\x20receive,\x0a\x0a\x09v,\x20ok\x20:=\x20&lt;-ch\x0a\x09if\x20ok\x20{\x0a\x09\x09//\x20received\x0a\x09}\x20else\x20{\x0a\x09\x09//\x20not\x20received\x0a\x09}\x0a\x0ashould\x20be\x20rewritten\x20as,\x0a\x0a\x09select\x20{\x0a\x09case\x20v\x20:=\x20&lt;-ch:\x0a\x09\x09//\x20received\x0a\x09default:\x0a\x09\x09//\x20not\x20received\x0a\x09}\x0a\x0aThis\x20change\x20is\x20a\x20prelude\x20to\x20redefining\x20the\x20'comma-ok'\x20syntax\x20for\x20a\x20receive.\x0aIn\x20a\x20later\x20release,\x20a\x20receive\x20expression\x20will\x20return\x20the\x20received\x20value\x20and\x20an\x0aoptional\x20boolean\x20indicating\x20whether\x20the\x20channel\x20has\x20been\x20closed.\x20These\x20changes\x0aare\x20being\x20made\x20in\x20two\x20stages\x20to\x20prevent\x20this\x20semantic\x20change\x20from\x20silently\x0abreaking\x20code\x20that\x20uses\x20'comma-ok'\x20with\x20receives.\x0aThere\x20are\x20no\x20plans\x20to\x20have\x20a\x20boolean\x20expression\x20form\x20for\x20sends.\x0a\x0aSends\x20to\x20a\x20closed\x20channel\x20will\x20panic\x20immediately.\x20Previously,\x20an\x20unspecified\x0anumber\x20of\x20sends\x20would\x20fail\x20silently\x20before\x20causing\x20a\x20panic.\x0a\x0aThe\x20log\x20package's\x20Exit,\x20Exitf,\x20and\x20Exitln\x20functions\x20have\x20been\x20renamed\x20Fatal,\x0aFatalf,\x20and\x20Fatalln\x20respectively.\x20This\x20brings\x20them\x20in\x20line\x20with\x20the\x20naming\x20of\x0athe\x20testing\x20package.\x20\x0a\x0aThe\x20port\x20to\x20the\x20\"tiny\"\x20operating\x20system\x20has\x20been\x20removed.\x20It\x20is\x20unmaintained\x0aand\x20untested.\x20It\x20was\x20a\x20toy\x20to\x20show\x20that\x20Go\x20can\x20run\x20on\x20raw\x20hardware\x20and\x20it\x0aserved\x20its\x20purpose.\x20The\x20source\x20code\x20will\x20of\x20course\x20remain\x20in\x20the\x20repository\x0ahistory,\x20so\x20it\x20could\x20be\x20brought\x20back\x20if\x20needed\x20later.\x0a\x0aThis\x20release\x20also\x20changes\x20some\x20of\x20the\x20internal\x20structure\x20of\x20the\x20memory\x0aallocator\x20in\x20preparation\x20for\x20other\x20garbage\x20collector\x20changes.\x20\x0aIf\x20you\x20run\x20into\x20problems,\x20please\x20let\x20us\x20know.\x0aThere\x20is\x20one\x20known\x20issue\x20that\x20we\x20are\x20aware\x20of\x20but\x20have\x20not\x20debugged\x20yet:\x0a\x09http://code.google.com/p/go/issues/detail?id=1464&amp;.\x0a\x0aOther\x20changes\x20in\x20this\x20release:\x0a*\x205l:\x20document\x20-F,\x20force\x20it\x20on\x20old\x20ARMs\x20(software\x20floating\x20point\x20emulation)\x0a*\x206g:\x20fix\x20registerization\x20of\x20temporaries\x20(thanks\x20Eoghan\x20Sherry),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20uint64(uintptr(unsafe.Pointer(&amp;x))).\x0a*\x206l:\x20Relocate\x20CMOV*\x20instructions\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20\x20windows/amd64\x20port\x20(thanks\x20Wei\x20Guangjing).\x0a*\x208l:\x20add\x20PE\x20dynexport,\x20emit\x20DWARF\x20in\x20Windows\x20PE,\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20code\x20generation\x20fixes\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20bufio:\x20make\x20Flush\x20a\x20no-op\x20when\x20the\x20buffer\x20is\x20empty.\x0a*\x20bytes:\x20Add\x20Buffer.ReadBytes,\x20Buffer.ReadString\x20(thanks\x20Evan\x20Shaw).\x0a*\x20cc:\x20mode\x20to\x20generate\x20go-code\x20for\x20types\x20and\x20variables.\x0a*\x20cgo:\x20define\x20CGO_CFLAGS\x20and\x20CGO_LDFLAGS\x20in\x20Go\x20files\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20\x20windows/386\x20port\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20codereview:\x20fix\x20windows\x20(thanks\x20Hector\x20Chu),\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20file\x20patterns\x20better,\x0a\x20\x20\x20\x20\x20\x20\x20\x20more\x20ASCII\x20vs.\x20Unicode\x20nonsense.\x0a*\x20crypto/dsa:\x20add\x20support\x20for\x20DSA.\x0a*\x20crypto/openpgp:\x20add\x20s2k.\x0a*\x20crypto/rand:\x20use\x20defer\x20to\x20unlock\x20mutex\x20(thanks\x20Anschel\x20Schaffer-Cohen).\x0a*\x20crypto/rsa:\x20correct\x20docstring\x20for\x20SignPKCS1v15.\x0a*\x20crypto:\x20add\x20package,\x20a\x20common\x20place\x20to\x20store\x20identifiers\x20for\x20hash\x20functions.\x0a*\x20doc/codelab/wiki:\x20update\x20to\x20work\x20with\x20template\x20changes,\x20add\x20to\x20run.bash.\x0a*\x20doc/spec:\x20clarify\x20address\x20operators.\x0a*\x20ebnflint:\x20exit\x20with\x20non-zero\x20status\x20on\x20error.\x0a*\x20encoding/base32:\x20new\x20package\x20(thanks\x20Miek\x20Gieben).\x0a*\x20encoding/line:\x20make\x20it\x20an\x20io.Reader\x20too.\x0a*\x20exec:\x20use\x20custom\x20error\x20for\x20LookPath\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20fmt/doc:\x20define\x20width\x20and\x20precision\x20for\x20strings.\x0a*\x20gc:\x20clearer\x20error\x20for\x20struct\x20==\x20struct,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20send\x20precedence,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20invalid\x20name\x20in\x20type\x20switch,\x0a\x20\x20\x20\x20\x20\x20\x20\x20special\x20case\x20code\x20for\x20single-op\x20blocking\x20and\x20non-blocking\x20selects.\x0a*\x20go/scanner:\x20fix\x20build\x20(adjust\x20scanner\x20EOF\x20linecount).\x0a*\x20gob:\x20better\x20debugging,\x20commentary,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20nested\x20interfaces\x20work,\x0a\x20\x20\x20\x20\x20\x20\x20\x20report\x20an\x20error\x20when\x20encoding\x20a\x20non-empty\x20struct\x20with\x20no\x20public\x20fields.\x0a*\x20godoc:\x20full\x20text\x20index\x20for\x20whitelisted\x20non-Go\x20files,\x0a\x20\x20\x20\x20\x20\x20\x20\x20show\x20line\x20numbers\x20for\x20non-go\x20files\x20(bug\x20fix).\x0a*\x20gofmt\x20-r:\x20match(...)\x20arguments\x20may\x20be\x20nil;\x20add\x20missing\x20guards.\x0a*\x20govet:\x20add\x20Panic\x20to\x20the\x20list\x20of\x20functions.\x0a*\x20http:\x20add\x20host\x20patterns\x20(thanks\x20Jose\x20Luis\x20V\xc3\xa1zquez\x20Gonz\xc3\xa1lez),\x0a\x20\x20\x20\x20\x20\x20\x20\x20follow\x20relative\x20redirect\x20in\x20Get.\x0a*\x20json:\x20handle\x20capital\x20floating\x20point\x20exponent\x20(1E100)\x20(thanks\x20Pieter\x20Droogendijk).\x0a*\x20ld:\x20add\x20-I\x20option\x20to\x20set\x20ELF\x20interpreter,\x0a\x20\x20\x20\x20\x20\x20\x20\x20more\x20robust\x20decoding\x20of\x20reflection\x20type\x20info\x20in\x20generating\x20dwarf.\x0a*\x20lib9:\x20update\x20to\x20Unicode\x206.0.0.\x0a*\x20make.bash:\x20stricter\x20selinux\x20test\x20(don't\x20complain\x20unless\x20it\x20is\x20enabled).\x0a*\x20misc/vim:\x20Import/Drop\x20commands\x20(thanks\x20Gustavo\x20Niemeyer),\x0a\x20\x20\x20\x20\x20\x20\x20\x20set\x20'syntax\x20sync'\x20to\x20a\x20large\x20value\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20net:\x20fix\x20race\x20condition\x20in\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cname\x20in\x20LookupHost.\x0a*\x20netchan:\x20avoid\x20race\x20condition\x20in\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fixed\x20documentation\x20for\x20import\x20(thanks\x20Anschel\x20Schaffer-Cohen).\x0a*\x20os:\x20add\x20ETIMEDOUT\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20runtime:\x20generate\x20Go\x20defs\x20for\x20C\x20types,\x0a\x20\x20\x20\x20\x20\x20\x20\x20implementation\x20of\x20callback\x20functions\x20for\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20Walk\x20web\x20browser\x20example\x20work\x20(thanks\x20Hector\x20Chu),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20select\x20fairer,\x0a\x20\x20\x20\x20\x20\x20\x20\x20prefer\x20fixed\x20stack\x20allocator\x20over\x20general\x20memory\x20allocator,\x0a\x20\x20\x20\x20\x20\x20\x20\x20simpler\x20heap\x20map,\x20memory\x20allocation.\x0a*\x20scanner:\x20fix\x20Position\x20returned\x20by\x20Scan,\x20Pos,\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20read\x20ahead\x20in\x20Init.\x0a*\x20suffixarray:\x20use\x20binary\x20search\x20for\x20both\x20ends\x20of\x20Lookup\x20(thanks\x20Eric\x20Eisner).\x0a*\x20syscall:\x20add\x20missing\x20network\x20interface\x20constants\x20(thanks\x20Mikio\x20Hara).\x0a*\x20template:\x20treat\x20map\x20keys\x20as\x20zero,\x20not\x20non-existent\x20(thanks\x20Roger\x20Peppe).\x0a*\x20time:\x20allow\x20canceling\x20of\x20After\x20events\x20(thanks\x20Roger\x20Peppe),\x0a\x20\x20\x20\x20\x20\x20\x20\x20support\x20Solaris\x20zoneinfo\x20directory.\x0a*\x20token/position:\x20added\x20SetLinesForContent.\x0a*\x20unicode:\x20update\x20to\x20unicode\x206.0.0.\x0a*\x20unsafe:\x20add\x20missing\x20case\x20to\x20doc\x20for\x20Pointer.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-01-20\">2011-01-20</h2>\x0a\x0a<pre>\x0aThis\x20release\x20removes\x20the\x20float\x20and\x20complex\x20types\x20from\x20the\x20language.\x0a\x0aThe\x20default\x20type\x20for\x20a\x20floating\x20point\x20literal\x20is\x20now\x20float64,\x20and\x0athe\x20default\x20type\x20for\x20a\x20complex\x20literal\x20is\x20now\x20complex128.\x0a\x0aExisting\x20code\x20that\x20uses\x20float\x20or\x20complex\x20must\x20be\x20rewritten\x20to\x0ause\x20explicitly\x20sized\x20types.\x0a\x0aThe\x20two-argument\x20constructor\x20cmplx\x20is\x20now\x20spelled\x20complex.\x0a</pre>\x0a\x0a<h2\x20id=\"2011-01-19\">2011-01-19</h2>\x0a\x0a<pre>\x0aThe\x205g\x20(ARM)\x20compiler\x20now\x20has\x20registerization\x20enabled.\x20\x20If\x20you\x20discover\x20it\x0acauses\x20bugs,\x20use\x205g\x20-N\x20to\x20disable\x20the\x20registerizer\x20and\x20please\x20let\x20us\x20know.\x0a\x0aThe\x20xml\x20package\x20now\x20allows\x20the\x20extraction\x20of\x20nested\x20XML\x20tags\x20by\x20specifying\x0astruct\x20tags\x20of\x20the\x20form\x20\"parent>child\".\x20See\x20the\x20XML\x20documentation\x20for\x20an\x0aexample:\x20http://golang.org/pkg/xml/\x0a\x0a*\x205a,\x205l,\x206a,\x206l,\x208a,\x208l:\x20handle\x20out\x20of\x20memory,\x20large\x20allocations\x20(thanks\x20Jeff\x20R.\x20Allen).\x0a*\x208l:\x20pe\x20changes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20arm:\x20fixes\x20and\x20improvements.\x0a*\x20cc:\x20fix\x20vlong\x20condition.\x0a*\x20cgo:\x20add\x20complex\x20float,\x20complex\x20double\x20(thanks\x20Sebastien\x20Binet),\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20_cgo_main.c\x20define\x20all\x20provided\x20symbols\x20as\x20functions.\x0a*\x20codereview:\x20don't\x20mail\x20change\x20lists\x20with\x20no\x20files\x20(thanks\x20Ryan\x20Hitchman).\x0a*\x20crypto/cipher:\x20add\x20OFB\x20mode.\x0a*\x20expvar:\x20add\x20Float.\x0a*\x20fmt:\x20document\x20%X\x20of\x20string,\x20[]byte.\x0a*\x20gc,\x20runtime:\x20make\x20range\x20on\x20channel\x20safe\x20for\x20multiple\x20goroutines.\x0a*\x20gc:\x20fix\x20typed\x20constant\x20declarations\x20(thanks\x20Anthony\x20Martin).\x0a*\x20go\x20spec:\x20adjust\x20language\x20for\x20constant\x20typing.\x0a*\x20go/scanner:\x20Make\x20Init\x20take\x20a\x20*token.File\x20instead\x20of\x20a\x20*token.FileSet.\x0a*\x20godoc:\x20bring\x20back\x20\"indexing\x20in\x20progress\"\x20message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20double\x20HTML-escape\x20search\x20result\x20snippets,\x0a\x20\x20\x20\x20\x20\x20\x20\x20enable\x20qualified\x20identifiers\x20(\"math.Sin\")\x20as\x20query\x20strings\x20again,\x0a\x20\x20\x20\x20\x20\x20\x20\x20peephole\x20optimization\x20for\x20generated\x20HTML,\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20tab\x20before\x20formatted\x20section.\x0a*\x20gofmt,\x20go/printer:\x20do\x20not\x20insert\x20extra\x20line\x20breaks\x20where\x20they\x20may\x20break\x20the\x20code.\x0a*\x20http:\x20fix\x20Content-Range\x20and\x20Content-Length\x20in\x20response\x20(thanks\x20Clement\x20Skau),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20scheme-relative\x20URL\x20parsing;\x20add\x20ParseRequestURL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20HEAD\x20requests\x20correctly,\x0a\x20\x20\x20\x20\x20\x20\x20\x20support\x20for\x20relative\x20URLs.\x0a*\x20math:\x20handle\x20denormalized\x20numbers\x20in\x20Frexp,\x20Ilogb,\x20Ldexp,\x20and\x20Logb\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20net,\x20syscall:\x20return\x20source\x20address\x20in\x20Recvmsg\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20net:\x20add\x20LookupAddr\x20(thanks\x20Kyle\x20Lemons),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20unixpacket\x20(thanks\x20Albert\x20Strasheim),\x0a\x20\x20\x20\x20\x20\x20\x20\x20avoid\x20nil\x20dereference\x20if\x20/etc/services\x20can't\x20be\x20opened\x20(thanks\x20Corey\x20Thomasson),\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20windows\x20timeout\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20netchan:\x20do\x20not\x20block\x20sends;\x20implement\x20flow\x20control\x20(thanks\x20Roger\x20Peppe).\x0a*\x20regexp:\x20reject\x20bare\x20'?'.\x20(thanks\x20Ben\x20Lynn)\x0a*\x20runtime/cgo:\x20don't\x20define\x20crosscall2\x20in\x20dummy\x20_cgo_main.c.\x0a*\x20runtime/debug:\x20new\x20package\x20for\x20printing\x20stack\x20traces\x20from\x20a\x20running\x20goroutine.\x0a*\x20runtime:\x20add\x20per-pause\x20gc\x20stats,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20arm\x20reflect.call\x20boundary\x20case,\x0a\x20\x20\x20\x20\x20\x20\x20\x20print\x20signal\x20information\x20during\x20panic.\x0a*\x20spec:\x20specify\x20that\x20int\x20and\x20uint\x20have\x20the\x20same\x20size.\x0a*\x20syscall:\x20correct\x20WSTOPPED\x20on\x20OS\x20X,\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20length\x20of\x20GNU/Linux\x20abstract\x20Unix\x20domain\x20sockaddr,\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20length\x20of\x20SockaddrUnix.\x0a*\x20tutorial:\x20make\x20stdin,\x20stdout,\x20stderr\x20work\x20on\x20Windows.\x0a*\x20windows:\x20implement\x20exception\x20handling\x20(thanks\x20Hector\x20Chu).\x0a</pre>\x0a\x0a<h2\x20id=\"2011-01-12\">2011-01-12</h2>\x0a\x0a<pre>\x0aThe\x20json,\x20gob,\x20and\x20template\x20packages\x20have\x20changed,\x20and\x20code\x20that\x20uses\x20them\x0amay\x20need\x20to\x20be\x20updated\x20after\x20this\x20release.\x20They\x20will\x20no\x20longer\x20read\x20or\x20write\x0aunexported\x20struct\x20fields.\x20When\x20marshaling\x20a\x20struct\x20with\x20json\x20or\x20gob\x20the\x0aunexported\x20fields\x20will\x20be\x20silently\x20ignored.\x20Attempting\x20to\x20unmarshal\x20json\x20or\x0agob\x20data\x20into\x20an\x20unexported\x20field\x20will\x20generate\x20an\x20error.\x20Accessing\x20an\x0aunexported\x20field\x20from\x20a\x20template\x20will\x20cause\x20the\x20Execute\x20function\x20to\x20return\x0aan\x20error.\x0a\x0aGodoc\x20now\x20supports\x20regular\x20expression\x20full\x20text\x20search,\x20and\x20this\x0afunctionality\x20is\x20now\x20available\x20on\x20golang.org.\x0a\x0aOther\x20changes:\x0a*\x20arm:\x20initial\x20cut\x20at\x20arm\x20optimizer.\x0a*\x20bytes.Buffer:\x20Fix\x20bug\x20in\x20UnreadByte.\x0a*\x20cgo:\x20export\x20unsafe.Pointer\x20as\x20void*,\x20fix\x20enum\x20const\x20conflict,\x0a\x20\x20\x20\x20\x20\x20\x20\x20output\x20alignment\x20fix\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20crypto/block:\x20mark\x20as\x20deprecated.\x0a*\x20crypto/openpgp:\x20add\x20error\x20and\x20armor.\x0a*\x20crypto:\x20add\x20twofish\x20package\x20(thanks\x20Berengar\x20Lehr).\x0a*\x20doc/spec:\x20remove\x20Maxalign\x20from\x20spec.\x0a*\x20encoding/line:\x20new\x20package\x20for\x20reading\x20lines\x20from\x20an\x20io.Reader.\x0a*\x20go/ast:\x20correct\x20end\x20position\x20for\x20Index\x20and\x20TypeAssert\x20expressions.\x0a*\x20gob:\x20make\x20(en|dec)code(Ui|I)nt\x20methods\x20rather\x20than\x20functions.\x0a*\x20godefs:\x20better\x20handling\x20of\x20enums.\x0a*\x20gofmt:\x20don't\x20attempt\x20certain\x20illegal\x20rewrites,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rewriter\x20matches\x20apply\x20to\x20expressions\x20only.\x0a*\x20goinstall:\x20preliminary\x20support\x20for\x20cgo\x20packages\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20hg:\x20add\x20cgo/_cgo_*\x20to\x20.hgignore.\x0a*\x20http:\x20fix\x20text\x20displayed\x20in\x20Redirect.\x0a*\x20ld:\x20fix\x20exported\x20dynamic\x20symbols\x20on\x20Mach-O,\x0a\x20\x20\x20\x20\x20\x20\x20\x20permit\x20a\x20Mach-O\x20symbol\x20to\x20be\x20exported\x20in\x20the\x20dynamic\x20symbol\x20table.\x0a*\x20log:\x20add\x20methods\x20for\x20exit\x20and\x20panic.\x0a*\x20net:\x20use\x20closesocket\x20api\x20instead\x20of\x20CloseHandle\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20netchan:\x20make\x20fields\x20exported\x20for\x20gob\x20change.\x0a*\x20os:\x20add\x20Sync\x20to\x20*File,\x20wraps\x20syscall.Fsync.\x0a*\x20runtime/cgo:\x20Add\x20callbacks\x20to\x20support\x20SWIG.\x0a*\x20runtime:\x20Restore\x20scheduler\x20stack\x20position\x20if\x20cgo\x20callback\x20panics.\x0a*\x20suffixarray:\x20faster\x20creation\x20algorithm\x20(thanks\x20Eric\x20Eisner).\x0a*\x20syscall:\x20fix\x20mksysnum_linux.sh\x20(thanks\x20Anthony\x20Martin).\x0a*\x20time.NewTicker:\x20panic\x20for\x20intervals\x20&lt;=\x200.\x0a*\x20time:\x20add\x20AfterFunc\x20to\x20call\x20a\x20function\x20after\x20a\x20duration\x20(thanks\x20Roger\x20Peppe),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20tick\x20accuracy\x20when\x20using\x20multiple\x20Tickers\x20(thanks\x20Eoghan\x20Sherry).</pre>\x0a\x0a<h2\x20id=\"2011-01-06\">2011-01-06</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20several\x20fixes\x20and\x20changes:\x0a\x0a*\x20build:\x20Make.pkg:\x20use\x20installed\x20runtime.h\x20for\x20cgo.\x0a*\x20cgo:\x20disallow\x20use\x20of\x20C.errno.\x0a*\x20crypto/cipher:\x20fix\x20OCFB,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20NewCBCEncrypter\x20return\x20BlockMode.\x0a*\x20doc:\x206l:\x20fix\x20documentation\x20of\x20-L\x20flag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20golanguage.ru\x20to\x20foreign-language\x20doc\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20effective\x20go:\x20explain\x20the\x20effect\x20of\x20repanicking\x20better,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20Effective\x20Go\x20for\x20template\x20API\x20change,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20contribution\x20guidelines\x20to\x20prefix\x20the\x20change\x20description.\x0a*\x20encoding/binary:\x20reject\x20types\x20with\x20implementation-dependent\x20sizes\x20(thanks\x20Patrick\x20Gavlin).\x0a*\x20exp/evalsimple\x20fix\x20handling\x20of\x20slices\x20like\x20s[:2]\x20(thanks\x20Sebastien\x20Binet).\x0a*\x20fmt:\x20made\x20format\x20string\x20handling\x20more\x20efficient,\x0a\x20\x20\x20\x20\x20\x20\x20\x20normalize\x20processing\x20of\x20format\x20string.\x0a*\x20gc:\x20return\x20constant\x20floats\x20for\x20parts\x20of\x20complex\x20constants\x20(thanks\x20Anthony\x20Martin),\x0a\x20\x20\x20\x20\x20\x20\x20\x20rewrite\x20complex\x20/=\x20to\x20l\x20=\x20l\x20/\x20r\x20(thanks\x20Patrick\x20Gavlin),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20&amp;^=.\x0a*\x20go/ast:\x20provide\x20complete\x20node\x20text\x20range\x20info.\x0a*\x20gob:\x20generate\x20a\x20better\x20error\x20message\x20in\x20one\x20confusing\x20place.\x0a*\x20godoc:\x20fix\x20godoc\x20-src\x20(thanks\x20Icarus\x20Sparry).\x0a*\x20goinstall:\x20add\x20-clean\x20flag\x20(thanks\x20Kyle\x20Lemons),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20checkout\x20concept\x20(thanks\x20Caine\x20Tighe),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20-u\x20for\x20bzr\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20http:\x20permit\x20empty\x20Reason-Phrase\x20in\x20response\x20Status-Line.\x0a*\x20io:\x20fix\x20Copyn\x20EOF\x20handling.\x0a*\x20net:\x20fix\x20close\x20of\x20Listener\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20regexp:\x20fix\x20performance\x20bug,\x20make\x20anchored\x20searches\x20fail\x20fast,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20prefix\x20bug.\x0a*\x20runtime/cgo:\x20fix\x20stackguard\x20on\x20FreeBSD/amd64\x20(thanks\x20Anthony\x20Martin).\x0a*\x20strconv:\x20atof:\x20added\x20'E'\x20as\x20valid\x20token\x20for\x20exponent\x20(thanks\x20Stefan\x20Nilsson),\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20ftoa\x20comment\x20for\x20'E'\x20and\x20'G'.\x0a*\x20strings:\x20fix\x20description\x20of\x20FieldsFunc\x20(thanks\x20Roger\x20Peppe).\x0a*\x20syscall:\x20correct\x20Linux\x20Splice\x20definition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20Access\x20second\x20argument\x20consistently\x20uint32.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-12-22\">2010-12-22</h2>\x0a\x0a<pre>\x0aA\x20small\x20release\x20this\x20week.\x20The\x20most\x20significant\x20change\x20is\x20that\x20some\x20\x0aoutstanding\x20cgo\x20issues\x20were\x20resolved.\x0a\x0a*\x20cgo:\x20handle\x20references\x20to\x20symbols\x20in\x20shared\x20libraries.\x0a*\x20crypto/elliptic:\x20add\x20serialisation\x20and\x20key\x20pair\x20generation.\x0a*\x20crypto/hmac:\x20add\x20HMAC-SHA256\x20(thanks\x20Anthony\x20Martin).\x0a*\x20crypto/tls:\x20add\x20ECDHE\x20support\x20(\"Elliptic\x20Curve\x20Diffie\x20Hellman\x20Ephemeral\"),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20support\x20code\x20for\x20generating\x20handshake\x20scripts\x20for\x20testing.\x0a*\x20darwin,\x20freebsd:\x20ignore\x20write\x20failure\x20(during\x20print,\x20panic).\x0a*\x20exp/draw:\x20remove\x20Border\x20function.\x0a*\x20expvar:\x20quote\x20StringFunc\x20output,\x20same\x20as\x20String\x20output.\x0a*\x20hash/crc64:\x20fix\x20typo\x20in\x20Sum.\x0a*\x20ld:\x20allow\x20relocations\x20pointing\x20at\x20ELF\x20.bss\x20symbols,\x20ignore\x20stab\x20symbols.\x0a*\x20misc/cgo/life:\x20fix,\x20add\x20to\x20build.\x0a*\x20regexp:\x20add\x20HasMeta,\x20HasOperator,\x20and\x20String\x20methods\x20to\x20Regexp.\x0a*\x20suffixarray:\x20implemented\x20FindAllIndex\x20regexp\x20search.\x0a*\x20test/bench:\x20update\x20numbers\x20for\x20regex-dna\x20after\x20speedup\x20to\x20regexp.\x0a*\x20time:\x20explain\x20the\x20formats\x20a\x20little\x20better.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-12-15\">2010-12-15</h2>\x0a\x0a<pre>\x0aPackage\x20crypto/cipher\x20has\x20been\x20started,\x20to\x20replace\x20crypto/block.\x0aAs\x20part\x20of\x20the\x20changes,\x20rc4.Cipher's\x20XORKeyStream\x20method\x20signature\x20has\x20changed\x20from\x0a\x20\x20\x20\x20\x20\x20\x20\x20XORKeyStream(buf\x20[]byte)\x0ato\x0a\x20\x20\x20\x20\x20\x20\x20\x20XORKeyStream(dst,\x20src\x20[]byte)\x0ato\x20implement\x20the\x20cipher.Stream\x20interface.\x20\x20If\x20you\x20use\x20crypto/block,\x20you'll\x20need\x0ato\x20switch\x20to\x20crypto/cipher\x20once\x20it\x20is\x20complete.\x0a\x0aPackage\x20smtp's\x20StartTLS\x20now\x20takes\x20a\x20*tls.Config\x20argument.\x0a\x0aPackage\x20reflect's\x20ArrayCopy\x20has\x20been\x20renamed\x20to\x20Copy.\x20\x20There\x20are\x20new\x20functions\x0aAppend\x20and\x20AppendSlice.\x0a\x0aThe\x20print/println\x20bootstrapping\x20functions\x20now\x20write\x20to\x20standard\x20error.\x0aTo\x20write\x20to\x20standard\x20output,\x20use\x20fmt.Print[ln].\x0a\x0aA\x20new\x20tool,\x20govet,\x20has\x20been\x20added\x20to\x20the\x20Go\x20distribution.\x20Govet\x20is\x20a\x20static\x0achecker\x20for\x20Go\x20programs.\x20At\x20the\x20moment,\x20and\x20for\x20the\x20foreseeable\x20future,\x0ait\x20only\x20checks\x20arguments\x20to\x20print\x20calls.\x0a\x0aThe\x20cgo\x20tool\x20for\x20writing\x20Go\x20bindings\x20for\x20C\x20code\x20has\x20changed\x20so\x20that\x20it\x20no\x0alonger\x20uses\x20stub\x20.so\x20files\x20(like\x20cgo_stdio.so).\x20\x20Cgo-based\x20packages\x20using\x20the\x0astandard\x20Makefiles\x20should\x20build\x20without\x20any\x20changes.\x20\x20Any\x20alternate\x20build\x0amechanisms\x20will\x20need\x20to\x20be\x20updated.\x0a\x0aThe\x20C\x20and\x20Go\x20compilers\x20(6g,\x206c,\x208g,\x208c,\x205g,\x205c)\x20now\x20align\x20structs\x20according\x20to\x0athe\x20maximum\x20alignment\x20of\x20the\x20fields\x20they\x20contain;\x20previously\x20they\x20aligned\x0astructs\x20to\x20word\x20boundaries.\x20\x20This\x20may\x20break\x20non-cgo-based\x20code\x20that\x20attempts\x20to\x0amix\x20C\x20and\x20Go.\x0a\x0aNaCl\x20support\x20has\x20been\x20removed.\x20The\x20recent\x20linker\x20changes\x20broke\x20NaCl\x20support\x0aa\x20month\x20ago,\x20and\x20there\x20are\x20no\x20known\x20users\x20of\x20it.\x0aIf\x20necessary,\x20the\x20NaCl\x20code\x20can\x20be\x20recovered\x20from\x20the\x20repository\x20history.\x0a\x0a*\x205g/8g,\x208l,\x20ld,\x20prof:\x20fix\x20output\x20of\x2032-bit\x20values\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20[68]l\x20and\x20runtime:\x20GDB\x20support\x20for\x20interfaces\x20and\x20goroutines.\x0a*\x206l,\x208l:\x20support\x20for\x20linking\x20ELF\x20and\x20Mach-O\x20.o\x20files.\x0a*\x20all:\x20simplify\x20two-variable\x20ranges\x20with\x20unused\x20second\x20variable\x20(thanks\x20Ryan\x20Hitchman).\x0a*\x20arm:\x20updated\x20soft\x20float\x20support.\x0a*\x20codereview:\x20keep\x20quiet\x20when\x20not\x20in\x20use\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20compress/flate:\x20implement\x20Flush,\x20equivalent\x20to\x20zlib's\x20Z_SYNC_FLUSH.\x0a*\x20crypto/tls:\x20use\x20rand.Reader\x20in\x20cert\x20generation\x20example\x20(thanks\x20Anthony\x20Martin).\x0a*\x20dashboard:\x20fix\x20project\x20tag\x20filter.\x0a*\x20debug/elf,\x20debug/macho:\x20add\x20ImportedLibraries,\x20ImportedSymbols.\x0a*\x20doc/go_mem:\x20goroutine\x20exit\x20is\x20not\x20special.\x0a*\x20event.go:\x20another\x20print\x20glitch\x20from\x20gocheck.\x0a*\x20gc:\x20bug\x20fixes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20syntax\x20error\x20for\x20incomplete\x20chan\x20type\x20(thanks\x20Ryan\x20Hitchman).\x0a*\x20go/ast:\x20fix\x20ast.Walk.\x0a*\x20gob:\x20document\x20the\x20byte\x20count\x20used\x20in\x20the\x20encoding\x20of\x20values,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20bug\x20sending\x20zero-length\x20top-level\x20slices\x20and\x20maps,\x0a\x20\x20\x20\x20\x20\x20\x20\x20Register\x20should\x20use\x20the\x20original\x20type,\x20not\x20the\x20indirected\x20one.\x0a*\x20godashboard:\x20support\x20submitting\x20projects\x20with\x20non-ascii\x20names\x20(thanks\x20Ryan\x20Hitchman)\x0a*\x20godefs:\x20guard\x20against\x20structs\x20with\x20pad\x20fields\x0a*\x20godoc:\x20added\x20textual\x20search,\x20to\x20enable\x20use\x20-fulltext\x20flag.\x0a*\x20gofmt:\x20simplify\x20\"x,\x20_\x20=\x20range\x20y\"\x20to\x20\"x\x20=\x20range\x20y\".\x0a*\x20gopack:\x20allow\x20ELF/Mach-O\x20objects\x20in\x20.a\x20files\x20without\x20clearing\x20allobj.\x0a*\x20go/token,scanner:\x20fix\x20comments\x20so\x20godoc\x20aligns\x20properly.\x0a*\x20govet:\x20on\x20error\x20continue\x20to\x20the\x20next\x20file\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20html:\x20improved\x20parsing.\x0a*\x20http:\x20ServeFile\x20handles\x20Range\x20header\x20for\x20partial\x20requests.\x0a*\x20json:\x20check\x20for\x20invalid\x20UTF-8.\x0a*\x20ld:\x20allow\x20.o\x20files\x20with\x20no\x20symbols,\x0a\x20\x20\x20\x20\x20\x20\x20\x20reading\x20of\x20ELF\x20object\x20files,\x0a\x20\x20\x20\x20\x20\x20\x20\x20reading\x20of\x20Mach-O\x20object\x20files.\x0a*\x20math:\x20change\x20float64\x20bias\x20constant\x20from\x201022\x20to\x201023\x20(thanks\x20Eoghan\x20Sherry),\x0a\x20\x20\x20\x20\x20\x20\x20\x20rename\x20the\x20MinFloat\x20constant\x20to\x20SmallestNonzeroFloat.\x0a*\x20nm:\x20silently\x20ignore\x20.o\x20files\x20in\x20.a\x20files.\x0a*\x20os:\x20fix\x20test\x20of\x20RemoveAll.\x0a*\x20os/inotify:\x20new\x20package\x20(thanks\x20Balazs\x20Lecz).\x0a*\x20os:\x20make\x20MkdirAll\x20work\x20with\x20symlinks\x20(thanks\x20Ryan\x20Hitchman).\x0a*\x20regexp:\x20speed\x20up\x20by\x20about\x2030%;\x20also\x20simplify\x20code\x20for\x20brackets.\x0a*\x20runtime/linux/386:\x20set\x20FPU\x20to\x2064-bit\x20precision.\x0a*\x20runtime:\x20remove\x20paranoid\x20mapping\x20at\x200.\x0a*\x20suffixarray:\x20add\x20Bytes\x20function.\x0a*\x20syscall:\x20add\x20network\x20interface\x20constants\x20for\x20linux/386,\x20linux/amd64\x20(thanks\x20Mikio\x20Hara).\x0a*\x20syscall/windows:\x20restrict\x20access\x20rights\x20param\x20of\x20OpenProcess(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20\\r\x20and\x20\\n\x20from\x20error\x20messages\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/bench:\x20fixes\x20to\x20timing.sh\x20(thanks\x20Anthony\x20Martin).\x0a*\x20time:\x20fix\x20bug\x20in\x20Ticker:\x20shutdown\x20using\x20channel\x20rather\x20than\x20memory.\x0a*\x20token/position:\x20provide\x20FileSet.File,\x20provide\x20files\x20iterator.\x0a*\x20xml:\x20disallow\x20invalid\x20Unicode\x20code\x20points\x20(thanks\x20Nigel\x20Kerr).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-12-08\">2010-12-08</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20some\x20package\x20changes.\x20If\x20you\x20use\x20the\x20crypto/tls\x20or\x0ago/parser\x20packages\x20your\x20code\x20may\x20require\x20changes.\x0a\x0aThe\x20crypto/tls\x20package's\x20Dial\x20function\x20now\x20takes\x20an\x20additional\x20*Config\x0aargument.\x20\x20Most\x20uses\x20will\x20pass\x20nil\x20to\x20get\x20the\x20same\x20default\x20behavior\x20as\x20before.\x0aSee\x20the\x20documentation\x20for\x20details:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://golang.org/pkg/crypto/tls/#Config\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://golang.org/pkg/crypto/tls/#Dial\x0a\x0aThe\x20go/parser\x20package's\x20ParseFile\x20function\x20now\x20takes\x20a\x20*token.FileSet\x20as\x20its\x0afirst\x20argument.\x20This\x20is\x20a\x20pointer\x20to\x20a\x20data\x20structure\x20used\x20to\x20store\x0aposition\x20information.\x20If\x20you\x20don't\x20care\x20about\x20position\x20information\x20you\x0acan\x20pass\x20\"token.NewFileSet()\".\x20See\x20the\x20documentation\x20for\x20details:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://golang.org/pkg/go/parser/#ParseFile\x0a\x0aThis\x20release\x20also\x20splits\x20the\x20patent\x20grant\x20text\x20out\x20of\x20the\x20LICENSE\x20file\x20into\x20a\x0aseparate\x20PATENTS\x20file\x20and\x20changes\x20it\x20to\x20be\x20more\x20like\x20the\x20WebM\x20grant.\x0aThese\x20clarifications\x20were\x20made\x20at\x20the\x20request\x20of\x20the\x20Fedora\x20project.\x0a\x0aOther\x20changes:\x0a*\x20[68]l:\x20generate\x20debug\x20info\x20for\x20builtin\x20structured\x20types,\x20prettyprinting\x20in\x20gdb.\x0a*\x208l:\x20add\x20dynimport\x20to\x20import\x20table\x20in\x20Windows\x20PE\x20(thanks\x20Wei\x20Guangjing).\x0a*\x208l,\x20runtime:\x20fix\x20Plan\x209\x20386\x20build\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x20all:\x20fix\x20broken\x20calls\x20to\x20Printf\x20etc.\x0a*\x20bufio:\x20make\x20Reader.Read\x20implement\x20io.Reader\x20semantics\x20(thanks\x20Roger\x20Peppe).\x0a*\x20build:\x20allow\x20archiver\x20to\x20be\x20specified\x20by\x20HOST_AR\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20bytes:\x20add\x20Buffer.UnreadRune,\x20Buffer.UnreadByte\x20(thanks\x20Roger\x20Peppe).\x0a*\x20crypto/tls:\x20fix\x20build\x20of\x20certificate\x20generation\x20example\x20(thanks\x20Christian\x20Himpel).\x0a*\x20doc/install:\x20describe\x20GOHOSTOS\x20and\x20GOHOSTARCH.\x0a*\x20errchk:\x20accept\x20multiple\x20source\x20files\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20exec.LookPath:\x20return\x20os.PathError\x20instad\x20of\x20os.ENOENT\x20(thanks\x20Michael\x20Hoisie)..\x0a*\x20flag:\x20fix\x20format\x20error\x20in\x20boolean\x20error\x20report,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20multiple\x20calls\x20to\x20flag.Parse.\x0a*\x20fmt:\x20add\x20%U\x20format\x20for\x20standard\x20Unicode\x20representation\x20of\x20code\x20point\x20values.\x0a*\x20gc:\x20fix\x20method\x20offsets\x20of\x20anonymous\x20interfaces\x20(thanks\x20Eoghan\x20Sherry),\x0a\x20\x20\x20\x20\x20\x20\x20\x20skip\x20undefined\x20symbols\x20in\x20import\x20.\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20go/scanner:\x20remove\x20Tokenize\x20-\x20was\x20only\x20used\x20in\x20tests\x0a*\x20gobuilder:\x20add\x20buildroot\x20command-line\x20flag\x20(thanks\x20Devon\x20H.\x20O'Dell).\x0a*\x20html:\x20unescape\x20numeric\x20entities\x20(thanks\x20Ryan\x20Hitchman).\x0a*\x20http:\x20Add\x20EncodeQuery,\x20helper\x20for\x20constructing\x20query\x20strings.\x0a*\x20ld:\x20fix\x20dwarf\x20decoding\x20of\x2064-bit\x20reflect\x20values\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20math:\x20improve\x20accuracy\x20of\x20Exp2\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20runtime:\x20add\x20Goroutines\x20(thanks\x20Keith\x20Rarick).\x0a*\x20sync:\x20small\x20naming\x20fix\x20for\x20armv5\x20(thanks\x20Dean\x20Prichard).\x0a*\x20syscall,\x20net:\x20Add\x20Recvmsg\x20and\x20Sendmsg\x20on\x20Linux\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20time:\x20make\x20After\x20use\x20fewer\x20goroutines\x20and\x20host\x20processes\x20(thanks\x20Roger\x20Peppe).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-12-02\">2010-12-02</h2>\x0a\x0a<pre>\x0aSeveral\x20package\x20changes\x20in\x20this\x20release\x20may\x20require\x20you\x20to\x20update\x20your\x20code\x20if\x0ayou\x20use\x20the\x20bytes,\x20template,\x20or\x20utf8\x20packages.\x20In\x20all\x20cases,\x20any\x20outdated\x20code\x0awill\x20fail\x20to\x20compile\x20rather\x20than\x20behave\x20erroneously.\x0a\x0aThe\x20bytes\x20package\x20has\x20changed.\x20Its\x20Add\x20and\x20AddByte\x20functions\x20have\x20been\x20removed,\x0aas\x20their\x20functionality\x20is\x20provided\x20by\x20the\x20recently-introduced\x20built-in\x20function\x0a\"append\".\x20Any\x20code\x20that\x20uses\x20them\x20will\x20need\x20to\x20be\x20changed:\x0as\x20=\x20bytes.Add(s,\x20b)\x20\x20\x20\x20-&gt;\x20\x20\x20\x20s\x20=\x20append(s,\x20b...)\x0as\x20=\x20bytes.AddByte(b,\x20c)\x20\x20\x20\x20-&gt;\x20\x20\x20\x20s\x20=\x20append(s,\x20b)\x0as\x20=\x20bytes.Add(nil,\x20c)\x20\x20\x20\x20-&gt;\x20\x20\x20\x20append([]byte(nil),\x20c)\x0a\x0aThe\x20template\x20package\x20has\x20changed.\x20Your\x20code\x20will\x20need\x20to\x20be\x20updated\x20if\x20it\x20calls\x0athe\x20HTMLFormatter\x20or\x20StringFormatter\x20functions,\x20or\x20implements\x20its\x20own\x20formatter\x0afunctions.\x20The\x20function\x20signature\x20for\x20formatter\x20types\x20has\x20changed\x20to:\x0a\x20\x20\x20\x20\x20\x20\x20\x20func(wr\x20io.Writer,\x20formatter\x20string,\x20data\x20...interface{})\x0ato\x20allow\x20multiple\x20arguments\x20to\x20the\x20formatter.\x20\x20No\x20templates\x20will\x20need\x20updating.\x0aSee\x20the\x20change\x20for\x20examples:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://code.google.com/p/go/source/detail?r=2c2be793120e\x0a\x0aThe\x20template\x20change\x20permits\x20the\x20implementation\x20of\x20multi-word\x20variable\x0ainstantiation\x20for\x20formatters.\x20Before\x20one\x20could\x20say\x0a\x20\x20\x20\x20\x20\x20\x20\x20{field}\x0aor\x0a\x20\x20\x20\x20\x20\x20\x20\x20{field|formatter}\x0aNow\x20one\x20can\x20also\x20say\x0a\x20\x20\x20\x20\x20\x20\x20\x20{field1\x20field2\x20field3}\x0aor\x0a\x20\x20\x20\x20\x20\x20\x20\x20{field1\x20field2\x20field3|formatter}\x0aand\x20the\x20fields\x20are\x20passed\x20as\x20successive\x20arguments\x20to\x20the\x20formatter,\x0aby\x20analogy\x20to\x20fmt.Print.\x0a\x0aThe\x20utf8\x20package\x20has\x20changed.\x20The\x20order\x20of\x20EncodeRune's\x20arguments\x20has\x20been\x0areversed\x20to\x20satisfy\x20the\x20convention\x20of\x20\"destination\x20first\".\x0aAny\x20code\x20that\x20uses\x20EncodeRune\x20will\x20need\x20to\x20be\x20updated.\x0a\x0aOther\x20changes:\x0a*\x20[68]l:\x20correct\x20dwarf\x20location\x20for\x20globals\x20and\x20ranges\x20for\x20arrays.\x0a*\x20big:\x20fix\x20(*Rat)\x20SetFrac64(a,\x20b)\x20when\x20b\x20&lt;\x200\x20(thanks\x20Eoghan\x20Sherry).\x0a*\x20compress/flate:\x20fix\x20typo\x20in\x20comment\x20(thanks\x20Mathieu\x20Lonjaret).\x0a*\x20crypto/elliptic:\x20use\x20a\x20Jacobian\x20transform\x20for\x20better\x20performance.\x0a*\x20doc/code.html:\x20fix\x20reference\x20to\x20\"gomake\x20build\"\x20(thanks\x20Anschel\x20Schaffer-Cohen).\x0a*\x20doc/roadmap:\x20update\x20gdb\x20status.\x0a*\x20doc/spec:\x20fixed\x20some\x20omissions\x20and\x20type\x20errors.\x0a*\x20doc:\x20some\x20typo\x20fixes\x20(thanks\x20Peter\x20Mundy).\x0a*\x20exp/eval:\x20build\x20fix\x20for\x20parser.ParseFile\x20API\x20change\x20(thanks\x20Anschel\x20Schaffer-Cohen).\x0a*\x20fmt:\x20Scan\x20accepts\x20Inf\x20and\x20NaN,\x0a\x20\x20\x20\x20\x20\x20\x20\x20allow\x20\"%\x20X\"\x20as\x20well\x20as\x20\"%\x20x\".\x0a*\x20go/printer:\x20preserve\x20newlines\x20in\x20func\x20parameter\x20lists\x20(thanks\x20Jamie\x20Gennis).\x0a*\x20http:\x20consume\x20request\x20body\x20before\x20next\x20request.\x0a*\x20log:\x20ensure\x20writes\x20are\x20atomic\x20(thanks\x20Roger\x20Peppe).\x0a*\x20path:\x20Windows\x20support\x20for\x20Split\x20(thanks\x20Benny\x20Siegert).\x0a*\x20runtime:\x20fix\x20SysFree\x20to\x20really\x20free\x20memory\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20parallel\x20definitions\x20in\x20Go\x20for\x20all\x20C\x20structs.\x0a*\x20sort:\x20avoid\x20overflow\x20in\x20pivot\x20calculation,\x0a\x20\x20\x20\x20\x20\x20\x20\x20reduced\x20stack\x20depth\x20to\x20lg(n)\x20in\x20quickSort\x20(thanks\x20Stefan\x20Nilsson).\x0a*\x20strconv:\x20Atof\x20on\x20Infs\x20and\x20NaNs.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-11-23\">2010-11-23</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20backwards-incompatible\x20package\x20change\x20to\x20the\x0asort.Search\x20function\x20(introduced\x20in\x20the\x20last\x20release).\x0aSee\x20the\x20change\x20for\x20details\x20and\x20examples\x20of\x20how\x20you\x20might\x20change\x20your\x20code:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://code.google.com/p/go/source/detail?r=102866c369\x0a\x0a*\x20build:\x20automatically\x20#define\x20_64BIT\x20in\x206c.\x0a*\x20cgo:\x20print\x20required\x20space\x20after\x20parameter\x20name\x20in\x20wrapper\x20function.\x0a*\x20crypto/cipher:\x20new\x20package\x20to\x20replace\x20crypto/block\x20(thanks\x20Adam\x20Langley).\x0a*\x20crypto/elliptic:\x20new\x20package,\x20implements\x20elliptic\x20curves\x20over\x20prime\x20fields\x20(thanks\x20Adam\x20Langley).\x0a*\x20crypto/x509:\x20policy\x20OID\x20support\x20and\x20fixes\x20(thanks\x20Adam\x20Langley).\x0a*\x20doc:\x20add\x20link\x20to\x20codewalks,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20recover()\x20documentation\x20(thanks\x20Anschel\x20Schaffer-Cohen),\x0a\x20\x20\x20\x20\x20\x20\x20\x20explain\x20how\x20to\x20write\x20Makefiles\x20for\x20commands.\x0a*\x20exec:\x20enable\x20more\x20tests\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20gc:\x20adjustable\x20hash\x20code\x20in\x20typecheck\x20of\x20composite\x20literals\x0a\x20\x20\x20\x20\x20\x20\x20\x20(thanks\x20to\x20vskrap,\x20Andrey\x20Mirtchovski,\x20and\x20Eoghan\x20Sherry).\x0a*\x20gc:\x20better\x20error\x20message\x20for\x20bad\x20type\x20in\x20channel\x20send\x20(thanks\x20Anthony\x20Martin).\x0a*\x20godoc:\x20bug\x20fix\x20in\x20relativePath,\x0a\x20\x20\x20\x20\x20\x20\x20\x20compute\x20search\x20index\x20for\x20all\x20file\x20systems\x20under\x20godoc's\x20observation,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20correct\x20time\x20stamp\x20to\x20indicate\x20accuracy\x20of\x20search\x20result.\x0a*\x20index/suffixarray:\x20use\x20sort.Search.\x0a*\x20net:\x20add\x20ReadFrom\x20and\x20WriteTo\x20windows\x20version\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20reflect:\x20remove\x20unnecessary\x20casts\x20in\x20Get\x20methods.\x0a*\x20rpc:\x20add\x20RegisterName\x20to\x20allow\x20override\x20of\x20default\x20type\x20name.\x0a*\x20runtime:\x20free\x20memory\x20allocated\x20by\x20windows\x20CommandLineToArgv\x20(thanks\x20Alex\x20Brainman).\x0a*\x20sort:\x20simplify\x20Search\x20(thanks\x20Roger\x20Peppe).\x0a*\x20strings:\x20add\x20LastIndexAny\x20(thanks\x20Benny\x20Siegert).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-11-10\">2010-11-10</h2>\x0a\x0a<pre>\x0aThe\x20birthday\x20release\x20includes\x20a\x20new\x20Search\x20capability\x20inside\x20the\x20sort\x20package.\x0aIt\x20takes\x20an\x20unusual\x20but\x20very\x20general\x20and\x20easy-to-use\x20approach\x20to\x20searching\x0aarbitrary\x20indexable\x20sorted\x20data.\x20\x20See\x20the\x20documentation\x20for\x20details:\x0a\x20\x20\x20\x20http://golang.org/pkg/sort/#Search\x0a\x0aThe\x20ARM\x20port\x20now\x20uses\x20the\x20hardware\x20floating\x20point\x20unit\x20(VFP).\x20\x20It\x20still\x20has\x20a\x0afew\x20bugs,\x20mostly\x20around\x20conversions\x20between\x20unsigned\x20integer\x20and\x20floating-point\x0avalues,\x20but\x20it's\x20stabilizing.\x0a\x0aIn\x20addition,\x20there\x20have\x20been\x20many\x20smaller\x20fixes\x20and\x20updates:\x20\x0a\x0a*\x206l:\x20generate\x20dwarf\x20variable\x20names\x20with\x20disambiguating\x20suffix.\x0a*\x20container/list:\x20make\x20Remove\x20return\x20Value\x20of\x20removed\x20element.\x0a\x20\x20\x20\x20makes\x20it\x20easier\x20to\x20remove\x20first\x20or\x20last\x20item.\x0a*\x20crypto:\x20add\x20cast5\x20(default\x20PGP\x20cipher),\x0a\x20\x20\x20\x20switch\x20block\x20cipher\x20methods\x20to\x20be\x20destination\x20first.\x0a*\x20crypto/tls:\x20use\x20pool\x20building\x20for\x20certificate\x20checking\x0a*\x20go/ast:\x20change\x20embedded\x20token.Position\x20fields\x20to\x20named\x20fields\x0a\x20\x20\x20\x20(preparation\x20for\x20a\x20different\x20position\x20representation)\x0a*\x20net:\x20provide\x20public\x20access\x20to\x20file\x20descriptors\x20(thanks\x20Keith\x20Rarick)\x0a*\x20os:\x20add\x20Expand\x20function\x20to\x20evaluate\x20environment\x20variables.\x0a*\x20path:\x20add\x20Glob\x20(thanks\x20Benny\x20Siegert)\x0a*\x20runtime:\x20memequal\x20optimization\x20(thanks\x20Graham\x20Miller)\x0a\x20\x20\x20\x20prefix\x20all\x20external\x20symbols\x20with\x20\"runtime\xc2\xb7\"\x20to\x20avoid\x0a\x20\x20\x20\x20conflicts\x20linking\x20with\x20external\x20C\x20libraries.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-11-02\">2010-11-02</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20language\x20change:\x20the\x20new\x20built-in\x20function,\x20append.\x0aAppend\x20makes\x20growing\x20slices\x20much\x20simpler.\x20See\x20the\x20spec\x20for\x20details:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://golang.org/doc/go_spec.html#Appending_and_copying_slices\x0a\x0aOther\x20changes:\x0a*\x208l:\x20pe\x20generation\x20fixes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20doc:\x20Effective\x20Go:\x20append\x20and\x20a\x20few\x20words\x20about\x20\"...\"\x20args.\x0a*\x20build:\x20fiddle\x20with\x20make\x20variables.\x0a*\x20codereview:\x20fix\x20sync\x20and\x20download\x20in\x20Python\x202.7\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20debug/pe,\x20cgo:\x20add\x20windows\x20support\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20go/ast:\x20add\x20Inspect\x20function\x20for\x20easy\x20AST\x20inspection\x20w/o\x20a\x20visitor.\x0a*\x20go/printer:\x20do\x20not\x20remove\x20parens\x20around\x20composite\x20literals\x20starting\x20with\x0a\x20\x20\x20\x20\x20\x20\x20\x20a\x20type\x20name\x20in\x20control\x20clauses.\x0a*\x20go/scanner:\x20bug\x20fixes,\x20revisions,\x20and\x20more\x20tests.\x0a*\x20gob:\x20several\x20fixes\x20and\x20documentation\x20updates.\x0a*\x20godoc:\x20bug\x20fix\x20(bug\x20introduced\x20with\x20revision\x203ee58453e961).\x0a*\x20gotest:\x20print\x20empty\x20benchmark\x20list\x20in\x20a\x20way\x20that\x20gofmt\x20will\x20leave\x20alone.\x0a*\x20http\x20server:\x20correctly\x20respond\x20with\x20304\x20NotModified\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20kate:\x20update\x20list\x20of\x20builtins\x20(thanks\x20Evan\x20Shaw).\x0a*\x20libutf:\x20update\x20to\x20Unicode\x205.2.0\x20to\x20match\x20pkg/unicode\x20(thanks\x20Anthony\x20Martin).\x0a*\x20misc/bbedit:\x20update\x20list\x20of\x20builtins\x20(thanks\x20Anthony\x20Starks).\x0a*\x20misc/vim:\x20update\x20list\x20of\x20builtins.\x0a*\x20mkrunetype:\x20install\x20a\x20Makefile\x20and\x20tweak\x20it\x20slightly\x20so\x20it\x20can\x20be\x20built.\x0a*\x20netchan:\x20fix\x20locking\x20bug.\x0a*\x20pidigits:\x20minor\x20improvements\x20(thanks\x20Evan\x20Shaw).\x0a*\x20rpc:\x20fix\x20client\x20deadlock\x20bug.\x0a*\x20src:\x20use\x20append\x20where\x20appropriate\x20(often\x20instead\x20of\x20vector).\x0a*\x20strings:\x20add\x20Contains\x20helper\x20function\x20(thanks\x20Brad\x20Fitzpatrick).\x0a*\x20syscall:\x20SIO\x20constants\x20for\x20Linux\x20(thanks\x20Albert\x20Strasheim),\x0a\x20\x20\x20\x20\x20\x20\x20\x20Stat(path)\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/ken/convert.go:\x20add\x20conversion\x20torture\x20test.\x0a*\x20testing:\x20add\x20Benchmark\x20(thanks\x20Roger\x20Peppe).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-10-27\">2010-10-27</h2>\x0a\x0a<pre>\x0a***\x20This\x20release\x20changes\x20the\x20encoding\x20used\x20by\x20package\x20gob.\x20\x0a\x20\x20\x20\x20If\x20you\x20store\x20gobs\x20on\x20disk,\x20see\x20below.\x20***\x0a\x0aThe\x20ARM\x20port\x20(5g)\x20now\x20passes\x20all\x20tests.\x20The\x20optimizer\x20is\x20not\x20yet\x20enabled,\x20and\x0afloating\x20point\x20arithmetic\x20is\x20performed\x20entirely\x20in\x20software.\x20Work\x20is\x20underway\x0ato\x20address\x20both\x20of\x20these\x20deficiencies.\x0a\x0aThe\x20syntax\x20for\x20arrays,\x20slices,\x20and\x20maps\x20of\x20composite\x20literals\x20has\x20been\x0asimplified.\x20Within\x20a\x20composite\x20literal\x20of\x20array,\x20slice,\x20or\x20map\x20type,\x20elements\x0athat\x20are\x20themselves\x20composite\x20literals\x20may\x20elide\x20the\x20type\x20if\x20it\x20is\x20identical\x20to\x0athe\x20outer\x20literal's\x20element\x20type.\x20For\x20example,\x20these\x20expressions:\x0a\x09[][]int{[]int{1,\x202,\x203},\x20[]int{4,\x205}}\x0a\x09map[string]Point{\"x\":\x20Point{1.5,\x20-3.5},\x20\"y\":\x20Point{0,\x200}}\x0acan\x20be\x20simplified\x20to:\x0a\x09[][]int{{1,\x202,\x203},\x20{4,\x205}}\x0a\x09map[string]Point{\"x\":\x20{1.5,\x20-3.5},\x20\"y\":\x20{0,\x200}}\x0aGofmt\x20can\x20make\x20these\x20simplifications\x20mechanically\x20when\x20invoked\x20with\x20the\x20\x0anew\x20-s\x20flag.\x0a\x0aThe\x20built-in\x20copy\x20function\x20can\x20now\x20copy\x20bytes\x20from\x20a\x20string\x20value\x20to\x20a\x20[]byte.\x0aCode\x20like\x20this\x20(for\x20[]byte\x20b\x20and\x20string\x20s):\x20\x0a\x09for\x20i\x20:=\x200;\x20i\x20&lt;\x20len(s);\x20i++\x20{\x0a\x09\x09b[i]\x20=\x20s[i]\x0a\x09}\x0acan\x20be\x20rewritten\x20as:\x0a\x09copy(b,\x20s)\x0a\x0aThe\x20gob\x20package\x20can\x20now\x20encode\x20and\x20decode\x20interface\x20values\x20containing\x20types\x0aregistered\x20ahead\x20of\x20time\x20with\x20the\x20new\x20Register\x20function.\x20These\x20changes\x20required\x0aa\x20backwards-incompatible\x20change\x20to\x20the\x20wire\x20format.\x20\x20Data\x20written\x20with\x20the\x20old\x0aversion\x20of\x20the\x20package\x20will\x20not\x20be\x20readable\x20with\x20the\x20new\x20one,\x20and\x20vice\x20versa.\x0a(Steps\x20were\x20made\x20in\x20this\x20change\x20to\x20make\x20sure\x20this\x20doesn't\x20happen\x20again.)\x20\x0aWe\x20don't\x20know\x20of\x20anyone\x20using\x20gobs\x20to\x20create\x20permanent\x20data,\x20but\x20if\x20you\x20do\x20this\x0aand\x20need\x20help\x20converting,\x20please\x20let\x20us\x20know,\x20and\x20do\x20not\x20update\x20to\x20this\x20release\x0ayet.\x20\x20We\x20will\x20help\x20you\x20convert\x20your\x20data.\x0a\x0aOther\x20changes:\x0a*\x205g,\x206g,\x208g:\x20generate\x20code\x20for\x20string\x20index\x20instead\x20of\x20calling\x20function.\x0a*\x205l,\x206l,\x208l:\x20introduce\x20sub-symbols.\x0a*\x206l/8l:\x20global\x20and\x20local\x20variables\x20and\x20type\x20info.\x0a*\x20Make.inc:\x20delete\x20unnecessary\x20-fno-inline\x20flag\x20to\x20quietgcc.\x0a*\x20arm:\x20precise\x20float64\x20software\x20floating\x20point,\x20bug\x20fixes.\x0a*\x20big:\x20arm\x20assembly,\x20faster\x20software\x20mulWW,\x20divWW.\x0a*\x20build:\x20only\x20print\x20\"You\x20need\x20to\x20add\x20foo\x20to\x20PATH\"\x20when\x20needed.\x0a*\x20container/list:\x20fix\x20Remove\x20bug\x20and\x20use\x20pointer\x20to\x20self\x20as\x20identifier.\x0a*\x20doc:\x20show\x20page\x20title\x20in\x20browser\x20title\x20bar,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20roadmap.\x0a*\x20encoding/binary:\x20give\x20LittleEndian,\x20BigEndian\x20specific\x20types.\x0a*\x20go/parser:\x20consume\x20auto-inserted\x20semi\x20when\x20calling\x20ParseExpr().\x0a*\x20gobuilder:\x20pass\x20GOHOSTOS\x20and\x20GOHOSTARCH\x20to\x20build,\x0a\x20\x20\x20\x20\x20\x20\x20\x20write\x20build\x20and\x20benchmarking\x20logs\x20to\x20disk.\x0a*\x20goinstall:\x20display\x20helpful\x20message\x20when\x20encountering\x20a\x20cgo\x20package,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20test\x20for\x20multiple\x20package\x20names\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20gotest:\x20generate\x20correct\x20gofmt-formatted\x20_testmain.go.\x0a*\x20image/png:\x20speed\x20up\x20paletted\x20encoding\x20~25%\x20(thanks\x20Brad\x20Fitzpatrick).\x0a*\x20misc:\x20update\x20python\x20scripts\x20to\x20specify\x20python2\x20as\x20python3\x20is\x20now\x20\"python\".\x0a*\x20net:\x20fix\x20comment\x20on\x20Dial\x20to\x20mention\x20unix/unixgram.\x0a*\x20rpc:\x20expose\x20Server\x20type\x20to\x20allow\x20multiple\x20RPC\x20Server\x20instances.\x0a*\x20runtime:\x20print\x20unknown\x20types\x20in\x20panic.\x0a*\x20spec:\x20append\x20built-in\x20(not\x20yet\x20implemented).\x0a*\x20src:\x20gofmt\x20-s\x20-w\x20src\x20misc.\x0a\x20\x20\x20\x20\x20\x20\x20\x20update\x20code\x20to\x20use\x20copy-from-string.\x0a*\x20test/bench:\x20update\x20numbers.\x0a*\x20websocket:\x20fix\x20short\x20Read.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-10-20\">2010-10-20</h2>\x0a\x0a<pre>\x0aThis\x20release\x20removes\x20the\x20log\x20package's\x20deprecated\x20functions.\x0aCode\x20that\x20has\x20not\x20been\x20updated\x20to\x20use\x20the\x20new\x20interface\x20will\x20break.\x0aSee\x20the\x20previous\x20release\x20notes\x20for\x20details:\x0a\x09http://golang.org/doc/devel/release.html#2010-10-13\x0a\x0aAlso\x20included\x20are\x20major\x20improvements\x20to\x20the\x20linker.\x20It\x20is\x20now\x20faster,\x20\x0auses\x20less\x20memory,\x20and\x20more\x20parallelizable\x20(but\x20not\x20yet\x20parallel).\x0a\x0aThe\x20nntp\x20package\x20has\x20been\x20removed\x20from\x20the\x20standard\x20library.\x0aIts\x20new\x20home\x20is\x20the\x20nntp-go\x20project\x20at\x20Google\x20Code:\x0a\x09http://code.google.com/p/nntp-go\x0aYou\x20can\x20install\x20it\x20with\x20goinstall:\x0a\x09goinstall\x20nntp-go.googlecode.com/hg/nntp\x0aAnd\x20import\x20it\x20in\x20your\x20code\x20like\x20so:\x0a\x09import\x20\"nntp-go.googlecode.com/hg/nntp\"\x0a\x0aOther\x20changes:\x0a*\x206g:\x20avoid\x20too-large\x20immediate\x20constants.\x0a*\x208l,\x20runtime:\x20initial\x20support\x20for\x20Plan\x209\x20(thanks\x20Yuval\x20Pavel\x20Zholkover).\x0a*\x206l,\x208l:\x20more\x20improvements\x20on\x20exporting\x20debug\x20information\x20(DWARF).\x0a*\x20arm:\x20code\x20gen\x20fixes.\x20Most\x20tests\x20now\x20pass,\x20except\x20for\x20floating\x20point\x20code.\x0a*\x20big:\x20add\x20random\x20number\x20generation\x20(thanks\x20Florian\x20Uekermann).\x0a*\x20gc:\x20keep\x20track\x20of\x20real\x20actual\x20type\x20of\x20identifiers,\x0a\x09report\x20that\x20shift\x20must\x20be\x20unsigned\x20integer,\x0a\x09select\x20receive\x20with\x20implicit\x20conversion.\x0a*\x20goplay:\x20fix\x20to\x20run\x20under\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20http:\x20do\x20not\x20close\x20connection\x20after\x20sending\x20HTTP/1.0\x20request.\x0a*\x20netchan:\x20add\x20new\x20method\x20Hangup\x20to\x20terminate\x20transmission\x20on\x20a\x20channel.\x0a*\x20os:\x20change\x20TestForkExec\x20so\x20it\x20can\x20run\x20on\x20windows\x20(thanks\x20Yasuhiro\x20Matsumoto).\x0a*\x20runtime:\x20don't\x20let\x20select\x20split\x20stack.\x0a*\x20syscall/arm:\x20correct\x2064-bit\x20system\x20call\x20arguments.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-10-13\">2010-10-13</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20changes\x20to\x20the\x20log\x20package,\x20the\x20removal\x20of\x20exp/iterable,\x0atwo\x20new\x20tools\x20(gotry\x20and\x20goplay),\x20one\x20small\x20language\x20change,\x20and\x20many\x20other\x0achanges\x20and\x20fixes.\x20\x20If\x20you\x20use\x20the\x20log\x20or\x20iterable\x20packages,\x20you\x20need\x20to\x20make\x0achanges\x20to\x20your\x20code.\x0a\x0aThe\x20log\x20package\x20has\x20changed.\x20\x20Loggers\x20now\x20have\x20only\x20one\x20output,\x20and\x20output\x20to\x0astandard\x20error\x20by\x20default.\x20\x20The\x20names\x20have\x20also\x20changed,\x20although\x20the\x20old\x20names\x0aare\x20still\x20supported.\x20\x20They\x20will\x20be\x20deleted\x20in\x20the\x20next\x20release,\x20though,\x20so\x20it\x0awould\x20be\x20good\x20to\x20update\x20now\x20if\x20you\x20can.\x20\x20For\x20most\x20purposes\x20all\x20you\x20need\x20to\x20do\x0ais\x20make\x20these\x20substitutions:\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Stderr\x20-&gt;\x20log.Println\x20or\x20log.Print\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Stderrf\x20-&gt;\x20log.Printf\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Crash\x20-&gt;\x20log.Panicln\x20or\x20log.Panic\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Crashf\x20-&gt;\x20log.Panicf\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Exit\x20-&gt;\x20log.Exitln\x20or\x20log.Exit\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Exitf\x20-&gt;\x20log.Exitf\x20(no\x20change)\x0aCalls\x20to\x20log.New()\x20must\x20drop\x20the\x20second\x20argument.\x0aAlso,\x20custom\x20loggers\x20with\x20exit\x20or\x20panic\x20properties\x20will\x20need\x20to\x20be\x20reworked.\x0aFor\x20full\x20details,\x20see\x20the\x20change\x20description:\x0a\x20\x20\x20\x20\x20\x20\x20\x20http://code.google.com/p/go/source/detail?r=d8a3c7563d\x0a\x0aThe\x20language\x20change\x20is\x20that\x20uses\x20of\x20pointers\x20to\x20interface\x20values\x20no\x20longer\x0aautomatically\x20dereference\x20the\x20pointer.\x20\x20A\x20pointer\x20to\x20an\x20interface\x20value\x20is\x20more\x0aoften\x20a\x20beginner's\x20bug\x20than\x20correct\x20code.\x0a\x0aThe\x20package\x20exp/iterable\x20has\x20been\x20removed.\x20It\x20was\x20an\x20interesting\x20experiment,\x0abut\x20it\x20encourages\x20writing\x20inefficient\x20code\x20and\x20has\x20outlived\x20its\x20utility.\x0a\x0aThe\x20new\x20tools:\x0a*\x20gotry:\x20an\x20exercise\x20in\x20reflection\x20and\x20an\x20unusual\x20tool.\x20Run\x20'gotry'\x20for\x20details.\x0a*\x20goplay:\x20a\x20stand-alone\x20version\x20of\x20the\x20Go\x20Playground.\x20See\x20misc/goplay.\x0a\x0aOther\x20changes:\x0a*\x206l:\x20Mach-O\x20fixes,\x20and\x20fix\x20to\x20work\x20with\x20OS\x20X\x20nm/otool\x20(thanks\x20Jim\x20McGrath).\x0a*\x20[568]a:\x20correct\x20line\x20numbers\x20for\x20statements.\x0a*\x20arm:\x20code\x20generation\x20and\x20runtime\x20fixes,\x0a\x09adjust\x20recover\x20for\x20new\x20reflect.call,\x0a\x09enable\x206\x20more\x20tests\x20after\x20net\x20fix.\x0a*\x20big:\x20fix\x20panic\x20and\x20round\x20correctly\x20in\x20Rat.FloatString\x20(thanks\x20Anthony\x20Martin).\x0a*\x20build:\x20Make.cmd:\x20remove\x20$(OFILES)\x20(thanks\x20Eric\x20Clark),\x0a\x20\x20\x20\x20\x20\x20\x20\x20Make.pkg:\x20remove\x20.so\x20before\x20installing\x20new\x20one,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20GOHOSTOS\x20and\x20GOHOSTARCH\x20environment\x20variables.\x0a*\x20crypto/tls:\x20better\x20error\x20messages\x20for\x20certificate\x20issues,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20SetReadTimeout\x20work.\x0a*\x20doc:\x20add\x20Sydney\x20University\x20video,\x0a\x09add\x20The\x20Expressiveness\x20of\x20Go\x20talk.\x0a*\x20exp/draw/x11:\x20support\x20X11\x20vendors\x20other\x20than\x20\"The\x20X.Org\x20Foundation\".\x0a*\x20expvar:\x20add\x20(*Int).Set\x20(thanks\x20Sam\x20Thorogood).\x0a*\x20fmt:\x20add\x20Errorf\x20helper\x20function,\x0a\x20\x20\x20\x20\x20\x20\x20\x20allow\x20%d\x20on\x20[]byte.\x0a*\x20gc:\x20O(1)\x20string\x20comparison\x20when\x20lengths\x20differ,\x0a\x20\x20\x20\x20\x20\x20\x20\x20various\x20bug\x20fixes.\x0a*\x20http:\x20return\x20the\x20correct\x20error\x20if\x20a\x20header\x20line\x20is\x20too\x20long.\x0a*\x20image:\x20add\x20image.Tiled\x20type,\x20the\x20Go\x20equivalent\x20of\x20Plan\x209's\x20repl\x20bit.\x0a*\x20ld:\x20be\x20less\x20picky\x20about\x20bad\x20line\x20number\x20info.\x0a*\x20misc/cgo/life:\x20fix\x20for\x20new\x20slice\x20rules\x20(thanks\x20Graham\x20Miller).\x0a*\x20net:\x20allow\x20_\x20in\x20DNS\x20names.\x0a*\x20netchan:\x20export\x20before\x20import\x20when\x20testing,\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20zero\x20out\x20request\x20to\x20ensure\x20correct\x20gob\x20decoding.\x20(thanks\x20Roger\x20Peppe).\x0a*\x20os:\x20make\x20tests\x20work\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime:\x20bug\x20fix:\x20serialize\x20mcache\x20allocation,\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20iteration\x20of\x20large\x20map\x20values,\x0a\x20\x20\x20\x20\x20\x20\x20\x20faster\x20strequal,\x20memequal\x20(thanks\x20Graham\x20Miller),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20argument\x20dump\x20in\x20traceback,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20tiny\x20build.\x0a*\x20smtp:\x20new\x20package\x20(thanks\x20Evan\x20Shaw).\x0a*\x20syscall:\x20add\x20sockaddr_ll\x20support\x20for\x20linux/386,\x20linux/amd64\x20(thanks\x20Mikio\x20Hara),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20ucred\x20structure\x20for\x20SCM_CREDENTIALS\x20over\x20UNIX\x20sockets.\x20(thanks\x20Albert\x20Strasheim).\x0a*\x20syscall:\x20implement\x20WaitStatus\x20and\x20Wait4()\x20for\x20windows\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20time:\x20add\x20After.\x0a*\x20websocket:\x20enable\x20tests\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-09-29\">2010-09-29</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20some\x20minor\x20language\x20changes\x20and\x20some\x20significant\x20package\x0achanges.\x20You\x20may\x20need\x20to\x20change\x20your\x20code\x20if\x20you\x20use\x20...T\x20parameters\x20or\x20the\x0ahttp\x20package.\x0a\x0aThe\x20semantics\x20and\x20syntax\x20of\x20forwarding\x20...T\x20parameters\x20have\x20changed.\x0a\x20\x20\x20\x20\x20\x20\x20\x20func\x20message(f\x20string,\x20s\x20...interface{})\x20{\x20fmt.Printf(f,\x20s)\x20}\x0aHere,\x20s\x20has\x20type\x20[]interface{}\x20and\x20contains\x20the\x20parameters\x20passed\x20to\x20message.\x0aBefore\x20this\x20language\x20change,\x20the\x20compiler\x20recognized\x20when\x20a\x20function\x20call\x0apassed\x20a\x20...\x20parameter\x20to\x20another\x20...\x20parameter\x20of\x20the\x20same\x20type,\x20and\x20just\x0apassed\x20it\x20as\x20though\x20it\x20was\x20a\x20list\x20of\x20arguments.\x20\x20But\x20this\x20meant\x20that\x20you\x0acouldn't\x20control\x20whether\x20to\x20pass\x20the\x20slice\x20as\x20a\x20single\x20argument\x20and\x20you\x0acouldn't\x20pass\x20a\x20regular\x20slice\x20as\x20a\x20...\x20parameter,\x20which\x20can\x20be\x20handy.\x20\x20This\x0achange\x20gives\x20you\x20that\x20control\x20at\x20the\x20cost\x20of\x20a\x20few\x20characters\x20in\x20the\x20call.\x0aIf\x20you\x20want\x20the\x20promotion\x20to\x20...,\x20\x20append\x20...\x20to\x20the\x20argument:\x0a\x20\x20\x20\x20\x20\x20\x20\x20func\x20message(f\x20string,\x20s\x20...interface{})\x20{\x20fmt.Printf(f,\x20s...)\x20}\x0aWithout\x20the\x20...,\x20s\x20would\x20be\x20passed\x20to\x20Printf\x20as\x20a\x20single\x20argument\x20of\x20type\x0a[]interface{}.\x20\x20The\x20bad\x20news\x20is\x20you\x20might\x20need\x20to\x20fix\x20up\x20some\x20of\x20your\x20code,\x20\x0abut\x20the\x20compiler\x20will\x20detect\x20the\x20situation\x20and\x20warn\x20you.\x0a\x0aAlso,\x20the\x20http.Handler\x20and\x20http.HandlerFunc\x20types\x20have\x20changed.\x20Where\x20http\x0ahandler\x20functions\x20previously\x20accepted\x20an\x20*http.Conn,\x20they\x20now\x20take\x20an\x20interface\x0atype\x20http.ResponseWriter.\x20ResponseWriter\x20implements\x20the\x20same\x20methods\x20as\x20*Conn,\x0aso\x20in\x20most\x20cases\x20the\x20only\x20change\x20required\x20will\x20be\x20changing\x20the\x20type\x20signature\x0aof\x20your\x20handler\x20function's\x20first\x20parameter.\x20See:\x0a\x20\x20http://golang.org/pkg/http/#Handler\x0a\x0aThe\x20utf8\x20package\x20has\x20a\x20new\x20type,\x20String,\x20that\x20provides\x20efficient\x20indexing\x20\x0ainto\x20utf8\x20strings\x20by\x20rune\x20(previously\x20an\x20expensive\x20conversion\x20to\x20[]int\x20\x0awas\x20required).\x20See:\x0a\x20\x20http://golang.org/pkg/utf8/#String\x0a\x0aThe\x20compiler\x20will\x20now\x20automatically\x20insert\x20a\x20semicolon\x20at\x20the\x20end\x20of\x20a\x20file\x20if\x0aone\x20is\x20not\x20found.\x20This\x20effect\x20of\x20this\x20is\x20that\x20Go\x20source\x20files\x20are\x20no\x20longer\x0arequired\x20to\x20have\x20a\x20trailing\x20newline.\x0a\x0aOther\x20changes:\x0a*\x206prof:\x20more\x20accurate\x20usage\x20message.\x0a*\x20archive/zip:\x20new\x20package\x20for\x20reading\x20Zip\x20files.\x0a*\x20arm:\x20fix\x20code\x20generation,\x2010\x20more\x20package\x20tests\x20pass.\x0a*\x20asn1:\x20make\x20interface\x20consistent\x20with\x20json.\x0a*\x20bufio.UnreadRune:\x20fix\x20bug\x20at\x20EOF.\x0a*\x20build:\x20clear\x20custom\x20variables\x20like\x20GREP_OPTIONS,\x0a\x20\x20\x20\x20\x20\x20\x20\x20silence\x20warnings\x20generated\x20by\x20ubuntu\x20gcc,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20full\x20path\x20when\x20compiling\x20libraries.\x0a*\x20bytes,\x20strings:\x20change\x20lastIndexFunc\x20to\x20use\x20DecodeLastRune\x20(thanks\x20Roger\x20Peppe).\x0a*\x20doc:\x20add\x20to\x20and\x20consolidate\x20non-english\x20doc\x20references,\x0a\x20\x20\x20\x20\x20\x20\x20\x20consolidate\x20FAQs\x20into\x20a\x20single\x20file,\x20go_faq.html,\x0a\x20\x20\x20\x20\x20\x20\x20\x20updates\x20for\x20new\x20http\x20interface.\x0a*\x20fmt/Printf:\x20document\x20and\x20tweak\x20error\x20messages\x20produced\x20for\x20bad\x20formats.\x0a*\x20gc:\x20allow\x20select\x20case\x20expr\x20=\x20&lt;-c,\x0a\x20\x20\x20\x20\x20\x20\x20\x20eliminate\x20duplicates\x20in\x20method\x20table,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20reflect\x20table\x20method\x20receiver,\x0a\x20\x20\x20\x20\x20\x20\x20\x20improve\x20error\x20message\x20for\x20x\x20\\=\x200.\x0a*\x20go/scanner:\x20treat\x20EOF\x20like\x20a\x20newline\x20for\x20purposes\x20of\x20semicolon\x20insertion.\x0a*\x20gofmt:\x20stability\x20improvements.\x0a*\x20gotest:\x20leave\x20_testmain.go\x20for\x20\"make\x20clean\"\x20to\x20clean\x20up.\x0a*\x20http:\x20correct\x20escaping\x20of\x20different\x20parts\x20of\x20URL,\x0a\x20\x20\x20\x20\x20\x20\x20\x20support\x20HTTP/1.0\x20Keep-Alive.\x0a*\x20json:\x20do\x20not\x20write\x20to\x20unexported\x20fields.\x0a*\x20libcgo:\x20don't\x20build\x20for\x20NaCl,\x0a\x20\x20\x20\x20\x20\x20\x20\x20set\x20g,\x20m\x20in\x20thread\x20local\x20storage\x20for\x20windows\x20386\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20math:\x20Fix\x20off-by-one\x20error\x20in\x20Ilogb\x20and\x20Logb.\x20\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/dashboard/builder:\x20remove\x20build\x20files\x20after\x20benchmarking.\x0a*\x20nacl:\x20update\x20instructions\x20for\x20new\x20SDK.\x0a*\x20net:\x20enable\x20v4-over-v6\x20on\x20ip\x20sockets,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20crash\x20in\x20DialIP.\x0a*\x20os:\x20check\x20for\x20valid\x20arguments\x20in\x20windows\x20Readdir\x20(thanks\x20Peter\x20Mundy).\x0a*\x20runtime:\x20add\x20mmap\x20of\x20null\x20page\x20just\x20in\x20case,\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20stats\x20in\x20SysFree,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20unwindstack\x20crash.\x0a*\x20syscall:\x20add\x20IPPROTO_IPV6\x20and\x20IPV6_V6ONLY\x20const\x20to\x20fix\x20nacl\x20and\x20windows\x20build,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20inotify\x20on\x20Linux\x20(thanks\x20Balazs\x20Lecz),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20socketpair\x20in\x20syscall_bsd,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20windows\x20value\x20of\x20IPV6_V6ONLY\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20windows\x20version\x20of\x20Utimes\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20mkall.sh\x20work\x20for\x20nacl.\x0a*\x20test:\x20Add\x20test\x20that\x20causes\x20incorrect\x20error\x20from\x20gccgo.\x0a*\x20utf8:\x20add\x20DecodeLastRune\x20and\x20DecodeLastRuneInString\x20(thanks\x20Roger\x20Peppe).\x0a*\x20xml:\x20Allow\x20entities\x20inside\x20CDATA\x20tags\x20(thanks\x20Dan\x20Sinclair).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-09-22\">2010-09-22</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20new\x20package\x20functionality,\x20and\x20many\x20bug\x20fixes\x20and\x20changes.\x0aIt\x20also\x20improves\x20support\x20for\x20the\x20arm\x20and\x20nacl\x20platforms.\x0a\x0a*\x205l:\x20avoid\x20fixed\x20buffers\x20in\x20list.\x0a*\x206l,\x208l:\x20clean\x20up\x20ELF\x20code,\x20fix\x20NaCl.\x0a*\x206l/8l:\x20emit\x20DWARF\x20frame\x20info.\x0a*\x20Make.inc:\x20make\x20GOOS\x20detection\x20work\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20build:\x20fixes\x20for\x20native\x20arn\x20build,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20all.bash\x20run\x20on\x20Ubuntu\x20ARM.\x0a*\x20cgo:\x20bug\x20fixes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20show\x20preamble\x20gcc\x20errors\x20(thanks\x20Eric\x20Clark).\x0a*\x20crypto/x509,\x20crypto/tls:\x20improve\x20root\x20matching\x20and\x20observe\x20CA\x20flag.\x0a*\x20crypto:\x20Fix\x20certificate\x20validation.\x0a*\x20doc:\x20variable-width\x20layout.\x0a*\x20env.bash:\x20fix\x20building\x20in\x20directory\x20with\x20spaces\x20in\x20the\x20path\x20(thanks\x20Alex\x20Brainman).\x0a*\x20exp/4s,\x20exp/nacl/av:\x20sync\x20to\x20recent\x20exp/draw\x20changes.\x0a*\x20exp/draw/x11:\x20mouse\x20location\x20is\x20a\x20signed\x20integer.\x0a*\x20exp/nacl/av:\x20update\x20color\x20to\x20max\x20out\x20at\x201&lt;&lt;16-1\x20instead\x20of\x201&lt;&lt;32-1.\x0a*\x20fmt:\x20support\x20'*'\x20for\x20width\x20or\x20precision\x20(thanks\x20Anthony\x20Martin).\x0a*\x20gc:\x20improvements\x20to\x20static\x20initialization,\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20sure\x20path\x20names\x20are\x20canonical.\x0a*\x20gob:\x20make\x20robust\x20when\x20decoding\x20a\x20struct\x20with\x20non-struct\x20data.\x0a*\x20gobuilder:\x20add\x20-cmd\x20for\x20user-specified\x20build\x20command,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20-rev=\x20flag\x20to\x20build\x20specific\x20revision\x20and\x20exit,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20bug\x20that\x20caused\x20old\x20revisions\x20to\x20be\x20rebuilt.\x0a*\x20godoc:\x20change\x20default\x20filter\x20file\x20name\x20to\x20\"\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20use\x20quadratic\x20algorithm\x20to\x20filter\x20paths,\x0a\x20\x20\x20\x20\x20\x20\x20\x20show\x20\"Last\x20update\"\x20info\x20for\x20directory\x20listings.\x0a*\x20http:\x20new\x20redirect\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20URLEscape\x20now\x20escapes\x20all\x20reserved\x20characters\x20as\x20per\x20the\x20RFC.\x0a*\x20nacl:\x20fix\x20zero-length\x20writes.\x0a*\x20net/dict:\x20parse\x20response\x20correctly\x20(thanks\x20Fazlul\x20Shahriar).\x0a*\x20netchan:\x20add\x20a\x20cross-connect\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20closing\x20of\x20channels,\x0a\x20\x20\x20\x20\x20\x20\x20\x20provide\x20a\x20method\x20(Importer.Errors())\x20to\x20recover\x20protocol\x20errors.\x0a*\x20os:\x20make\x20Open()\x20O_APPEND\x20flag\x20work\x20on\x20windows\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20RemoveAll()\x20work\x20on\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20pkg/Makefile:\x20disable\x20netchan\x20test\x20to\x20fix\x20windows\x20build\x20(thanks\x20Alex\x20Brainman).\x0a*\x20regexp:\x20delete\x20Iter\x20methods.\x0a*\x20runtime:\x20better\x20panic\x20for\x20send\x20to\x20nil\x20channel.\x0a*\x20strings:\x20fix\x20minor\x20bug\x20in\x20LastIndexFunc\x20(thanks\x20Roger\x20Peppe).\x0a*\x20suffixarray:\x20a\x20package\x20for\x20creating\x20suffixarray-based\x20indexes.\x0a*\x20syscall:\x20Use\x20vsyscall\x20for\x20syscall.Gettimeofday\x20and\x20.Time\x20on\x20linux\x20amd64.\x0a*\x20test:\x20fix\x20NaCl\x20build.\x0a*\x20windows:\x20fix\x20netchan\x20test\x20by\x20using\x20127.0.0.1.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-09-15\">2010-09-15</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20language\x20change:\x20the\x20lower\x20bound\x20of\x20a\x20subslice\x20may\x0anow\x20be\x20omitted,\x20in\x20which\x20case\x20the\x20value\x20will\x20default\x20to\x200.\x0aFor\x20example,\x20s[0:10]\x20may\x20now\x20be\x20written\x20as\x20s[:10],\x20and\x20s[0:]\x20as\x20s[:].\x0a\x0aThe\x20release\x20also\x20includes\x20important\x20bug\x20fixes\x20for\x20the\x20ARM\x20architecture,\x0aas\x20well\x20as\x20the\x20following\x20fixes\x20and\x20changes:\x0a\x0a*\x205g:\x20register\x20allocation\x20bugs\x0a*\x206c,\x208c:\x20show\x20line\x20numbers\x20in\x20-S\x20output\x0a*\x206g,\x206l,\x208g,\x208l:\x20move\x20read-only\x20data\x20to\x20text\x20segment\x0a*\x206l,\x208l:\x20make\x20etext\x20accurate;\x20introduce\x20rodata,\x20erodata.\x0a*\x20arm:\x20fix\x20build\x20bugs.\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20libcgo\x20build\x20during\x20OS\x20X\x20cross-compile\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20reference\x20to\x20deleted\x20file\x20syntax/slice.go\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20the\x20correct\x20stat\x20syscalls\x0a\x20\x20\x20\x20\x20\x20\x20\x20work\x20around\x20reg\x20allocator\x20bug\x20in\x205g\x0a*\x20bufio:\x20add\x20UnreadRune.\x0a*\x20build:\x20avoid\x20bad\x20environment\x20interactions\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20build\x20for\x20tiny\x0a\x20\x20\x20\x20\x20\x20\x20\x20generate,\x20clean\x20.exe\x20files\x20on\x20Windows\x20(thanks\x20Joe\x20Poirier)\x0a\x20\x20\x20\x20\x20\x20\x20\x20test\x20for\x20_WIN32,\x20not\x20_MINGW32\x20(thanks\x20Joe\x20Poirier)\x0a\x20\x20\x20\x20\x20\x20\x20\x20work\x20with\x20GNU\x20Make\x203.82\x20(thanks\x20Jukka-Pekka\x20Kekkonen)\x0a*\x20cgo:\x20add\x20typedef\x20for\x20uintptr\x20in\x20generated\x20headers\x0a\x20\x20\x20\x20\x20\x20\x20\x20silence\x20warning\x20for\x20C\x20call\x20returning\x20const\x20pointer\x0a*\x20codereview:\x20convert\x20email\x20address\x20to\x20lower\x20case\x20before\x20checking\x20CONTRIBUTORS\x0a*\x20crypto/tls:\x20don't\x20return\x20an\x20error\x20from\x20Close()\x0a*\x20doc/tutorial:\x20update\x20for\x20slice\x20changes.\x0a*\x20exec:\x20separate\x20LookPath\x20implementations\x20for\x20unix/windows\x20(thanks\x20Joe\x20Poirier)\x0a*\x20exp/draw/x11:\x20allow\x20clean\x20shutdown\x20when\x20the\x20user\x20closes\x20the\x20window.\x0a*\x20exp/draw:\x20clip\x20destination\x20rectangle\x20to\x20the\x20image\x20bounds.\x0a\x20\x20\x20\x20\x20\x20\x20\x20fast\x20path\x20for\x20drawing\x20overlapping\x20image.RGBAs.\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20double-counting\x20of\x20pt.Min\x20for\x20the\x20src\x20and\x20mask\x20points.\x0a\x20\x20\x20\x20\x20\x20\x20\x20reintroduce\x20the\x20MouseEvent.Nsec\x20timestamp.\x0a\x20\x20\x20\x20\x20\x20\x20\x20rename\x20Context\x20to\x20Window,\x20and\x20add\x20a\x20Close\x20method.\x0a*\x20exp/debug:\x20preliminary\x20support\x20for\x20'copy'\x20function\x20(thanks\x20Sebastien\x20Binet)\x0a*\x20fmt.Fscan:\x20use\x20UnreadRune\x20to\x20preserve\x20data\x20across\x20calls.\x0a*\x20gc:\x20better\x20printing\x20of\x20named\x20constants,\x20func\x20literals\x20in\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20many\x20bug\x20fixes\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20line\x20number\x20printing\x20with\x20//line\x20directives\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20symbol\x20table\x20generation\x20on\x20windows\x20(thanks\x20Alex\x20Brainman)\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20comparison\x20rule\x20from\x20spec\x20change\x2033abb649cb63\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20new\x20slice\x20spec\x20(thanks\x20Scott\x20Lawrence)\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20string\x20x\x20+\x20y\x20+\x20z\x20+\x20...\x20+\x20w\x20efficient\x0a\x20\x20\x20\x20\x20\x20\x20\x20more\x20accurate\x20line\x20numbers\x20for\x20ATEXT\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20&amp;[10]int\x20-&gt;\x20[]int\x20conversion\x0a*\x20go-mode.el:\x20fix\x20highlighting\x20for\x20'chan'\x20type\x20(thanks\x20Scott\x20Lawrence)\x0a*\x20godoc:\x20better\x20support\x20for\x20directory\x20trees\x20for\x20user-supplied\x20paths\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20correct\x20delay\x20time\x20(bug\x20fix)\x0a*\x20gofmt,\x20go/printer:\x20update\x20internal\x20estimated\x20position\x20correctly\x0a*\x20goinstall:\x20warn\x20when\x20package\x20name\x20starts\x20with\x20http://\x20(thanks\x20Scott\x20Lawrence)\x0a*\x20http:\x20check\x20https\x20certificate\x20against\x20host\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20do\x20not\x20cache\x20CanonicalHeaderKey\x20(thanks\x20Jukka-Pekka\x20Kekkonen)\x0a*\x20image:\x20change\x20a\x20ColorImage's\x20minimum\x20point\x20from\x20(0,\x200)\x20to\x20(-1e9,\x20-1e9).\x0a\x20\x20\x20\x20\x20\x20\x20\x20introduce\x20Intersect\x20and\x20Union\x20rectangle\x20methods.\x0a*\x20ld:\x20handle\x20quoted\x20spaces\x20in\x20package\x20path\x20(thanks\x20Dan\x20Sinclair)\x0a*\x20libcgo:\x20fix\x20NaCl\x20build.\x0a*\x20libmach:\x20fix\x20build\x20on\x20arm\x20host\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20new\x20thread\x20race\x20with\x20Linux\x0a*\x20math:\x20make\x20portable\x20Tan(Pi/2)\x20return\x20NaN\x0a*\x20misc/dashboard/builder:\x20gobuilder,\x20a\x20continuous\x20build\x20client\x0a*\x20net:\x20disable\x20tests\x20for\x20functions\x20not\x20available\x20on\x20windows\x20(thanks\x20Alex\x20Brainman)\x0a*\x20netchan:\x20make\x20-1\x20unlimited,\x20as\x20advertised.\x0a*\x20os,\x20exec:\x20rename\x20argv0\x20to\x20name\x0a*\x20path:\x20add\x20IsAbs\x20(thanks\x20Ivan\x20Krasin)\x0a*\x20runtime:\x20fix\x20bug\x20in\x20tracebacks\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20crash\x20trace\x20on\x20amd64\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20windows\x20build\x20(thanks\x20Alex\x20Brainman)\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20manual\x20stack\x20for\x20garbage\x20collection\x0a*\x20spec:\x20add\x20examples\x20for\x20slices\x20with\x20omitted\x20index\x20expressions.\x0a\x20\x20\x20\x20\x20\x20\x20\x20allow\x20omission\x20of\x20low\x20slice\x20bound\x20(thanks\x20Scott\x20Lawrence)\x0a*\x20syscall:\x20fix\x20windows\x20Gettimeofday\x20(thanks\x20Alex\x20Brainman)\x0a*\x20test(arm):\x20disable\x20zerodivide.go\x20because\x20compilation\x20fails.\x0a*\x20test(windows):\x20disable\x20tests\x20that\x20cause\x20the\x20build\x20to\x20fail\x20(thanks\x20Joe\x20Poirier)\x0a*\x20test/garbage/parser:\x20sync\x20with\x20recent\x20parser\x20changes\x0a*\x20test:\x20Add\x20test\x20for\x20//line\x0a\x20\x20\x20\x20\x20\x20\x20\x20Make\x20gccgo\x20believe\x20that\x20the\x20variables\x20can\x20change.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Recognize\x20gccgo\x20error\x20messages.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Reduce\x20race\x20conditions\x20in\x20chan/nonblock.go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Run\x20garbage\x20collector\x20before\x20testing\x20malloc\x20numbers.\x0a*\x20websocket:\x20Add\x20support\x20for\x20secure\x20WebSockets\x20(thanks\x20Jukka-Pekka\x20Kekkonen)\x0a*\x20windows:\x20disable\x20unimplemented\x20tests\x20(thanks\x20Joe\x20Poirier)\x0a</pre>\x0a\x0a<h2\x20id=\"2010-09-06\">2010-09-06</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20the\x20syntactic\x20modernization\x20of\x20more\x20than\x20100\x20files\x20in\x20/test,\x0aand\x20these\x20additions,\x20changes,\x20and\x20fixes:\x20\x0a*\x206l/8l:\x20emit\x20DWARF\x20in\x20macho.\x0a*\x208g:\x20use\x20FCHS,\x20not\x20FMUL,\x20for\x20minus\x20float.\x0a*\x208l:\x20emit\x20DWARF\x20in\x20ELF,\x0a\x20\x20\x20\x20\x20\x20\x20\x20suppress\x20emitting\x20DWARF\x20in\x20Windows\x20PE\x20(thanks\x20Alex\x20Brainman).\x0a*\x20big:\x20added\x20RatString,\x20some\x20simplifications.\x0a*\x20build:\x20create\x20bin\x20and\x20pkg\x20directories\x20as\x20needed;\x20drop\x20from\x20hg,\x0a\x20\x20\x20\x20\x20\x20\x20\x20delete\x20Make.386\x20Make.amd64\x20Make.arm\x20(obsoleted\x20by\x20Make.inc),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20cgo\x20with\x20-j2,\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20pkg/Makefile\x20coordinate\x20building\x20of\x20Go\x20commands,\x0a\x20\x20\x20\x20\x20\x20\x20\x20never\x20use\x20quietgcc\x20in\x20Make.pkg,\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20more\x20references\x20to\x20GOBIN\x20and\x20GOROOT\x20(thanks\x20Christian\x20Himpel).\x0a*\x20codereview:\x20Fix\x20uploading\x20for\x20Mercurial\x201.6.3\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20consistent\x20indent,\x20cut\x20dead\x20code,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20hang\x20on\x20standard\x20hg\x20commands,\x0a\x20\x20\x20\x20\x20\x20\x20\x20print\x20status\x20when\x20tasks\x20take\x20longer\x20than\x2030\x20seconds,\x0a\x20\x20\x20\x20\x20\x20\x20\x20really\x20disable\x20codereview\x20when\x20not\x20available,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upload\x20files\x20in\x20parallel\x20(5x\x20improvement\x20on\x20large\x20CLs).\x0a*\x20crypto/hmac:\x20make\x20Sum\x20idempotent\x20(thanks\x20Jukka-Pekka\x20Kekkonen).\x0a*\x20doc:\x20add\x20links\x20to\x20more\x20German\x20docs,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20round-robin\x20flag\x20to\x20io2010\x20balance\x20example,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20a\x20bug\x20in\x20the\x20example\x20in\x20Constants\x20subsection\x20(thanks\x20James\x20Fysh),\x0a\x20\x20\x20\x20\x20\x20\x20\x20various\x20changes\x20for\x20validating\x20HTML\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20fmt:\x20delete\x20erroneous\x20sentence\x20about\x20return\x20value\x20for\x20Sprint*.\x0a*\x20gc:\x20appease\x20bison\x20version\x20running\x20on\x20FreeBSD\x20builder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20spurious\x20syntax\x20error.\x0a*\x20go/doc:\x20use\x20correct\x20escaper\x20for\x20URL.\x0a*\x20go/printer:\x20align\x20ImportPaths\x20in\x20ImportDecls\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20go/typechecker:\x202nd\x20step\x20towards\x20augmenting\x20AST\x20with\x20full\x20type\x20information.\x0a*\x20gofmt:\x20permit\x20omission\x20of\x20first\x20index\x20in\x20slice\x20expression.\x0a*\x20goinstall:\x20added\x20-a\x20flag\x20to\x20mean\x20\"all\x20remote\x20packages\"\x20(thanks\x20Scott\x20Lawrence),\x0a\x20\x20\x20\x20\x20\x20\x20\x20assume\x20go\x20binaries\x20are\x20in\x20path\x20(following\x20new\x20convention),\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20https\x20for\x20Google\x20Code\x20checkouts.\x0a*\x20gotest:\x20allow\x20make\x20test\x20of\x20cgo\x20packages\x20(without\x20make\x20install).\x0a*\x20http:\x20add\x20Date\x20to\x20server,\x20Last-Modified\x20and\x20If-Modified-Since\x20to\x20file\x20server,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20PostForm\x20function\x20to\x20post\x20url-encoded\x20key/value\x20data,\x0a\x20\x20\x20\x20\x20\x20\x20\x20obscure\x20passwords\x20in\x20return\x20value\x20of\x20URL.String\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20image:\x20introduce\x20Config\x20type\x20and\x20DecodeConfig\x20function.\x0a*\x20libcgo:\x20update\x20Makefile\x20to\x20use\x20Make.inc.\x0a*\x20list:\x20update\x20comment\x20to\x20state\x20that\x20the\x20zero\x20value\x20is\x20ready\x20to\x20use.\x0a*\x20math:\x20amd64\x20version\x20of\x20Sincos\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/bash:\x20add\x20*.go\x20completion\x20for\x20gofmt\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20misc/emacs:\x20make\x20_\x20a\x20word\x20symbol\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20misc:\x20add\x20zsh\x20completion\x20(using\x20compctl),\x0a\x20\x20\x20\x20\x20\x20\x20\x20syntax\x20highlighting\x20for\x20Fraise.app\x20(OS\x20X)\x20(thanks\x20Vincent\x20Ambo).\x0a*\x20net/textproto:\x20Handle\x20multi-line\x20responses\x20(thanks\x20Evan\x20Shaw).\x0a*\x20net:\x20add\x20LookupMX\x20(thanks\x20Corey\x20Thomasson).\x0a*\x20netchan:\x20Fix\x20race\x20condition\x20in\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20rather\x20than\x200,\x20make\x20-1\x20mean\x20infinite\x20(a\x20la\x20strings.Split\x20et\x20al),\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20acknowledgements\x20on\x20export\x20send.\x0a\x20\x20\x20\x20\x20\x20\x20\x20new\x20methods\x20Sync\x20and\x20Drain\x20for\x20clean\x20teardown.\x0a*\x20regexp:\x20interpret\x20all\x20Go\x20characer\x20escapes\x20\\a\x20\\b\x20\\f\x20\\n\x20\\r\x20\\t\x20\\v.\x0a*\x20rpc:\x20fix\x20bug\x20that\x20caused\x20private\x20methods\x20to\x20attempt\x20to\x20be\x20registered.\x0a*\x20runtime:\x20Correct\x20commonType.kind\x20values\x20to\x20match\x20compiler,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20GOOS,\x20GOARCH;\x20fix\x20FuncLine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20special\x20case\x20copy,\x20equal\x20for\x20one-word\x20interface\x20values\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20scanner:\x20fix\x20incorrect\x20reporting\x20of\x20error\x20in\x20Next\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20spec:\x20clarify\x20that\x20arrays\x20must\x20be\x20addressable\x20to\x20be\x20sliceable.\x0a*\x20template:\x20fix\x20space\x20handling\x20around\x20actions.\x0a*\x20test/solitaire:\x20an\x20exercise\x20in\x20backtracking\x20and\x20string\x20conversions.\x0a*\x20test:\x20Recognize\x20gccgo\x20error\x20messages\x20and\x20other\x20fixes.\x0a*\x20time:\x20do\x20not\x20crash\x20in\x20String\x20on\x20nil\x20Time.\x0a*\x20tutorial:\x20regenerate\x20HTML\x20to\x20pick\x20up\x20change\x20to\x20progs/file.go.\x0a*\x20websocket:\x20fix\x20missing\x20Sec-WebSocket-Protocol\x20on\x20server\x20response\x20(thanks\x20Jukka-Pekka\x20Kekkonen).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-08-25\">2010-08-25</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20changes\x20to\x20the\x20build\x20system\x20that\x20will\x20likely\x20require\x20you\x0ato\x20make\x20changes\x20to\x20your\x20environment\x20variables\x20and\x20Makefiles.\x0a\x0aAll\x20environment\x20variables\x20are\x20now\x20optional:\x0a\x20-\x20$GOOS\x20and\x20$GOARCH\x20are\x20now\x20optional;\x20their\x20values\x20should\x20now\x20be\x20inferred\x20\x0a\x20\x20\x20automatically\x20by\x20the\x20build\x20system,\x0a\x20-\x20$GOROOT\x20is\x20now\x20optional,\x20but\x20if\x20you\x20choose\x20not\x20to\x20set\x20it\x20you\x20must\x20run\x0a\x20\x20\x20'gomake'\x20instead\x20of\x20'make'\x20or\x20'gmake'\x20when\x20developing\x20Go\x20programs\x0a\x20\x20\x20using\x20the\x20conventional\x20Makefiles,\x0a\x20-\x20$GOBIN\x20remains\x20optional\x20and\x20now\x20defaults\x20to\x20$GOROOT/bin;\x0a\x20\x20\x20if\x20you\x20wish\x20to\x20use\x20this\x20new\x20default,\x20make\x20sure\x20it\x20is\x20in\x20your\x20$PATH\x0a\x20\x20\x20and\x20that\x20you\x20have\x20removed\x20the\x20existing\x20binaries\x20from\x20$HOME/bin.\x0a\x0aAs\x20a\x20result\x20of\x20these\x20changes,\x20the\x20Go\x20Makefiles\x20have\x20changed.\x20If\x20your\x20Makefiles\x0ainherit\x20from\x20the\x20Go\x20Makefiles,\x20you\x20must\x20change\x20this\x20line:\x0a\x20\x20\x20\x20include\x20../../Make.$(GOARCH)\x0ato\x20this:\x0a\x20\x20\x20\x20include\x20../../Make.inc\x0a\x0aThis\x20release\x20also\x20removes\x20the\x20deprecated\x20functions\x20in\x20regexp\x20and\x20the\x20\x0aonce\x20package.\x20Any\x20code\x20that\x20still\x20uses\x20them\x20will\x20break.\x0aSee\x20the\x20notes\x20from\x20the\x20last\x20release\x20for\x20details:\x0a\x20\x20\x20\x20http://golang.org/doc/devel/release.html#2010-08-11\x0a\x0aOther\x20changes:\x0a*\x206g:\x20better\x20registerization\x20for\x20slices,\x20strings,\x20interface\x20values\x0a*\x206l:\x20line\x20number\x20information\x20in\x20DWARF\x20format\x0a*\x20build:\x20$GOBIN\x20defaults\x20to\x20$GOROOT/bin,\x0a\x20\x20\x20\x20\x20\x20\x20\x20no\x20required\x20environment\x20variables\x0a*\x20cgo:\x20add\x20C.GoStringN\x20(thanks\x20Eric\x20Clark).\x0a*\x20codereview:\x20fix\x20issues\x20with\x20leading\x20tabs\x20in\x20CL\x20descriptions,\x0a\x20\x20\x20\x20\x20\x20\x20\x20do\x20not\x20send\x20\"Abandoned\"\x20mail\x20if\x20the\x20CL\x20has\x20not\x20been\x20mailed.\x0a*\x20crypto/ocsp:\x20add\x20missing\x20Makefile.\x0a*\x20crypto/tls:\x20client\x20certificate\x20support\x20(thanks\x20Mikkel\x20Krautz).\x0a*\x20doc:\x20update\x20gccgo\x20information\x20for\x20recent\x20changes.\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20errors\x20in\x20Effective\x20Go.\x0a*\x20fmt/print:\x20give\x20%p\x20priority,\x20analogous\x20to\x20%T,\x0a\x20\x20\x20\x20\x20\x20\x20\x20honor\x20Formatter\x20in\x20Print,\x20Println.\x0a*\x20gc:\x20fix\x20parenthesization\x20check.\x0a*\x20go/ast:\x20facility\x20for\x20printing\x20AST\x20nodes,\x0a\x20\x20\x20\x20\x20\x20\x20\x20first\x20step\x20towards\x20augmenting\x20AST\x20with\x20full\x20type\x20information.\x0a*\x20go/printer:\x20do\x20not\x20modify\x20tabwriter.Escape'd\x20text.\x0a*\x20gofmt:\x20do\x20not\x20modify\x20multi-line\x20string\x20literals,\x0a\x20\x20\x20\x20\x20\x20\x20\x20print\x20AST\x20nodes\x20by\x20setting\x20-ast\x20flag.\x0a*\x20http:\x20fix\x20typo\x20in\x20http.Request\x20documentation\x20(thanks\x20Scott\x20Lawrence)\x0a\x20\x20\x20\x20\x20\x20\x20\x20parse\x20query\x20string\x20always,\x20not\x20just\x20in\x20GET\x0a*\x20image/png:\x20support\x2016-bit\x20color.\x0a*\x20io:\x20ReadAtLeast\x20now\x20errors\x20if\x20min\x20>\x20len(buf).\x0a*\x20jsonrpc:\x20use\x20`error:\x20null`\x20for\x20success,\x20not\x20`error:\x20\"\"`.\x0a*\x20libmach:\x20implement\x20register\x20fetch\x20for\x2032-bit\x20x86\x20kernel.\x0a*\x20net:\x20make\x20IPv6\x20String\x20method\x20standards-compliant\x20(thanks\x20Mikio\x20Hara).\x0a*\x20os:\x20FileInfo.Permission()\x20now\x20returns\x20uint32\x20(thanks\x20Scott\x20Lawrence),\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20env\x20using\x20native\x20Windows\x20API\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20allow\x20PtrValue.PointTo(nil).\x0a*\x20runtime:\x20correct\x20line\x20numbers\x20for\x20.goc\x20files,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20another\x20stack\x20split\x20bug,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20freebsd/386\x20mmap.\x0a*\x20syscall:\x20regenerate\x20syscall/z*\x20files\x20for\x20linux/386,\x20linux/amd64,\x20linux/arm.\x0a*\x20tabwriter:\x20Introduce\x20a\x20new\x20flag\x20StripEscape.\x0a*\x20template:\x20fix\x20handling\x20of\x20space\x20around\x20actions,\x0a\x20\x20\x20\x20\x20\x20\x20\x20vars\x20preceded\x20by\x20white\x20space\x20parse\x20correctly\x20(thanks\x20Roger\x20Peppe).\x0a*\x20test:\x20add\x20test\x20case\x20that\x20crashes\x20gccgo.\x0a*\x20time:\x20parse\x20no\x20longer\x20requires\x20minutes\x20for\x20time\x20zone\x20(thanks\x20Jan\x20H.\x20Hosang)\x0a*\x20yacc:\x20fix\x20bounds\x20check\x20in\x20error\x20recovery.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-08-11\">2010-08-11</h2>\x0a\x0a<pre>\x0aThis\x20release\x20introduces\x20some\x20package\x20changes.\x20You\x20may\x20need\x20to\x20change\x20your\x0acode\x20if\x20you\x20use\x20the\x20once,\x20regexp,\x20image,\x20or\x20exp/draw\x20packages.\x0a\x0aThe\x20type\x20Once\x20has\x20been\x20added\x20to\x20the\x20sync\x20package.\x20The\x20new\x20sync.Once\x20will\x0asupersede\x20the\x20functionality\x20provided\x20by\x20the\x20once\x20package.\x20We\x20intend\x20to\x20remove\x0athe\x20once\x20package\x20after\x20this\x20release.\x20See:\x0a\x20\x20\x20\x20http://golang.org/pkg/sync/#Once\x0aAll\x20instances\x20of\x20once\x20in\x20the\x20standard\x20library\x20have\x20been\x20replaced\x20with\x0async.Once.\x20Reviewing\x20these\x20changes\x20may\x20help\x20you\x20modify\x20your\x20existing\x20code.\x20\x0aThe\x20relevant\x20changeset:\x0a\x20\x20\x20\x20http://code.google.com/p/go/source/detail?r=fa2c43595119\x0a\x0aA\x20new\x20set\x20of\x20methods\x20has\x20been\x20added\x20to\x20the\x20regular\x20expression\x20package,\x20regexp.\x0aThese\x20provide\x20a\x20uniformly\x20named\x20approach\x20to\x20discovering\x20the\x20matches\x20of\x20an\x0aexpression\x20within\x20a\x20piece\x20of\x20text;\x20see\x20the\x20package\x20documentation\x20for\x20details:\x20\x0a\x20\x20\x20\x20http://golang.org/pkg/regexp/\x0aThese\x20new\x20methods\x20will,\x20in\x20a\x20later\x20release,\x20replace\x20the\x20old\x20methods\x20for\x0amatching\x20substrings.\x20\x20The\x20following\x20methods\x20are\x20deprecated:\x0a\x20\x20\x20\x20Execute\x20(use\x20FindSubmatchIndex)\x0a\x20\x20\x20\x20ExecuteString\x20(use\x20FindStringSubmatchIndex)\x0a\x20\x20\x20\x20MatchStrings(use\x20FindStringSubmatch)\x0a\x20\x20\x20\x20MatchSlices\x20(use\x20FindSubmatch)\x0a\x20\x20\x20\x20AllMatches\x20(use\x20FindAll;\x20note\x20that\x20n&lt;0\x20means\x20'all\x20matches';\x20was\x20n&lt;=0)\x0a\x20\x20\x20\x20AllMatchesString\x20(use\x20FindAllString;\x20note\x20that\x20n&lt;0\x20means\x20'all\x20matches';\x20was\x20n&lt;=0)\x0a(Plus\x20there\x20are\x20ten\x20new\x20methods\x20you\x20didn't\x20know\x20you\x20wanted.)\x20\x0aPlease\x20update\x20your\x20code\x20to\x20use\x20the\x20new\x20routines\x20before\x20the\x20next\x20release.\x0a\x0aAn\x20image.Image\x20now\x20has\x20a\x20Bounds\x20rectangle,\x20where\x20previously\x20it\x20ranged\x20\x0afrom\x20(0,\x200)\x20to\x20(Width,\x20Height).\x20Loops\x20that\x20previously\x20looked\x20like:\x0a\x20\x20\x20\x20for\x20y\x20:=\x200;\x20y\x20&lt;\x20img.Height();\x20y++\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20x\x20:=\x200;\x20x\x20&lt;\x20img.Width();\x20x++\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Do\x20something\x20with\x20img.At(x,\x20y)\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0ashould\x20instead\x20be:\x0a\x20\x20\x20\x20b\x20:=\x20img.Bounds()\x0a\x20\x20\x20\x20for\x20y\x20:=\x20b.Min.Y;\x20y\x20&lt;\x20b.Max.Y;\x20y++\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20x\x20:=\x20b.Min.X;\x20x\x20&lt;\x20b.Max.X;\x20x++\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Do\x20something\x20with\x20img.At(x,\x20y)\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0aThe\x20Point\x20and\x20Rectangle\x20types\x20have\x20also\x20moved\x20from\x20exp/draw\x20to\x20image.\x0a\x0aOther\x20changes:\x0a*\x20arm:\x20bugfixes\x20and\x20syscall\x20(thanks\x20Kai\x20Backman).\x0a*\x20asn1:\x20fix\x20incorrect\x20encoding\x20of\x20signed\x20integers\x20(thanks\x20Nicholas\x20Waples).\x0a*\x20big:\x20fixes\x20to\x20bitwise\x20functions\x20(thanks\x20Evan\x20Shaw).\x0a*\x20bytes:\x20add\x20IndexRune,\x20FieldsFunc\x20and\x20To*Special\x20(thanks\x20Christian\x20Himpel).\x0a*\x20encoding/binary:\x20add\x20complex\x20(thanks\x20Roger\x20Peppe).\x0a*\x20exp/iterable:\x20add\x20UintArray\x20(thanks\x20Anschel\x20Schaffer-Cohen).\x0a*\x20godoc:\x20report\x20Status\x20404\x20if\x20a\x20pkg\x20or\x20file\x20is\x20not\x20found.\x0a*\x20gofmt:\x20better\x20reporting\x20for\x20unexpected\x20semicolon\x20errors.\x0a*\x20html:\x20new\x20package,\x20an\x20HTML\x20tokenizer.\x0a*\x20image:\x20change\x20image\x20representation\x20from\x20slice-of-slices\x20to\x20linear\x20buffer,\x0a\x20\x20\x20\x20\x20\x20\x20\x20introduce\x20Decode\x20and\x20RegisterFormat,\x0a\x20\x20\x20\x20\x20\x20\x20\x20introduce\x20Transparent\x20and\x20Opaque,\x0a\x20\x20\x20\x20\x20\x20\x20\x20replace\x20Width\x20and\x20Height\x20by\x20Bounds,\x20add\x20the\x20Point\x20and\x20Rect\x20types.\x0a*\x20libbio:\x20fix\x20Bprint\x20to\x20address\x206g\x20issues\x20with\x20large\x20data\x20structures.\x0a*\x20math:\x20fix\x20amd64\x20Hypot\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20net/textproto:\x20new\x20package,\x20with\x20example\x20net/dict.\x0a*\x20os:\x20fix\x20ForkExec()\x20handling\x20of\x20envv\x20==\x20nil\x20(thanks\x20Alex\x20Brainman).\x0a*\x20png:\x20grayscale\x20support\x20(thanks\x20Mathieu\x20Lonjaret).\x0a*\x20regexp:\x20document\x20that\x20backslashes\x20are\x20the\x20escape\x20character.\x0a*\x20rpc:\x20catch\x20errors\x20from\x20ReadResponseBody.\x0a*\x20runtime:\x20memory\x20free\x20fix\x20(thanks\x20Alex\x20Brainman).\x0a*\x20template:\x20add\x20ParseFile\x20method\x20to\x20template.Template.\x0a*\x20test/peano:\x20use\x20directly\x20recursive\x20type\x20def.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-08-04\">2010-08-04</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20change\x20to\x20os.Open\x20(and\x20co.).\x20The\x20file\x20permission\x0aargument\x20has\x20been\x20changed\x20to\x20a\x20uint32.\x20Your\x20code\x20may\x20require\x20changes\x20-\x20a\x20simple\x0aconversion\x20operation\x20at\x20most.\x0a\x0aOther\x20changes:\x0a*\x20amd64:\x20use\x20segment\x20memory\x20for\x20thread-local\x20storage.\x0a*\x20arm:\x20add\x20gdb\x20support\x20to\x20android\x20launcher\x20script,\x0a\x20\x20\x20\x20\x20\x20\x20\x20bugfixes\x20(stack\x20clobbering,\x20indices),\x0a\x20\x20\x20\x20\x20\x20\x20\x20disable\x20another\x20flaky\x20test,\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20old\x20qemu\x20dependency\x20from\x20gotest.\x0a*\x20bufio:\x20introduce\x20Peek.\x0a*\x20bytes:\x20added\x20test\x20case\x20for\x20explode\x20with\x20blank\x20string\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20cgo:\x20correct\x20multiple\x20return\x20value\x20function\x20invocations\x20(thanks\x20Christian\x20Himpel).\x0a*\x20crypto/x509:\x20unwrap\x20Subject\x20Key\x20Identifier\x20(thanks\x20Adam\x20Langley).\x0a*\x20gc:\x20index\x20bounds\x20tests\x20and\x20other\x20fixes.\x0a*\x20gofmt/go/parser:\x20strengthen\x20syntax\x20checks.\x0a*\x20goinstall:\x20check\x20for\x20error\x20from\x20exec.*Cmd.Wait()\x20(thanks\x20Alex\x20Brainman).\x0a*\x20image/png:\x20use\x20image-specific\x20methods\x20for\x20checking\x20opacity.\x0a*\x20image:\x20introduce\x20Gray\x20and\x20Gray16\x20types,\x0a\x20\x20\x20\x20\x20\x20\x20\x20remove\x20the\x20named\x20colors\x20except\x20for\x20Black\x20and\x20White.\x0a*\x20json:\x20object\x20members\x20must\x20have\x20a\x20value\x20(thanks\x20Anthony\x20Martin).\x0a*\x20misc/vim:\x20highlight\x20misspelled\x20words\x20only\x20in\x20comments\x20(thanks\x20Christian\x20Himpel).\x0a*\x20os:\x20Null\x20device\x20(thanks\x20Peter\x20Mundy).\x0a*\x20runtime:\x20do\x20not\x20fall\x20through\x20in\x20SIGBUS/SIGSEGV.\x0a*\x20strings:\x20fix\x20Split(\"\",\x20\"\",\x20-1)\x20(thanks\x20Scott\x20Lawrence).\x0a*\x20syscall:\x20make\x20go\x20errors\x20not\x20clash\x20with\x20windows\x20errors\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/run:\x20diff\x20old\x20new,\x0a*\x20websocket:\x20correct\x20challenge\x20response\x20(thanks\x20Tarmigan\x20Casebolt),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20bug\x20involving\x20spaces\x20in\x20header\x20keys\x20(thanks\x20Bill\x20Neubauer).\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-07-29\">2010-07-29</h2>\x0a\x0a<pre>\x0a*\x205g:\x20more\x20soft\x20float\x20support\x20and\x20several\x20bugfixes.\x0a*\x20asn1:\x20Enumerated,\x20Flag\x20and\x20GeneralizedTime\x20support.\x0a*\x20build:\x20clean.bash\x20to\x20check\x20that\x20GOOS\x20and\x20GOARCH\x20are\x20set.\x0a*\x20bytes:\x20add\x20IndexFunc\x20and\x20LastIndexFunc\x20(thanks\x20Fazlul\x20Shahriar),\x0a\x09add\x20Title.\x0a*\x20cgo:\x20If\x20CC\x20is\x20set\x20in\x20environment,\x20use\x20it\x20rather\x20than\x20\"gcc\",\x0a\x09use\x20new\x20command\x20line\x20syntax:\x20--\x20separates\x20cgo\x20flags\x20from\x20gcc\x20flags.\x0a*\x20codereview:\x20avoid\x20crash\x20if\x20no\x20config,\x0a\x09don't\x20run\x20gofmt\x20with\x20an\x20empty\x20file\x20list,\x0a\x09make\x20'hg\x20submit'\x20work\x20with\x20Mercurial\x201.6.\x0a*\x20crypto/ocsp:\x20add\x20package\x20to\x20parse\x20OCSP\x20responses.\x0a*\x20crypto/tls:\x20add\x20client-side\x20SNI\x20support\x20and\x20PeerCertificates.\x0a*\x20exp/bignum:\x20delete\x20package\x20-\x20functionality\x20subsumed\x20by\x20package\x20big.\x0a*\x20fmt.Print:\x20fix\x20bug\x20in\x20placement\x20of\x20spaces\x20introduced\x20when\x20...T\x20went\x20in.\x0a*\x20fmt.Scanf:\x20handle\x20trailing\x20spaces.\x0a*\x20gc:\x20fix\x20smaller-than-pointer-sized\x20receivers\x20in\x20interfaces,\x0a\x09floating\x20point\x20precision/normalization\x20fixes,\x0a\x09graceful\x20exit\x20on\x20seg\x20fault,\x0a\x09import\x20dot\x20shadowing\x20bug,\x0a\x09many\x20fixes\x20including\x20better\x20handling\x20of\x20invalid\x20input,\x0a\x09print\x20error\x20detail\x20about\x20failure\x20to\x20open\x20import.\x0a*\x20gccgo_install.html:\x20add\x20description\x20of\x20the\x20port\x20to\x20RTEMS\x20(thanks\x20Vinu\x20Rajashekhar).\x0a*\x20gobs:\x20fix\x20bug\x20in\x20singleton\x20arrays.\x0a*\x20godoc:\x20display\x20synopses\x20for\x20all\x20packages\x20that\x20have\x20some\x20kind\x20of\x20documentation..\x0a*\x20gofmt:\x20fix\x20some\x20linebreak\x20issues.\x0a*\x20http:\x20add\x20https\x20client\x20support\x20(thanks\x20Fazlul\x20Shahriar),\x0a\x09write\x20body\x20when\x20content\x20length\x20unknown\x20(thanks\x20James\x20Whitehead).\x0a*\x20io:\x20MultiReader\x20and\x20MultiWriter\x20(thanks\x20Brad\x20Fitzpatrick),\x0a\x09fix\x20another\x20race\x20condition\x20in\x20Pipes.\x0a*\x20ld:\x20many\x20fixes\x20including\x20better\x20handling\x20of\x20invalid\x20input.\x0a*\x20libmach:\x20correct\x20handling\x20of\x20.5\x20files\x20with\x20D_REGREG\x20addresses.\x0a*\x20linux/386:\x20use\x20Xen-friendly\x20ELF\x20TLS\x20instruction\x20sequence.\x0a*\x20mime:\x20add\x20AddExtensionType\x20(thanks\x20Yuusei\x20Kuwana).\x0a*\x20misc/vim:\x20syntax\x20file\x20recognizes\x20constants\x20like\x201e9\x20(thanks\x20Petar\x20Maymounkov).\x0a*\x20net:\x20TCPConn.SetNoDelay,\x20back\x20by\x20popular\x20demand.\x0a*\x20net(windows):\x20fix\x20crashing\x20Read/Write\x20when\x20passed\x20empty\x20slice\x20on\x20(thanks\x20Alex\x20Brainman),\x0a\x09implement\x20LookupHost/Port/SRV\x20(thanks\x20Wei\x20Guangjing),\x0a\x09properly\x20handle\x20EOF\x20in\x20(*netFD).Read()\x20(thanks\x20Alex\x20Brainman).\x0a*\x20runtime:\x20fix\x20bug\x20introduced\x20in\x20revision\x204a01b8d28570\x20(thanks\x20Alex\x20Brainman),\x0a\x09rename\x20cgo2c,\x20*.cgo\x20to\x20goc2c,\x20*.goc\x20(thanks\x20Peter\x20Mundy).\x0a*\x20scanner:\x20better\x20comment.\x0a*\x20strings:\x20add\x20Title.\x0a*\x20syscall:\x20add\x20ForkExec,\x20Syscall12\x20on\x20Windows\x20(thanks\x20Daniel\x20Theophanes),\x0a\x09improve\x20windows\x20errno\x20handling\x20(thanks\x20Alex\x20Brainman).\x0a*\x20syscall(windows):\x20fix\x20FormatMessage\x20(thanks\x20Peter\x20Mundy),\x0a\x09implement\x20Pipe()\x20(thanks\x20Wei\x20Guangjing).\x0a*\x20time:\x20fix\x20parsing\x20of\x20minutes\x20in\x20time\x20zones.\x0a*\x20utf16(windows):\x20fix\x20cyclic\x20dependency\x20when\x20testing\x20(thanks\x20Peter\x20Mundy).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-07-14\">2010-07-14</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20package\x20change.\x20In\x20container/vector,\x20the\x20Iter\x20method\x0ahas\x20been\x20removed\x20from\x20the\x20Vector,\x20IntVector,\x20and\x20StringVector\x20types.\x20Also,\x20the\x0aData\x20method\x20has\x20been\x20renamed\x20to\x20Copy\x20to\x20better\x20express\x20its\x20actual\x20behavior.\x0aNow\x20that\x20Vector\x20is\x20just\x20a\x20slice,\x20any\x20for\x20loops\x20ranging\x20over\x20v.Iter()\x20or\x0av.Data()\x20can\x20be\x20changed\x20to\x20range\x20over\x20v\x20instead.\x0a\x0aOther\x20changes:\x0a*\x20big:\x20Improvements\x20to\x20Rat.SetString\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20sign,\x20abs,\x20Rat.IsInt.\x0a*\x20cgo:\x20various\x20bug\x20fixes.\x0a*\x20codereview:\x20Fix\x20for\x20Mercurial\x20>=\x201.6\x20(thanks\x20Evan\x20Shaw).\x0a*\x20crypto/rand:\x20add\x20Windows\x20implementation\x20(thanks\x20Peter\x20Mundy).\x0a*\x20crypto/tls:\x20make\x20HTTPS\x20servers\x20easier,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20client\x20OCSP\x20stapling\x20support.\x0a*\x20exp/eval:\x20converted\x20from\x20bignum\x20to\x20big\x20(thanks\x20Evan\x20Shaw).\x0a*\x20gc:\x20implement\x20new\x20len\x20spec,\x20range\x20bug\x20fix,\x20optimization.\x0a*\x20go/parser:\x20require\x20that\x20'...'\x20parameters\x20are\x20followed\x20by\x20a\x20type.\x0a*\x20http:\x20fix\x20ParseURL\x20to\x20handle\x20//relative_path\x20properly.\x0a*\x20io:\x20fix\x20SectionReader\x20Seek\x20to\x20seek\x20backwards\x20(thanks\x20Peter\x20Mundy).\x0a*\x20json:\x20Add\x20HTMLEscape\x20(thanks\x20Micah\x20Stetson).\x0a*\x20ld:\x20bug\x20fixes.\x0a*\x20math:\x20amd64\x20version\x20of\x20log\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20mime/multipart:\x20new\x20package\x20to\x20parse\x20multipart\x20MIME\x20messages\x0a\x20\x20\x20\x20\x20\x20\x20\x20and\x20HTTP\x20multipart/form-data\x20support.\x0a*\x20os:\x20use\x20TempFile\x20with\x20default\x20TempDir\x20for\x20test\x20files\x20(thanks\x20Peter\x20Mundy).\x0a*\x20runtime/tiny:\x20add\x20docs\x20for\x20additional\x20VMs,\x20fix\x20build\x20(thanks\x20Markus\x20Duft).\x0a*\x20runtime:\x20better\x20error\x20for\x20send/recv\x20on\x20nil\x20channel.\x0a*\x20spec:\x20clarification\x20of\x20channel\x20close(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20lock\x20down\x20some\x20details\x20about\x20channels\x20and\x20select,\x0a\x20\x20\x20\x20\x20\x20\x20\x20restrict\x20when\x20len(x)\x20is\x20constant,\x0a\x20\x20\x20\x20\x20\x20\x20\x20specify\x20len/cap\x20for\x20nil\x20slices,\x20maps,\x20and\x20channels.\x0a*\x20windows:\x20append\x20.exe\x20to\x20binary\x20names\x20(thanks\x20Joe\x20Poirier).\x0a</pre>\x0a\x0a<h2\x20id=\"2010-07-01\">2010-07-01</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20some\x20package\x20changes\x20that\x20may\x20require\x20changes\x20to\x20\x0aclient\x20code.\x0a\x0aThe\x20Split\x20function\x20in\x20the\x20bytes\x20and\x20strings\x20packages\x20has\x20been\x20changed.\x0aThe\x20count\x20argument,\x20which\x20limits\x20the\x20size\x20of\x20the\x20return,\x20previously\x20treated\x0azero\x20as\x20unbounded.\x20It\x20now\x20treats\x200\x20as\x200,\x20and\x20will\x20return\x20an\x20empty\x20slice.\x20\x20\x0aTo\x20request\x20unbounded\x20results,\x20use\x20-1\x20(or\x20some\x20other\x20negative\x20value).\x0aThe\x20new\x20Replace\x20functions\x20in\x20bytes\x20and\x20strings\x20share\x20this\x20behavior.\x0aThis\x20may\x20require\x20you\x20change\x20your\x20existing\x20code.\x0a\x0aThe\x20gob\x20package\x20now\x20allows\x20the\x20transmission\x20of\x20non-struct\x20values\x20at\x20the\x0atop-level.\x20As\x20a\x20result,\x20the\x20rpc\x20and\x20netchan\x20packages\x20have\x20fewer\x20restrictions\x0aon\x20the\x20types\x20they\x20can\x20handle.\x20\x20For\x20example,\x20netchan\x20can\x20now\x20share\x20a\x20chan\x20int.\x0a\x0aThe\x20release\x20also\x20includes\x20a\x20Code\x20Walk:\x20\"Share\x20Memory\x20By\x20Communicating\".\x0aIt\x20describes\x20an\x20idiomatic\x20Go\x20program\x20that\x20uses\x20goroutines\x20and\x20channels:\x0a\x09http://golang.org/doc/codewalk/sharemem/\x0a\x0aThere\x20is\x20now\x20a\x20Projects\x20page\x20on\x20the\x20Go\x20Dashboard\x20that\x20lists\x20Go\x20programs,\x20\x0atools,\x20and\x20libraries:\x0a\x09http://godashboard.appspot.com/project\x0a\x0aOther\x20changes:\x0a*\x206a,\x206l:\x20bug\x20fixes.\x0a*\x20bytes,\x20strings:\x20add\x20Replace.\x0a*\x20cgo:\x20use\x20slash-free\x20relative\x20paths\x20for\x20.so\x20references.\x0a*\x20cmath:\x20correct\x20IsNaN\x20for\x20argument\x20cmplx(Inf,\x20NaN)\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20codereview:\x20allow\x20multiple\x20email\x20addresses\x20in\x20CONTRIBUTORS.\x0a*\x20doc/codewalk:\x20add\x20Share\x20Memory\x20By\x20Communicating.\x0a*\x20exp/draw/x11:\x20implement\x20the\x20mapping\x20from\x20keycodes\x20to\x20keysyms.\x0a*\x20fmt:\x20Printf:\x20fix\x20bug\x20in\x20handling\x20of\x20%#v,\x20allow\x20other\x20verbs\x20for\x20slices\x0a\x20\x20\x20\x20\x20\x20\x20\x20Scan:\x20fix\x20handling\x20of\x20EOFs.\x0a*\x20gc:\x20bug\x20fixes\x20and\x20optimizations.\x0a*\x20gob:\x20add\x20DecodeValue\x20and\x20EncodeValue,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20support\x20for\x20complex\x20numbers.\x0a*\x20goinstall:\x20support\x20for\x20Bazaar+Launchpad\x20(thanks\x20Gustavo\x20Niemeyer).\x0a*\x20io/ioutil:\x20add\x20TempFile\x20for\x20Windows\x20(thanks\x20Peter\x20Mundy).\x0a*\x20ld:\x20add\x20-u\x20flag\x20to\x20check\x20safe\x20bits;\x20discard\x20old\x20-u,\x20-x\x20flags.\x0a*\x20math:\x20amd64\x20versions\x20of\x20Exp\x20and\x20Fabs\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/vim:\x20always\x20override\x20filetype\x20detection\x20for\x20.go\x20files.\x0a*\x20net:\x20add\x20support\x20for\x20DNS\x20SRV\x20requests\x20(thanks\x20Kirklin\x20McDonald),\x0a\x20\x20\x20\x20\x20\x20\x20\x20initial\x20attempt\x20to\x20implement\x20Windows\x20version\x20(thanks\x20Alex\x20Brainman).\x0a*\x20netchan:\x20allow\x20chan\x20of\x20basic\x20types\x20now\x20that\x20gob\x20can\x20handle\x20such,\x0a\x20\x20\x20\x20\x20\x20\x20\x20eliminate\x20the\x20need\x20for\x20a\x20pointer\x20value\x20in\x20Import\x20and\x20Export.\x0a*\x20os/signal:\x20only\x20catch\x20all\x20signals\x20if\x20os/signal\x20package\x20imported.\x0a*\x20regexp:\x20bug\x20fix:\x20need\x20to\x20track\x20whether\x20match\x20begins\x20with\x20fixed\x20prefix.\x0a*\x20rpc:\x20allow\x20non-struct\x20args\x20and\x20reply\x20(they\x20must\x20still\x20be\x20pointers).\x0a*\x20runtime:\x20bug\x20fixes\x20and\x20reorganization.\x0a*\x20strconv:\x20fix\x20bugs\x20in\x20floating-point\x20and\x20base\x202\x20conversions\x0a*\x20syscall:\x20add\x20syscall_bsd.go\x20to\x20zsycall_freebsd_386.go\x20(thanks\x20Peter\x20Mundy),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20socketpair\x20(thanks\x20Ivan\x20Krasin).\x0a*\x20time:\x20implement\x20time\x20zones\x20for\x20Windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20x509:\x20support\x20non-self-signed\x20certs.\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-06-21\">2010-06-21</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20language\x20change.\x20The\x20\"...\"\x20function\x20parameter\x20form\x20is\x0agone;\x20\"...T\"\x20remains.\x20Typically,\x20\"...interface{}\"\x20can\x20be\x20used\x20instead\x20of\x20\"...\".\x0a\x0aThe\x20implementation\x20of\x20Printf\x20has\x20changed\x20in\x20a\x20way\x20that\x20subtly\x20affects\x20its\x0ahandling\x20of\x20the\x20fmt.Stringer\x20interface.\x20You\x20may\x20need\x20to\x20make\x20changes\x20to\x20your\x0acode.\x20For\x20details,\x20see:\x0a\x20\x20\x20\x20\x20\x20\x20\x20https://groups.google.com/group/golang-nuts/msg/6fffba90a3e3dc06\x0a\x0aThe\x20reflect\x20package\x20has\x20been\x20changed.\x20If\x20you\x20have\x20code\x20that\x20uses\x20reflect,\x20\x0ait\x20will\x20need\x20to\x20be\x20updated.\x20For\x20details,\x20see:\x0a\x20\x20\x20\x20\x20\x20\x20\x20https://groups.google.com/group/golang-nuts/msg/7a93d07c590e7beb\x0a\x0aOther\x20changes:\x0a*\x208l:\x20correct\x20test\x20for\x20sp\x20==\x20top\x20of\x20stack\x20in\x208l\x20-K\x20code.\x0a*\x20asn1:\x20allow\x20'*'\x20in\x20PrintableString.\x0a*\x20bytes.Buffer.ReadFrom:\x20fix\x20bug.\x0a*\x20codereview:\x20avoid\x20exception\x20in\x20match\x20(thanks\x20Paolo\x20Giarrusso).\x0a*\x20complex\x20divide:\x20match\x20C99\x20implementation.\x0a*\x20exp/draw:\x20small\x20draw.drawGlyphOver\x20optimization.\x0a*\x20fmt:\x20Print*:\x20reimplement\x20to\x20switch\x20on\x20type\x20first,\x0a\x20\x20\x20\x20\x20\x20\x20\x20Scanf:\x20improve\x20error\x20message\x20when\x20input\x20does\x20not\x20match\x20format.\x0a*\x20gc:\x20better\x20error\x20messages\x20for\x20interface\x20failures,\x20conversions,\x20undefined\x20symbols.\x0a*\x20go/scanner:\x20report\x20illegal\x20escape\x20sequences.\x0a*\x20gob:\x20substitute\x20slice\x20for\x20map.\x0a*\x20goinstall:\x20process\x20dependencies\x20for\x20package\x20main\x20(thanks\x20Roger\x20Peppe).\x0a*\x20gopack:\x20add\x20S\x20flag\x20to\x20force\x20marking\x20a\x20package\x20as\x20safe,\x0a\x20\x20\x20\x20\x20\x20\x20\x20simplify\x20go\x20metadata\x20code.\x0a*\x20html:\x20sync\x20testdata/webkit\x20to\x20match\x20WebKit\x20tip.\x0a*\x20http:\x20reply\x20to\x20Expect\x20100-continue\x20requests\x20automatically\x20(thanks\x20Brad\x20Fitzpatrick).\x0a*\x20image:\x20add\x20an\x20Alpha16\x20type.\x0a*\x20ld:\x20pad\x20Go\x20symbol\x20table\x20out\x20to\x20page\x20boundary\x20(fixes\x20cgo\x20crash).\x0a*\x20misc/vim:\x20reorganize\x20plugin\x20to\x20be\x20easier\x20to\x20use\x20(thanks\x20James\x20Whitehead).\x0a*\x20path:\x20add\x20Base,\x20analogous\x20to\x20Unix\x20basename.\x0a*\x20pkg/Makefile:\x20allow\x20DISABLE_NET_TESTS=1\x20to\x20disable\x20network\x20tests.\x0a*\x20reflect:\x20add\x20Kind,\x20Type.Bits,\x20remove\x20Int8Type,\x20Int8Value,\x20etc.\x0a*\x20runtime:\x20additional\x20Windows\x20support\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20fault\x20for\x2016-bit\x20divide\x20on\x20Leopard,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20386\x20signal\x20handler\x20bug.\x0a*\x20strconv:\x20add\x20AtofN,\x20FtoaN.\x0a*\x20string:\x20add\x20IndexFunc\x20and\x20LastIndexFunc\x20(thanks\x20Roger\x20Peppe).\x0a*\x20syslog:\x20use\x20local\x20network\x20for\x20tests.\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-06-09\">2010-06-09</h2>\x0a\x0a<pre>\x0aThis\x20release\x20contains\x20many\x20fixes\x20and\x20improvements,\x20including\x20several\x0aclarifications\x20and\x20consolidations\x20to\x20the\x20Language\x20Specification.\x0a\x0aThe\x20type\x20checking\x20rules\x20around\x20assignments\x20and\x20conversions\x20are\x20simpler\x20but\x20more\x0arestrictive:\x20assignments\x20no\x20longer\x20convert\x20implicitly\x20from\x20*[10]int\x20to\x20[]int\x0a(write\x20x[0:]\x20instead\x20of\x20&amp;x),\x20and\x20conversions\x20can\x20no\x20longer\x20change\x20the\x20names\x20of\x0atypes\x20inside\x20composite\x20types.\x0a\x0aThe\x20fmt\x20package\x20now\x20includes\x20flexible\x20type-driven\x20(fmt.Scan)\x20and\x20\x0aformat-driven\x20(fmt.Scanf)\x20scanners\x20for\x20all\x20basic\x20types.\x0a\x0a*\x20big:\x20bug\x20fix\x20for\x20Quo\x20aliasing\x20problem.\x0a*\x20bufio:\x20change\x20ReadSlice\x20to\x20match\x20description.\x0a*\x20cgo:\x20bug\x20fixes.\x0a*\x20doc:\x20add\x20Google\x20I/O\x20talk\x20and\x20programs,\x0a\x20\x20\x20\x20\x20\x20\x20\x20codereview\x20+\x20Mercurial\x20Queues\x20info\x20(thanks\x20Peter\x20Williams).\x0a*\x20exp/draw:\x20Draw\x20fast\x20paths\x20for\x20the\x20Over\x20operator,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20Rectangle.Eq\x20and\x20Point.In,\x20fix\x20Rectangle.Clip\x20(thanks\x20Roger\x20Peppe).\x0a*\x20fmt:\x20Scan\x20fixes\x20and\x20improvements.\x0a*\x20gc:\x20backslash\x20newline\x20is\x20not\x20a\x20legal\x20escape\x20sequence\x20in\x20strings,\x0a\x20\x20\x20\x20\x20\x20\x20\x20better\x20error\x20message\x20when\x20~\x20operator\x20is\x20found,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20export\x20of\x20complex\x20types,\x0a\x20\x20\x20\x20\x20\x20\x20\x20new\x20typechecking\x20rules.\x0a*\x20go/parser:\x20correct\x20position\x20of\x20empty\x20statement\x20';'.\x0a*\x20gofmt:\x20fix\x20test\x20script.\x0a*\x20goinstall:\x20use\x20'git\x20pull'\x20instead\x20of\x20'git\x20checkout'\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20http:\x20add\x20Head\x20function\x20for\x20making\x20HTTP\x20HEAD\x20requests,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20status\x20304\x20correctly.\x0a*\x20image:\x20add\x20Opaque\x20method\x20to\x20the\x20image\x20types.\x0a\x20\x20\x20\x20\x20\x20\x20\x20make\x20Color.RGBA\x20return\x2016\x20bit\x20color\x20instead\x20of\x2032\x20bit\x20color.\x0a*\x20io/ioutil:\x20add\x20TempFile.\x0a*\x20math:\x20Pow\x20special\x20cases\x20and\x20additional\x20tests\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20netchan:\x20improve\x20closing\x20and\x20shutdown.\x0a*\x20os:\x20implement\x20os.FileInfo.*time_ns\x20for\x20windows\x20(thanks\x20Alex\x20Brainman).\x0a*\x20os/signal:\x20correct\x20the\x20regexp\x20for\x20finding\x20Unix\x20signal\x20names\x20(thanks\x20Vinu\x20Rajashekhar).\x0a*\x20regexp:\x20optimizations\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20runtime:\x20fix\x20printing\x20-Inf\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20finish\x20pchw\x20-&gt;\x20tiny,\x20added\x20gettime\x20for\x20tiny\x20(thanks\x20Daniel\x20Theophanes).\x0a*\x20spec:\x20clean-ups\x20and\x20consolidation.\x0a*\x20syscall:\x20additional\x20Windows\x20compatibility\x20fixes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/bench:\x20added\x20regex-dna-parallel.go\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20vector:\x20type-specific\x20Do\x20functions\x20now\x20take\x20f(type)\x20(thanks\x20Michael\x20Hoisie).\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-05-27\">2010-05-27</h2>\x0a\x0a<pre>\x0aA\x20sizeable\x20release,\x20including\x20standard\x20library\x20improvements\x20and\x20a\x20slew\x20of\x0acompiler\x20bug\x20fixes.\x20The\x20three-week\x20interval\x20was\x20largely\x20caused\x20by\x20the\x20team\x0apreparing\x20for\x20Google\x20I/O.\x20\x0a\x0a*\x20big:\x20add\x20Rat\x20type\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20new\x20features,\x20much\x20performance\x20tuning,\x20cleanups,\x20and\x20more\x20tests.\x0a*\x20bignum:\x20deprecate\x20by\x20moving\x20into\x20exp\x20directory.\x0a*\x20build:\x20allow\x20MAKEFLAGS\x20to\x20be\x20set\x20outside\x20the\x20build\x20scripts\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20bytes:\x20add\x20Trim,\x20TrimLeft,\x20TrimRight,\x20and\x20generic\x20functions\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20cgo:\x20fix\x20to\x20permit\x20cgo\x20callbacks\x20from\x20init\x20code.\x0a*\x20cmath:\x20update\x20range\x20of\x20Phase\x20and\x20Polar\x20due\x20to\x20signed\x20zero\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20codereview:\x20work\x20better\x20with\x20mq\x20(thanks\x20Peter\x20Williams).\x0a*\x20compress:\x20renamings\x0a\x09NewDeflater\x20-&gt;\x20NewWriter\x0a\x09NewInflater\x20-&gt;\x20NewReader\x0a\x09Deflater\x20-&gt;\x20Compressor\x0a\x09Inflater\x20-&gt;\x20Decompressor\x0a*\x20exp/draw/x11:\x20respect\x20$XAUTHORITY,\x0a\x20\x20\x20\x20\x20\x20\x20\x20treat\x20$DISPLAY\x20the\x20same\x20way\x20x-go-bindings\x20does.\x0a*\x20exp/draw:\x20fast\x20path\x20for\x20glyph\x20images,\x20other\x20optimizations,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Rectangle.Canon\x20(thanks\x20Roger\x20Peppe).\x0a*\x20fmt:\x20Scan,\x20Scanln:\x20Start\x20of\x20a\x20simple\x20scanning\x20API\x20in\x20the\x20fmt\x20package,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20Printf\x20crash\x20when\x20given\x20an\x20extra\x20nil\x20argument\x20(thanks\x20Roger\x20Peppe).\x0a*\x20gc:\x20better\x20error\x20when\x20computing\x20remainder\x20of\x20non-int\x20(thanks\x20Evan\x20Shaw),\x0a\x20\x20\x20\x20\x20\x20\x20\x20disallow\x20middot\x20in\x20Go\x20programs,\x0a\x20\x20\x20\x20\x20\x20\x20\x20distinguish\x20array,\x20slice\x20literal\x20in\x20error\x20messages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20shift/reduce\x20conflict\x20in\x20go.y\x20export\x20syntax,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20unsafe.Sizeof\x20on\x20ideal\x20constants,\x0a\x20\x20\x20\x20\x20\x20\x20\x20handle\x20use\x20of\x20builtin\x20function\x20outside\x20function\x20call,\x0a\x20\x20\x20\x20\x20\x20\x20\x20many\x20other\x20bug\x20fixes.\x0a*\x20gob:\x20add\x20support\x20for\x20maps,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20test\x20for\x20indirect\x20maps,\x20slices,\x20arrays.\x0a*\x20godoc:\x20collect\x20package\x20comments\x20from\x20all\x20package\x20files.\x0a*\x20gofmt:\x20don't\x20lose\x20mandatory\x20semicolons,\x0a\x20\x20\x20\x20\x20\x20\x20\x20exclude\x20test\x20w/\x20illegal\x20syntax\x20from\x20test\x20cases,\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20printing\x20of\x20labels.\x0a*\x20http:\x20prevent\x20crash\x20if\x20remote\x20server\x20is\x20not\x20responding\x20with\x20\"HTTP/\".\x0a*\x20json:\x20accept\x20escaped\x20slash\x20in\x20string\x20scanner\x20(thanks\x20Michael\x20Hoisie),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20array\x20-&gt;\x20non-array\x20decoding.\x0a*\x20libmach:\x20skip\x20__nl_symbol_ptr\x20section\x20on\x20OS\x20X.\x0a*\x20math:\x20amd64\x20versions\x20of\x20Fdim,\x20Fmax,\x20Fmin,\x0a\x20\x20\x20\x20\x20\x20\x20\x20signed\x20zero\x20Sqrt\x20special\x20case\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/kate:\x20convert\x20isn't\x20a\x20built\x20in\x20function\x20(thanks\x20Evan\x20Shaw).\x0a*\x20net:\x20implement\x20BindToDevice,\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20raw\x20sockets\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20netFD:\x20fix\x20race\x20between\x20Close\x20and\x20Read/Write\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20os:\x20add\x20Chtimes\x20function\x20(thanks\x20Brad\x20Fitzpatrick).\x0a*\x20pkg/Makefile:\x20add\x20netchan\x20to\x20standard\x20package\x20list.\x0a*\x20runtime:\x20GOMAXPROCS\x20returns\x20previous\x20value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20allow\x20large\x20map\x20values,\x0a\x20\x20\x20\x20\x20\x20\x20\x20avoid\x20allocation\x20for\x20fixed\x20strings,\x0a\x20\x20\x20\x20\x20\x20\x20\x20correct\x20tracebacks\x20for\x20nascent\x20goroutines,\x20even\x20closures,\x0a\x20\x20\x20\x20\x20\x20\x20\x20free\x20old\x20hashmap\x20pieces\x20during\x20resizing.\x0a*\x20spec:\x20added\x20imaginary\x20literal\x20to\x20semicolon\x20rules\x20(was\x20missing),\x0a\x20\x20\x20\x20\x20\x20\x20\x20fix\x20and\x20clarify\x20syntax\x20of\x20conversions,\x0a\x20\x20\x20\x20\x20\x20\x20\x20simplify\x20section\x20on\x20channel\x20types,\x0a\x20\x20\x20\x20\x20\x20\x20\x20other\x20minor\x20tweaks.\x0a*\x20strconv:\x20Btoui64\x20optimizations\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20strings:\x20use\x20copy\x20instead\x20of\x20for\x20loop\x20in\x20Map\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20syscall:\x20implement\x20BindToDevice\x20(thanks\x20Christopher\x20Wedgwood),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20Utimes\x20on\x20Darwin/FreeBSD,\x20add\x20Futimes\x20everywhere,\x0a\x20\x20\x20\x20\x20\x20\x20\x20regenerate\x20syscalls\x20for\x20some\x20platforms.\x0a*\x20template:\x20regularize\x20name\x20lookups\x20of\x20interfaces,\x20pointers,\x20and\x20methods.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-05-04\">2010-05-04</h2>\x0a\x0a<pre>\x0aIn\x20this\x20release\x20we\x20renamed\x20the\x20Windows\x20OS\x20target\x20from\x20'mingw'\x20to\x20'windows'.\x0aIf\x20you\x20are\x20currently\x20building\x20for\x20'mingw'\x20you\x20should\x20set\x20GOOS=windows\x20instead.\x0a\x0a*\x205l,\x206l,\x208l,\x20runtime:\x20make\x20-s\x20binaries\x20work.\x0a*\x205l,\x206l,\x208l:\x20change\x20ELF\x20header\x20so\x20that\x20strip\x20doesn't\x20destroy\x20binary.\x0a*\x208l:\x20fix\x20absolute\x20path\x20detection\x20on\x20Windows.\x0a*\x20big:\x20new\x20functions,\x20optimizations,\x20and\x20cleanups,\x0a\x09add\x20bitwise\x20methods\x20for\x20Int\x20(thanks\x20Evan\x20Shaw).\x0a*\x20bytes:\x20Change\x20IndexAny\x20to\x20look\x20for\x20UTF-8\x20encoded\x20characters.\x0a*\x20darwin:\x20bsdthread_create\x20can\x20fail;\x20print\x20good\x20error.\x0a*\x20fmt:\x20%T\x20missing\x20print\x20&lt;nil&gt;\x20for\x20nil\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20gc:\x20many\x20fixes.\x0a*\x20misc/cgo/gmp:\x20fix\x20bug\x20in\x20SetString.\x0a*\x20net:\x20fix\x20resolv.conf\x20EOF\x20without\x20newline\x20bug\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20spec:\x20some\x20small\x20clarifications\x20(no\x20language\x20changes).\x0a*\x20syscall:\x20add\x20EWOULDBLOCK\x20to\x20sycall_nacl.go,\x0a\x09force\x20O_LARGEFILE\x20in\x20Linux\x20open\x20system\x20call,\x0a\x09handle\x20EOF\x20on\x20pipe\x20-\x20special\x20case\x20on\x20Windows\x20(thanks\x20Alex\x20Brainman),\x0a\x09mingw\x20Sleep\x20(thanks\x20Joe\x20Poirier).\x0a*\x20test/bench:\x20import\x20new\x20fasta\x20C\x20reference,\x20update\x20Go,\x20optimizations.\x0a*\x20test:\x20test\x20of\x20static\x20initialization\x20(fails).\x0a*\x20vector:\x20use\x20correct\x20capacity\x20in\x20call\x20to\x20make.\x0a*\x20xml:\x20allow\x20text\x20segments\x20to\x20end\x20at\x20EOF.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-04-27\">2010-04-27</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20new\x20Codelab\x20that\x20illustrates\x20the\x20construction\x20of\x20a\x0asimple\x20wiki\x20web\x20application:\x20\x0a\x09http://golang.org/doc/codelab/wiki/\x0a\x0aIt\x20also\x20includes\x20a\x20Codewalk\x20framework\x20for\x20documenting\x20code.\x20See:\x0a\x09http://golang.org/doc/codewalk/\x0a\x0aOther\x20changes:\x0a*\x206g:\x20fix\x20need\x20for\x20parens\x20around\x20array\x20index\x20expression.\x0a*\x206l,\x208l:\x20include\x20ELF\x20header\x20in\x20PT_LOAD\x20mapping\x20for\x20text\x20segment.\x0a*\x20arm:\x20add\x20android\x20runner\x20script,\x0a\x09support\x20for\x20printing\x20floats.\x0a*\x20big:\x20implemented\x20Karatsuba\x20multiplication,\x0a\x09many\x20fixes\x20and\x20improvements\x20(thanks\x20Evan\x20Shaw).\x0a*\x20bytes:\x20add\x20Next\x20method\x20to\x20Buffer,\x20simplify\x20Read,\x0a\x09shuffle\x20implementation,\x20making\x20WriteByte\x2050%\x20faster.\x0a*\x20crypto/tls:\x20simpler\x20implementation\x20of\x20record\x20layer.\x0a*\x20exp/eval:\x20fixes\x20(thanks\x20Evan\x20Shaw).\x0a*\x20flag:\x20eliminate\x20unnecessary\x20structs.\x0a*\x20gc:\x20better\x20windows\x20support,\x0a\x09cmplx\x20typecheck\x20bug\x20fix,\x0a\x09more\x20specific\x20error\x20for\x20statements\x20at\x20top\x20level.\x0a*\x20go/parser:\x20don't\x20require\x20unnecessary\x20parens.\x0a*\x20godoc:\x20exclude\x20duplicate\x20entries\x20(thanks\x20Andrei\x20Vieru),\x0a\x09use\x20int64\x20for\x20timestamps\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20gofmt:\x20fine-tune\x20stripping\x20of\x20parentheses,\x0a*\x20json:\x20Marshal,\x20Unmarshal\x20using\x20new\x20scanner,\x0a\x09preserve\x20field\x20name\x20case\x20by\x20default,\x0a\x09scanner,\x20Compact,\x20Indent,\x20and\x20tests,\x0a\x09support\x20for\x20streaming.\x0a*\x20libmach:\x20disassemble\x20MOVLQZX\x20correctly.\x0a*\x20math:\x20more\x20special\x20cases\x20for\x20signed\x20zero\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20net:\x20add\x20Pipe,\x0a\x09fix\x20bugs\x20in\x20packStructValue\x20(thanks\x20Michael\x20Hoisie),\x0a\x09introduce\x20net.Error\x20interface.\x0a*\x20os:\x20FileInfo:\x20regularize\x20the\x20types\x20of\x20some\x20fields,\x0a\x09create\x20sys_bsd.go\x20(thanks\x20Giles\x20Lean),\x0a\x09mingw\x20bug\x20fixes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20reflect:\x20add\x20FieldByNameFunc\x20(thanks\x20Raif\x20S.\x20Naffah),\x0a\x09implement\x20Set(nil),\x20SetValue(nil)\x20for\x20PtrValue\x20and\x20MapValue.\x0a*\x20regexp:\x20allow\x20escaping\x20of\x20any\x20punctuation.\x0a*\x20rpc/jsonrpc:\x20support\x20for\x20jsonrpc\x20wire\x20encoding.\x0a*\x20rpc:\x20abstract\x20client\x20and\x20server\x20encodings,\x0a\x09add\x20Close()\x20method\x20to\x20rpc.Client.\x0a*\x20runtime:\x20closures,\x20defer\x20bug\x20fix\x20for\x20Native\x20Client,\x0a\x09rename\x20cgo2c,\x20*.cgo\x20to\x20goc2c,\x20*.goc\x20to\x20avoid\x20confusion\x20with\x20real\x20cgo.\x0a\x09several\x20other\x20fixes.\x0a*\x20scanner:\x20implement\x20Peek()\x20to\x20look\x20at\x20the\x20next\x20char\x20w/o\x20advancing.\x0a*\x20strings:\x20add\x20ReadRune\x20to\x20Reader,\x20add\x20FieldsFunc\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20syscall:\x20match\x20linux\x20Setsid\x20function\x20signature\x20to\x20darwin,\x0a\x09mingw\x20bug\x20fixes\x20(thanks\x20Alex\x20Brainman).\x0a*\x20template:\x20fix\x20handling\x20of\x20pointer\x20inside\x20interface.\x0a*\x20test/bench:\x20add\x20fannkuch-parallel.go\x20(thanks\x20Kyle\x20Consalus),\x0a\x09pidigits\x20~10%\x20performance\x20win\x20by\x20using\x20adds\x20instead\x20of\x20shifts.\x0a*\x20time:\x20remove\x20incorrect\x20time.ISO8601\x20and\x20add\x20time.RFC3339\x20(thanks\x20Micah\x20Stetson).\x0a*\x20utf16:\x20add\x20DecodeRune,\x20EncodeRune.\x0a*\x20xml:\x20add\x20support\x20for\x20XML\x20marshaling\x20embedded\x20structs\x20(thanks\x20Raif\x20S.\x20Naffah),\x0a\x09new\x20\"innerxml\"\x20tag\x20to\x20collect\x20inner\x20XML.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-04-13\">2010-04-13</h2>\x0a\x0a<pre>\x0aThis\x20release\x20contains\x20many\x20changes:\x0a\x0a*\x208l:\x20add\x20DOS\x20stub\x20to\x20PE\x20binaries\x20(thanks\x20Evan\x20Shaw).\x0a*\x20cgo:\x20add\x20//export.\x0a*\x20cmath:\x20new\x20complex\x20math\x20library\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20docs:\x20update\x20to\x20match\x20current\x20coding\x20style\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20exp/eval:\x20fix\x20example\x20and\x20add\x20target\x20to\x20Makefile\x20(thanks\x20Evan\x20Shaw).\x0a*\x20fmt:\x20change\x20behavior\x20of\x20format\x20verb\x20%b\x20to\x20match\x20%x\x20when\x20negative\x20(thanks\x20Andrei\x20Vieru).\x0a*\x20gc:\x20compile\x20s\x20==\x20\"\"\x20as\x20len(s)\x20==\x200,\x0a\x09distinguish\x20fatal\x20compiler\x20bug\x20from\x20error+exit,\x0a\x09fix\x20alignment\x20on\x20non-amd64,\x0a\x09good\x20syntax\x20error\x20for\x20defer\x20func()\x20{}\x20-\x20missing\x20fina\x20(),\x0a\x09implement\x20panic\x20and\x20recover,\x0a\x09zero\x20unnamed\x20return\x20values\x20on\x20entry\x20if\x20func\x20has\x20defer.\x0a*\x20goyacc:\x20change\x20to\x20be\x20reentrant\x20(thanks\x20Roger\x20Peppe).\x0a*\x20io/ioutil:\x20fix\x20bug\x20in\x20ReadFile\x20when\x20Open\x20succeeds\x20but\x20Stat\x20fails.\x0a*\x20kate:\x20update\x20for\x20recent\x20language\x20changes\x20(thanks\x20Evan\x20Shaw).\x0a*\x20libcgo:\x20initial\x20mingw\x20port\x20work\x20-\x20builds\x20but\x20untested\x20(thanks\x20Joe\x20Poirier).\x0a*\x20math:\x20new\x20functions\x20and\x20special\x20cases\x20(thanks\x20Charles\x20L.\x20Dorian)\x20\x0a*\x20net:\x20use\x20chan\x20bool\x20instead\x20of\x20chan\x20*netFD\x20to\x20avoid\x20cycle.\x0a*\x20netchan:\x20allow\x20client\x20to\x20send\x20as\x20well\x20as\x20receive.\x0a*\x20nntp:\x20new\x20package,\x20NNTP\x20client\x20(thanks\x20Conrad\x20Meyer).\x0a*\x20os:\x20rename\x20os.Dir\x20to\x20os.FileInfo.\x0a*\x20rpc:\x20don't\x20log\x20normal\x20EOF,\x0a\x09fix\x20ServeConn\x20to\x20block\x20as\x20documented.\x0a*\x20runtime:\x20many\x20bug\x20fixes,\x20better\x20ARM\x20support.\x0a*\x20strings:\x20add\x20IndexRune,\x20Trim,\x20TrimLeft,\x20TrimRight,\x20etc\x20(thanks\x20Michael\x20Hoisie).\x0a*\x20syscall:\x20implement\x20some\x20mingw\x20syscalls\x20required\x20by\x20os\x20(thanks\x20Alex\x20Brainman).\x0a*\x20test/bench:\x20add\x20k-nucleotide-parallel\x20(thanks\x20Kyle\x20Consalus).\x0a*\x20Unicode:\x20add\x20support\x20for\x20Turkish\x20case\x20mapping.\x0a*\x20xgb:\x20move\x20from\x20the\x20main\x20repository\x20to\x20http://code.google.com/p/x-go-binding/\x0a</pre>\x0a\x0a<h2\x20id=\"2010-03-30\">2010-03-30</h2>\x0a\x0a<pre>\x0aThis\x20release\x20contains\x20three\x20language\x20changes:\x0a\x0a1.\x20Accessing\x20a\x20non-existent\x20key\x20in\x20a\x20map\x20is\x20no\x20longer\x20a\x20run-time\x20error.\x20\x20\x0aIt\x20now\x20evaluates\x20to\x20the\x20zero\x20value\x20for\x20that\x20type.\x20\x20For\x20example:\x0a\x20\x20\x20\x20\x20\x20\x20\x20x\x20:=\x20myMap[i]\x20\x20\x20is\x20now\x20equivalent\x20to:\x20\x20\x20x,\x20_\x20:=\x20myMap[i]\x0a\x0a2.\x20It\x20is\x20now\x20legal\x20to\x20take\x20the\x20address\x20of\x20a\x20function's\x20return\x20value.\x20\x20\x0aThe\x20return\x20values\x20are\x20copied\x20back\x20to\x20the\x20caller\x20only\x20after\x20deferred\x0afunctions\x20have\x20run.\x0a\x0a3.\x20The\x20functions\x20panic\x20and\x20recover,\x20intended\x20for\x20reporting\x20and\x20recovering\x20from\x0afailure,\x20have\x20been\x20added\x20to\x20the\x20spec:\x0a\x09http://golang.org/doc/go_spec.html#Handling_panics\x20\x0aIn\x20a\x20related\x20change,\x20panicln\x20is\x20gone,\x20and\x20panic\x20is\x20now\x20a\x20single-argument\x0afunction.\x20\x20Panic\x20and\x20recover\x20are\x20recognized\x20by\x20the\x20gc\x20compilers\x20but\x20the\x20new\x0abehavior\x20is\x20not\x20yet\x20implemented.\x0a\x0aThe\x20ARM\x20build\x20is\x20broken\x20in\x20this\x20release;\x20ARM\x20users\x20should\x20stay\x20at\x20release.2010-03-22.\x0a\x0aOther\x20changes:\x0a*\x20bytes,\x20strings:\x20add\x20IndexAny.\x0a*\x20cc/ld:\x20Add\x20support\x20for\x20#pragma\x20dynexport,\x0a\x20\x20\x20\x20\x20\x20\x20\x20Rename\x20dynld\x20to\x20dynimport\x20throughout.\x20Cgo\x20users\x20will\x20need\x20to\x20rerun\x20cgo.\x0a*\x20expvar:\x20default\x20publishings\x20for\x20cmdline,\x20memstats\x0a*\x20flag:\x20add\x20user-defined\x20flag\x20types.\x0a*\x20gc:\x20usual\x20bug\x20fixes\x0a*\x20go/ast:\x20generalized\x20ast\x20filtering.\x0a*\x20go/printer:\x20avoid\x20reflect\x20in\x20print.\x0a*\x20godefs:\x20fix\x20handling\x20of\x20negative\x20constants.\x0a*\x20godoc:\x20export\x20pprof\x20debug\x20information,\x20exported\x20variables,\x0a\x20\x20\x20\x20\x20\x20\x20\x20support\x20for\x20filtering\x20of\x20command-line\x20output\x20in\x20-src\x20mode,\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20http\x20GET\x20for\x20remote\x20search\x20instead\x20of\x20rpc.\x0a*\x20gofmt:\x20don't\x20convert\x20multi-line\x20functions\x20into\x20one-liners,\x0a\x20\x20\x20\x20\x20\x20\x20\x20preserve\x20newlines\x20in\x20multiline\x20selector\x20expressions\x20(thanks\x20Risto\x20Jaakko\x20Saarelma).\x0a*\x20goinstall:\x20include\x20command\x20name\x20in\x20error\x20reporting\x20(thanks\x20Andrey\x20Mirtchovski)\x0a*\x20http:\x20add\x20HandleFunc\x20as\x20shortcut\x20to\x20Handle(path,\x20HandlerFunc(func))\x0a*\x20make:\x20use\x20actual\x20dependency\x20for\x20install\x0a*\x20math:\x20add\x20J1,\x20Y1,\x20Jn,\x20Yn,\x20J0,\x20Y0\x20(Bessel\x20functions)\x20(thanks\x20Charles\x20L.\x20Dorian)\x0a*\x20prof:\x20add\x20pprof\x20from\x20google-perftools\x0a*\x20regexp:\x20don't\x20return\x20non-nil\x20*Regexp\x20if\x20there\x20is\x20an\x20error.\x0a*\x20runtime:\x20add\x20Callers,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20malloc\x20sampling,\x20pprof\x20interface,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20memory\x20profiling,\x20more\x20statistics\x20to\x20runtime.MemStats,\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20missing\x20destroylock()\x20(thanks\x20Alex\x20Brainman),\x0a\x20\x20\x20\x20\x20\x20\x20\x20more\x20malloc\x20statistics,\x0a\x20\x20\x20\x20\x20\x20\x20\x20run\x20all\x20finalizers\x20in\x20a\x20single\x20goroutine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20Goexit\x20runs\x20deferred\x20calls.\x0a*\x20strconv:\x20add\x20Atob\x20and\x20Btoa,\x0a\x20\x20\x20\x20\x20\x20\x20\x20Unquote\x20could\x20wrongly\x20return\x20a\x20nil\x20error\x20on\x20error\x20(thanks\x20Roger\x20Peppe).\x0a*\x20syscall:\x20add\x20IPV6\x20constants,\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20syscall_bsd.go\x20for\x20Darwin\x20and\x20other\x20*BSDs\x20(thanks\x20Giles\x20Lean),\x0a\x20\x20\x20\x20\x20\x20\x20\x20implement\x20SetsockoptString\x20(thanks\x20Christopher\x20Wedgwood).\x0a*\x20websocket:\x20implement\x20new\x20protocol\x20(thanks\x20Fumitoshi\x20Ukai).\x0a*\x20xgb:\x20fix\x20request\x20length\x20and\x20request\x20size\x20(thanks\x20Firmansyah\x20Adiputra).\x0a*\x20xml:\x20add\x20CopyToken\x20(thanks\x20Kyle\x20Consalus),\x0a\x20\x20\x20\x20\x20\x20\x20\x20add\x20line\x20numbers\x20to\x20syntax\x20errors\x20(thanks\x20Kyle\x20Consalus),\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20io.ReadByter\x20in\x20place\x20of\x20local\x20readByter\x20(thanks\x20Raif\x20S.\x20Naffah).\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-03-22\">2010-03-22</h2>\x0a\x0a<pre>\x0aWith\x20this\x20release\x20we\x20announce\x20the\x20launch\x20of\x20the\x20Go\x20Blog:\x0a\x09http://blog.golang.org/\x0aThe\x20first\x20post\x20is\x20a\x20brief\x20update\x20covering\x20what\x20has\x20happened\x20since\x20the\x20launch.\x0a\x0aThis\x20release\x20contains\x20some\x20new\x20packages\x20and\x20functionality,\x20and\x20many\x20fixes:\x0a*\x206g/8g:\x20fix\x20issues\x20with\x20complex\x20data\x20types,\x20other\x20bug\x20fixes.\x0a*\x20Makefiles:\x20refactored\x20to\x20make\x20writing\x20external\x20Makefiles\x20easier.\x0a*\x20crypto/rand:\x20new\x20package.\x0a*\x20godoc:\x20implemented\x20command-line\x20search\x20via\x20RPC,\x0a\x09improved\x20comment\x20formatting:\x20recognize\x20URLs.\x0a*\x20gofmt:\x20more\x20consistent\x20formatting\x20of\x20const/var\x20decls.\x0a*\x20http:\x20add\x20Error\x20helper\x20function,\x0a\x09add\x20ParseQuery\x20(thanks\x20Petar\x20Maymounkov),\x0a\x09change\x20RawPath\x20to\x20mean\x20raw\x20path,\x20not\x20raw\x20everything-after-scheme.\x0a*\x20image/jpeg:\x20fix\x20typos.\x0a*\x20json:\x20add\x20MarshalIndent\x20(accepts\x20user-specified\x20indent\x20string).\x0a*\x20math:\x20add\x20Gamma\x20function\x20(thanks\x20Charles\x20L.\x20Dorian).\x0a*\x20misc/bbedit:\x20support\x20for\x20cmplx,\x20real,\x20imag\x20(thanks\x20Anthony\x20Starks).\x0a*\x20misc/vim:\x20add\x20new\x20complex\x20types,\x20functions\x20and\x20literals.\x0a*\x20net:\x20fix\x20IPMask.String\x20not\x20to\x20crash\x20on\x20all-0xff\x20mask.\x0a*\x20os:\x20drop\x20File\x20finalizer\x20after\x20normal\x20Close.\x0a*\x20runtime:\x20add\x20GOROOT\x20and\x20Version,\x0a\x09lock\x20finalizer\x20table\x20accesses.\x0a*\x20sha512:\x20add\x20sha384\x20(truncated\x20version)\x20(thanks\x20Conrad\x20Meyer).\x0a*\x20syscall:\x20add\x20const\x20ARCH,\x20analogous\x20to\x20OS.\x0a*\x20syscall:\x20further\x20additions\x20to\x20mingw\x20port\x20(thanks\x20Alex\x20Brainman).\x0a*\x20template:\x20fixed\x20html\x20formatter\x20[]byte\x20input\x20bug.\x0a*\x20utf16:\x20new\x20package.\x0a*\x20version.bash:\x20cope\x20with\x20ancient\x20Mercurial.\x0a*\x20websocket:\x20use\x20URL.RawPath\x20to\x20construct\x20WebSocket-Location:\x20header.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-03-15\">2010-03-15</h2>\x0a\x0a<pre>\x0aThis\x20release\x20includes\x20a\x20language\x20change:\x20support\x20for\x20complex\x20numbers.\x0a\x09http://golang.org/doc/go_spec.html#Imaginary_literals\x0a\x09http://golang.org/doc/go_spec.html#Complex_numbers\x0aThere\x20is\x20no\x20library\x20support\x20as\x20yet.\x0a\x0aThis\x20release\x20also\x20includes\x20the\x20goinstall\x20command-line\x20tool.\x20\x0a\x09http://golang.org/cmd/goinstall/\x0a\x09http://groups.google.com/group/golang-nuts/t/f091704771128e32\x0a\x0a*\x205g/6g/8g:\x20fix\x20double\x20function\x20call\x20in\x20slice.\x0a*\x20arm:\x20cleanup\x20build\x20warnings.\x20(thanks\x20Dean\x20Prichard)\x0a*\x20big:\x20fix\x20mistakes\x20with\x20probablyPrime.\x0a*\x20bufio:\x20add\x20WriteRune.\x0a*\x20bytes:\x20add\x20ReadRune\x20and\x20WriteRune\x20to\x20bytes.Buffer.\x0a*\x20cc:\x20stack\x20split\x20bug\x20fix.\x0a*\x20crypto:\x20add\x20SHA-224\x20to\x20sha256,\x20add\x20sha512\x20package.\x20(thanks\x20Conrad\x20Meyer)\x0a*\x20crypto/ripemd160:\x20new\x20package.\x20(thanks\x20Raif\x20S.\x20Naffah)\x0a*\x20crypto/rsa:\x20don't\x20use\x20safe\x20primes.\x0a*\x20gc:\x20avoid\x20fixed\x20length\x20buffer\x20cleanbuf.\x20(thanks\x20Dean\x20Prichard)\x0a\x09better\x20compilation\x20of\x20floating\x20point\x20+=\x0a\x09fix\x20crash\x20on\x20complicated\x20arg\x20to\x20make\x20slice.\x0a\x09remove\x20duplicate\x20errors,\x20give\x20better\x20error\x20for\x20I.(T)\x0a*\x20godoc:\x20support\x20for\x20multiple\x20packages\x20in\x20a\x20directory,\x20other\x20fixes.\x0a*\x20gofmt:\x20bug\x20fixes.\x0a*\x20hash:\x20add\x20Sum64\x20interface.\x0a*\x20hash/crc32:\x20add\x20Update\x20function.\x0a*\x20hash/crc64:\x20new\x20package\x20implementing\x2064-bit\x20CRC.\x0a*\x20math:\x20add\x20ilogb,\x20logb,\x20remainder.\x20(thanks\x20Charles\x20L.\x20Dorian)\x20\x0a*\x20regexp:\x20add\x20ReplaceAllFunc,\x20ReplaceAllStringFunc.\x0a*\x20runtime:\x20clock\x20garbage\x20collection\x20on\x20bytes\x20allocated,\x20not\x20pages\x20in\x20use.\x0a*\x20strings:\x20make\x20Split(s,\x20\"\",\x20n)\x20faster.\x20(thanks\x20Spring\x20Mc)\x0a*\x20syscall:\x20minimal\x20mingw\x20version\x20of\x20syscall.\x20(thanks\x20Alex\x20Brainman)\x0a*\x20template:\x20add\x20ParseFile,\x20MustParseFile.\x0a</pre>\x0a\x0a<h2\x20id=\"2010-03-04\">2010-03-04</h2>\x0a\x0a<pre>\x0aThere\x20is\x20one\x20language\x20change:\x20the\x20ability\x20to\x20convert\x20a\x20string\x20to\x20[]byte\x20or\x20\x0a[]int.\x20\x20This\x20deprecates\x20the\x20strings.Bytes\x20and\x20strings.Runes\x20functions.\x0aYou\x20can\x20convert\x20your\x20existing\x20sources\x20using\x20these\x20gofmt\x20commands:\x0a\x09gofmt\x20-r\x20'strings.Bytes(x)\x20-&gt;\x20[]byte(x)'\x20-w\x20file-or-directory-list\x0a\x09gofmt\x20-r\x20'strings.Runes(x)\x20-&gt;\x20[]int(x)'\x20-w\x20file-or-directory-list\x0aAfter\x20running\x20these\x20you\x20might\x20need\x20to\x20delete\x20unused\x20imports\x20of\x20the\x20\"strings\"\x20\x0apackage.\x0a\x0aOther\x20changes\x20and\x20fixes:\x0a*\x206l/8l/5l:\x20add\x20-r\x20option\x0a*\x208g:\x20make\x20a[byte(x)]\x20truncate\x20x\x0a*\x20codereview.py:\x20fix\x20for\x20compatibility\x20with\x20hg\x20>=1.4.3\x0a*\x20crypto/blowfish:\x20new\x20package\x20(thanks\x20Raif\x20S.\x20Naffah)\x0a*\x20dashboard:\x20more\x20performance\x20tuning\x0a*\x20fmt:\x20use\x20String\x20method\x20in\x20%q\x20to\x20get\x20the\x20value\x20to\x20quote.\x0a*\x20gofmt:\x20several\x20cosmetic\x20changes\x0a*\x20http:\x20fix\x20handling\x20of\x20Connection:\x20close,\x20bug\x20in\x20http.Post\x0a*\x20net:\x20correct\x20DNS\x20configuration,\x0a\x09fix\x20network\x20timeout\x20boundary\x20condition,\x0a\x09put\x20[\x20]\x20around\x20IPv6\x20addresses\x20for\x20Dial.\x0a*\x20path:\x20add\x20Match,\x0a\x09fix\x20bug\x20in\x20Match\x20with\x20non-greedy\x20stars\x20(thanks\x20Kevin\x20Ballard)\x0a*\x20strings:\x20delete\x20Bytes,\x20Runes\x20(see\x20above)\x0a*\x20tests:\x20an\x20Eratosthenesque\x20concurrent\x20prime\x20sieve\x20(thanks\x20Anh\x20Hai\x20Trinh)\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-02-23\">2010-02-23</h2>\x0a\x0a<pre>\x0aThis\x20release\x20is\x20mainly\x20bug\x20fixes\x20and\x20a\x20little\x20new\x20code.\x0aThere\x20are\x20no\x20language\x20changes.\x0a\x0a6g/5g/8g:\x20bug\x20fixes\x0a8a/8l:\x20Added\x20FCMOVcc\x20instructions\x20(thanks\x20Evan\x20Shaw\x20and\x20Charles\x20Dorian)\x0acrypto/x509:\x20support\x20certificate\x20creation\x0adashboard:\x20caching\x20to\x20avoid\x20datastore\x20queries\x0aexec:\x20add\x20dir\x20argument\x20to\x20Run\x0agodoc:\x20bug\x20fixes\x20and\x20code\x20cleanups\x0ahttp:\x20continued\x20implementation\x20and\x20bug\x20fixes\x20(thanks\x20Petar\x20Maymounkov)\x0ajson:\x20fix\x20quoted\x20strings\x20in\x20Marshal\x20(thanks\x20Sergei\x20Skorobogatov)\x0amath:\x20more\x20functions,\x20test\x20cases,\x20and\x20benchmarks\x20(thanks\x20Charles\x20L.\x20Dorian)\x0amisc/bbedit:\x20treat\x20predeclared\x20identifiers\x20as\x20\"keywords\"\x20(thanks\x20Anthony\x20Starks)\x0anet:\x20disable\x20UDP\x20server\x20test\x20(flaky\x20on\x20various\x20architectures)\x0aruntime:\x20work\x20around\x20Linux\x20kernel\x20bug\x20in\x20futex,\x0a\x09pchw\x20is\x20now\x20tiny\x0async:\x20fix\x20to\x20work\x20on\x20armv5\x20(thanks\x20Dean\x20Prichard)\x0awebsocket:\x20fix\x20binary\x20frame\x20size\x20decoding\x20(thanks\x20Timo\x20Savola)\x0axml:\x20allow\x20unquoted\x20attribute\x20values\x20in\x20non-Strict\x20mode\x20(thanks\x20Amrut\x20Joshi)\x0a\x09treat\x20bool\x20as\x20value\x20in\x20Unmarshal\x20(thanks\x20Michael\x20Hoisie)\x20\x0a</pre>\x0a\x0a<h2\x20id=\"2010-02-17\">2010-02-17</h2>\x0a\x0a<pre>\x0aThere\x20are\x20two\x20small\x20language\x20changes:\x0a*\x20NUL\x20bytes\x20may\x20be\x20rejected\x20in\x20souce\x20files,\x20and\x20the\x20tools\x20do\x20reject\x20them.\x0a*\x20Conversions\x20from\x20string\x20to\x20[]int\x20and\x20[]byte\x20are\x20defined\x20but\x20not\x20yet\x20implemented.\x0a\x0aOther\x20changes\x20and\x20fixes:\x0a*\x205a/6a/8a/5c/6c/8c:\x20remove\x20fixed-size\x20arrays\x20for\x20-I\x20and\x20-D\x20options\x20(thanks\x20Dean\x20Prichard)\x0a*\x205c/6c/8c/5l/6l/8l:\x20add\x20-V\x20flag\x20to\x20display\x20version\x20number\x0a*\x205c/6c/8c:\x20use\x20\"cpp\"\x20not\x20\"/bin/cpp\"\x20for\x20external\x20preprocessor\x20(thanks\x20Giles\x20Lean)\x0a*\x208a/8l:\x20Added\x20CMOVcc\x20instructions\x20(thanks\x20Evan\x20Shaw)\x0a*\x208l:\x20pe\x20executable\x20building\x20code\x20changed\x20to\x20include\x20import\x20table\x20for\x20kernel32.dll\x20functions\x20(thanks\x20Alex\x20Brainman)\x0a*\x205g/6g/8g:\x20bug\x20fixes\x0a*\x20asn1:\x20bug\x20fixes\x20and\x20additions\x20(incl\x20marshaling)\x0a*\x20build:\x20fix\x20build\x20for\x20Native\x20Client,\x20Linux/ARM\x0a*\x20dashboard:\x20show\x20benchmarks,\x20add\x20garbage\x20collector\x20benchmarks\x0a*\x20encoding/pem:\x20add\x20marshaling\x20support\x0a*\x20exp/draw:\x20fast\x20paths\x20for\x20a\x20nil\x20mask\x0a*\x20godoc:\x20support\x20for\x20directories\x20outside\x20$GOROOT\x0a*\x20http:\x20sort\x20header\x20keys\x20when\x20writing\x20Response\x20or\x20Request\x20to\x20wire\x20(thanks\x20Petar\x20Maymounkov)\x0a*\x20math:\x20special\x20cases\x20and\x20new\x20functions\x20(thanks\x20Charles\x20Dorian)\x0a*\x20mime:\x20new\x20package,\x20used\x20in\x20http\x20(thanks\x20Michael\x20Hoisie)\x0a*\x20net:\x20dns\x20bug\x20fix\x20-\x20use\x20random\x20request\x20id\x0a*\x20os:\x20finalize\x20File,\x20to\x20close\x20fd.\x0a*\x20path:\x20make\x20Join\x20variadic\x20(thanks\x20Stephen\x20Weinberg)\x0a*\x20regexp:\x20optimization\x20bug\x20fix\x0a*\x20runtime:\x20misc\x20fixes\x20and\x20optimizations\x0a*\x20syscall:\x20make\x20signature\x20of\x20Umask\x20on\x20OS\x20X,\x20FreeBSD\x20match\x20Linux.\x20(thanks\x20Giles\x20Lean)\x0a</pre>\x0a\x0a<h2\x20id=\"2010-02-04\">2010-02-04</h2>\x0a\x0a<pre>\x0aThere\x20is\x20one\x20language\x20change:\x20support\x20for\x20...T\x20parameters:\x0a\x09http://golang.org/doc/go_spec.html#Function_types\x0a\x0aYou\x20can\x20now\x20check\x20build\x20status\x20on\x20various\x20platforms\x20at\x20the\x20Go\x20Dashboard:\x20\x0a\x09http://godashboard.appspot.com\x0a\x0a*\x205l/6l/8l:\x20several\x20minor\x20fixes\x0a*\x205a/6a/8a/5l/6l/8l:\x20avoid\x20overflow\x20of\x20symb\x20buffer\x20(thanks\x20Dean\x20Prichard)\x0a*\x20compress/gzip:\x20gzip\x20deflater\x20(i.e.,\x20writer)\x0a*\x20debug/proc:\x20add\x20mingw\x20specific\x20build\x20stubs\x20(thanks\x20Joe\x20Poirier)\x0a*\x20exp/draw:\x20separate\x20the\x20source-point\x20and\x20mask-point\x20in\x20Draw\x0a*\x20fmt:\x20handle\x20nils\x20safely\x20in\x20Printf\x0a*\x20gccgo:\x20error\x20messages\x20now\x20match\x20those\x20of\x20gc\x0a*\x20godoc:\x20several\x20fixes\x0a*\x20http:\x20bug\x20fixes,\x20revision\x20of\x20Request/Response\x20(thanks\x20Petar\x20Maymounkov)\x0a*\x20image:\x20new\x20image.A\x20type\x20to\x20represent\x20anti-aliased\x20font\x20glyphs\x0a\x09add\x20named\x20colors\x20(e.g.\x20image.Blue),\x20suitable\x20for\x20exp/draw\x0a*\x20io:\x20fixed\x20bugs\x20in\x20Pipe\x0a*\x20malloc:\x20merge\x20into\x20package\x20runtime\x0a*\x20math:\x20fix\x20tests\x20on\x20FreeBSD\x20(thanks\x20Devon\x20H.\x20O'Dell)\x0a\x09add\x20functions;\x20update\x20tests\x20and\x20special\x20cases\x20(thanks\x20Charles\x20L.\x20Dorian)\x0a*\x20os/signal:\x20send\x20SIGCHLDs\x20to\x20Incoming\x20(thanks\x20Chris\x20Wedgwood)\x0a*\x20reflect:\x20add\x20StringHeader\x20to\x20reflect\x0a*\x20runtime:\x20add\x20SetFinalizer\x0a*\x20time:\x20Sleep\x20through\x20interruptions\x20(thanks\x20Chris\x20Wedgwood)\x0a\x09add\x20RFC822\x20formats\x0a\x09experimental\x20implementation\x20of\x20Ticker\x20using\x20two\x20goroutines\x20for\x20all\x20tickers\x0a*\x20xml:\x20allow\x20underscores\x20in\x20XML\x20element\x20names\x20(thanks\x20Michael\x20Hoisie)\x0a\x09allow\x20any\x20scalar\x20type\x20in\x20xml.Unmarshal\x0a</pre>\x0a\x0a<h2\x20id=\"2010-01-27\">2010-01-27</h2>\x0a\x0a<pre>\x0aThere\x20are\x20two\x20small\x20language\x20changes:\x20the\x20meaning\x20of\x20chan\x20&lt;-\x20chan\x20int\x0ais\x20now\x20defined,\x20and\x20functions\x20returning\x20functions\x20do\x20not\x20need\x20to\x20\x0aparenthesize\x20the\x20result\x20type.\x0a\x0aThere\x20is\x20one\x20significant\x20implementation\x20change:\x20the\x20compilers\x20can\x0ahandle\x20multiple\x20packages\x20using\x20the\x20same\x20name\x20in\x20a\x20single\x20binary.\x0aIn\x20the\x20gc\x20compilers,\x20this\x20comes\x20at\x20the\x20cost\x20of\x20ensuring\x20that\x20you\x0aalways\x20import\x20a\x20particular\x20package\x20using\x20a\x20consistent\x20import\x20path.\x0aIn\x20the\x20gccgo\x20compiler,\x20the\x20cost\x20is\x20that\x20you\x20must\x20use\x20the\x20-fgo-prefix\x0aflag\x20to\x20pass\x20a\x20unique\x20prefix\x20(like\x20the\x20eventual\x20import\x20path).\x0a\x0a5a/6a/8a:\x20avoid\x20use\x20of\x20fixed-size\x20buffers\x20(thanks\x20Dean\x20Prichard)\x0a5g,\x206g,\x208g:\x20many\x20minor\x20bug\x20fixes\x0abufio:\x20give\x20Writer.WriteString\x20same\x20signature\x20as\x20bytes.Buffer.WriteString.\x0acontainer/list:\x20PushFrontList,\x20PushBackList\x20(thanks\x20Jan\x20Hosang)\x0agodoc:\x20trim\x20spaces\x20from\x20search\x20query\x20(thanks\x20Christopher\x20Wedgwood)\x0ahash:\x20document\x20that\x20Sum\x20does\x20not\x20change\x20state,\x20fix\x20crypto\x20hashes\x0ahttp:\x20bug\x20fixes,\x20revision\x20of\x20Request/Response\x20(thanks\x20Petar\x20Maymounkov)\x0amath:\x20more\x20handling\x20of\x20IEEE\x20754\x20special\x20cases\x20(thanks\x20Charles\x20Dorian)\x0amisc/dashboard:\x20new\x20build\x20dashboard\x0anet:\x20allow\x20UDP\x20broadcast,\x0a\x09use\x20/etc/hosts\x20to\x20resolve\x20names\x20(thanks\x20Yves\x20Junqueira,\x20Michael\x20Hoisie)\x0anetchan:\x20beginnings\x20of\x20new\x20package\x20for\x20connecting\x20channels\x20across\x20a\x20network\x0aos:\x20allow\x20FQDN\x20in\x20Hostname\x20test\x20(thanks\x20Icarus\x20Sparry)\x0areflect:\x20garbage\x20collection\x20bug\x20in\x20Call\x0aruntime:\x20demo\x20of\x20Go\x20on\x20raw\x20(emulated)\x20hw\x20in\x20runtime/pchw,\x0a\x09performance\x20fix\x20on\x20OS\x20X\x0aspec:\x20clarify\x20meaning\x20of\x20chan\x20&lt;-\x20chan\x20int,\x0a\x09func()\x20func()\x20int\x20is\x20allowed\x20now,\x0a\x09define\x20...\x20T\x20(not\x20yet\x20implemented)\x0atemplate:\x20can\x20use\x20interface\x20values\x0atime:\x20fix\x20for\x20+0000\x20time\x20zone,\x0a\x09more\x20robust\x20tick.Stop.\x0axgb:\x20support\x20for\x20authenticated\x20connections\x20(thanks\x20Firmansyah\x20Adiputra)\x0axml:\x20add\x20Escape\x20(thanks\x20Stephen\x20Weinberg)\x0a</pre>\x0a\x0a<h2\x20id=\"2010-01-13\">2010-01-13</h2>\x0a\x0a<pre>\x0aThis\x20release\x20is\x20mainly\x20bug\x20fixes\x20with\x20a\x20little\x20new\x20code.\x0aThere\x20are\x20no\x20language\x20changes.\x0a\x0abuild:\x20$GOBIN\x20should\x20no\x20longer\x20be\x20required\x20in\x20$PATH\x20(thanks\x20Devon\x20H.\x20O'Dell),\x0a\x09new\x20package\x20target\x20\"make\x20bench\"\x20to\x20run\x20benchmarks\x0a8g:\x20faster\x20float\x20-&gt;\x20uint64\x20conversion\x20(thanks\x20Evan\x20Shaw)\x0a5g,\x206g,\x208g:\x0a\x09clean\x20opnames.h\x20to\x20avoid\x20stale\x20errors\x20(thanks\x20Yongjian\x20Xu),\x0a\x09a\x20handful\x20of\x20small\x20compiler\x20fixes\x0a5g,\x206g,\x208g,\x205l,\x206l,\x208l:\x20ignore\x20$GOARCH,\x20which\x20is\x20implied\x20by\x20name\x20of\x20tool\x0a6prof:\x20support\x20for\x20writing\x20input\x20files\x20for\x20google-perftools's\x20pprof\x0aasn1:\x20fix\x20a\x20few\x20structure-handling\x20bugs\x0acgo:\x20many\x20bug\x20fixes\x20(thanks\x20Devon\x20H.\x20O'Dell)\x0acodereview:\x20repeated\x20\"hg\x20mail\"\x20sends\x20\"please\x20take\x20another\x20look\"\x0agob:\x20reserve\x20ids\x20for\x20future\x20expansion\x0agodoc:\x20distinguish\x20HTML\x20generation\x20from\x20plain\x20text\x20HTML\x20escaping\x20(thanks\x20Roger\x20Peppe)\x0agofmt:\x20minor\x20bug\x20fixes,\x20removed\x20-oldprinter\x20flag\x0ahttp:\x20add\x20CanonicalPath\x20(thanks\x20Ivan\x20Krasin),\x0a\x09avoid\x20header\x20duplication\x20in\x20Response.Write,\x0a\x09correctly\x20escape/unescape\x20URL\x20sections\x0aio:\x20new\x20interface\x20ReadByter\x0ajson:\x20better\x20error,\x20pointer\x20handling\x20in\x20Marshal\x20(thanks\x20Ivan\x20Krasin)\x0alibmach:\x20disassembly\x20of\x20FUCOMI,\x20etc\x20(thanks\x20Evan\x20Shaw)\x0amath:\x20special\x20cases\x20for\x20most\x20functions\x20and\x20386\x20hardware\x20Sqrt\x20(thanks\x20Charles\x20Dorian)\x0amisc/dashboard:\x20beginning\x20of\x20a\x20build\x20dashboard\x20at\x20godashboard.appspot.com.\x0amisc/emacs:\x20handling\x20of\x20new\x20semicolon\x20rules\x20(thanks\x20Austin\x20Clements),\x0a\x09empty\x20buffer\x20bug\x20fix\x20(thanks\x20Kevin\x20Ballard)\x0amisc/kate:\x20highlighting\x20improvements\x20(tahnks\x20Evan\x20Shaw)\x0aos/signal:\x20add\x20signal\x20names:\x20signal.SIGHUP,\x20etc\x20(thanks\x20David\x20Symonds)\x0aruntime:\x20preliminary\x20Windows\x20support\x20(thanks\x20Hector\x20Chu),\x0a\x09preemption\x20polling\x20to\x20reduce\x20garbage\x20collector\x20pauses\x0ascanner:\x20new\x20lightweight\x20scanner\x20package\x0atemplate:\x20bug\x20fix\x20involving\x20spaces\x20before\x20a\x20delimited\x20block\x0atest/bench:\x20updated\x20timings\x0atime:\x20new\x20Format,\x20Parse\x20functions\x0a</pre>\x0a\x0a<h2\x20id=\"2010-01-05\">2010-01-05</h2>\x0a\x0a<pre>\x0aThis\x20release\x20is\x20mainly\x20bug\x20fixes.\x20\x20There\x20are\x20no\x20language\x20changes.\x0a\x0a6prof:\x20now\x20works\x20on\x20386\x0a8a,\x208l:\x20add\x20FCOMI,\x20FCOMIP,\x20FUCOMI,\x20and\x20FUCOMIP\x20(thanks\x20Evan\x20Shaw)\x0abig:\x20fix\x20ProbablyPrime\x20on\x20small\x20numbers\x0acontainer/vector:\x20faster\x20[]-based\x20implementation\x20(thanks\x20Jan\x20Mercl)\x0acrypto/tls:\x20extensions\x20and\x20Next\x20Protocol\x20Negotiation\x0agob:\x20one\x20encoding\x20bug\x20fix,\x20one\x20decoding\x20bug\x20fix\x0aimage/jpeg:\x20support\x20for\x20RST\x20markers\x0aimage/png:\x20support\x20for\x20transparent\x20paletted\x20images\x0amisc/xcode:\x20improved\x20support\x20(thanks\x20Ken\x20Friedenbach)\x0anet:\x20return\x20nil\x20Conn\x20on\x20error\x20from\x20Dial\x20(thanks\x20Roger\x20Peppe)\x0aregexp:\x20add\x20Regexp.NumSubexp\x20(thanks\x20Peter\x20Froehlich)\x0asyscall:\x20add\x20Nanosleep\x20on\x20FreeBSD\x20(thanks\x20Devon\x20H.\x20O'Dell)\x0atemplate:\x20can\x20use\x20map\x20in\x20.repeated\x20section\x0a\x0aThere\x20is\x20now\x20a\x20public\x20road\x20map,\x20in\x20the\x20repository\x20and\x20online\x0aat\x20<a\x20href=\"http://golang.org/doc/devel/roadmap.html\">http://golang.org/doc/devel/roadmap.html</a>.\x0a</pre>\x0a\x0a<h2\x20id=\"2009-12-22\">2009-12-22</h2>\x0a\x0a<pre>\x0aSince\x20the\x20last\x20release\x20there\x20has\x20been\x20one\x20large\x20syntactic\x20change\x20to\x0athe\x20language,\x20already\x20discussed\x20extensively\x20on\x20this\x20list:\x20semicolons\x0aare\x20now\x20implied\x20between\x20statement-ending\x20tokens\x20and\x20newline\x20characters.\x0aSee\x20http://groups.google.com/group/golang-nuts/t/5ee32b588d10f2e9\x20for\x0adetails.\x0a\x0aBy\x20default,\x20gofmt\x20now\x20parses\x20and\x20prints\x20the\x20new\x20lighter\x20weight\x20syntax.\x0aTo\x20convert\x20programs\x20written\x20in\x20the\x20old\x20syntax,\x20you\x20can\x20use:\x0a\x0a\x09gofmt\x20-oldparser\x20-w\x20*.go\x0a\x0aSince\x20everything\x20was\x20being\x20reformatted\x20anyway,\x20we\x20took\x20the\x20opportunity\x20to\x0achange\x20the\x20way\x20gofmt\x20does\x20alignment.\x20\x20Now\x20gofmt\x20uses\x20tabs\x20at\x20the\x20start\x0aof\x20a\x20line\x20for\x20basic\x20code\x20alignment,\x20but\x20it\x20uses\x20spaces\x20for\x20alignment\x20of\x0ainterior\x20columns.\x20\x20Thus,\x20in\x20an\x20editor\x20with\x20a\x20fixed-width\x20font,\x20you\x20can\x0achoose\x20your\x20own\x20tab\x20size\x20to\x20change\x20the\x20indentation,\x20and\x20no\x20matter\x20what\x0atab\x20size\x20you\x20choose,\x20columns\x20will\x20be\x20aligned\x20properly.\x0a\x0a\x0aIn\x20addition\x20to\x20the\x20syntax\x20and\x20formatting\x20changes,\x20there\x20have\x20been\x20many\x0asmaller\x20fixes\x20and\x20updates:\x0a\x0a6g,8g,5g:\x20many\x20bug\x20fixes,\x20better\x20registerization,\x0a\x20\x20\x20build\x20process\x20fix\x20involving\x20mkbuiltin\x20(thanks\x20Yongjian\x20Xu),\x0a\x20\x20\x20method\x20expressions\x20for\x20concrete\x20types\x0a8l:\x20support\x20for\x20Windows\x20PE\x20files\x20(thanks\x20Hector\x20Chu)\x0abytes:\x20more\x20efficient\x20Buffer\x20handling\x0abytes,\x20strings:\x20new\x20function\x20Fields\x20(thanks\x20Andrey\x20Mirtchovski)\x0acgo:\x20handling\x20of\x20enums\x20(thanks\x20Moriyoshi\x20Koizumi),\x0a\x20\x20\x20\x20handling\x20of\x20structs\x20with\x20bit\x20fields,\x20multiple\x20files\x20(thanks\x20Devon\x20H.\x20O'Dell),\x0a\x20\x20\x20\x20installation\x20of\x20.so\x20to\x20non-standard\x20locations\x0acrypto/sha256:\x20new\x20package\x20for\x20SHA\x20256\x20(thanks\x20Andy\x20Davis)\x0aencoding/binary:\x20support\x20for\x20slices\x20of\x20fixed-size\x20values\x20(thanks\x20Maxim\x20Ushakov)\x0aexp/vector:\x20experimental\x20alternate\x20vector\x20representation\x20(thanks\x20Jan\x20Mercl)\x0afmt:\x20%p\x20for\x20chan,\x20map,\x20slice\x20types\x0agob:\x20a\x20couple\x20more\x20bug\x20fixes\x0ahttp:\x20support\x20for\x20basic\x20authentication\x20(thanks\x20Ivan\x20Krasin)\x0aimage/jpeg:\x20basic\x20JPEG\x20decoder\x0amath:\x20correct\x20handling\x20of\x20Inf\x20and\x20NaN\x20in\x20Pow\x20(thanks\x20Charles\x20Dorian)\x0amisc/bash:\x20completion\x20file\x20for\x20bash\x20(thanks\x20Alex\x20Ray)\x0aos/signal:\x20support\x20for\x20handling\x20Unix\x20signals\x20(thanks\x20David\x20Symonds)\x0arand:\x20Zipf-distributed\x20random\x20values\x20(thanks\x20William\x20Josephson)\x0asyscall:\x20correct\x20error\x20return\x20bug\x20on\x2032-bit\x20machines\x20(thanks\x20Christopher\x20Wedgwood)\x0asyslog:\x20new\x20package\x20for\x20writing\x20to\x20Unix\x20syslog\x20daemon\x20(thanks\x20Yves\x20Junqueira)\x0atemplate:\x20will\x20automatically\x20invoke\x20niladic\x20methods\x0atime:\x20new\x20ISO8601\x20format\x20generator\x20(thanks\x20Ben\x20Olive)\x0axgb:\x20converted\x20generator\x20to\x20new\x20syntax\x20(thanks\x20Tor\x20Andersson)\x0axml:\x20better\x20mapping\x20of\x20tag\x20names\x20to\x20Go\x20identifiers\x20(thanks\x20Kei\x20Son),\x0a\x20\x20\x20\x20better\x20handling\x20of\x20unexpected\x20EOF\x20(thanks\x20Arvindh\x20Rajesh\x20Tamilmani)\x0a</pre>\x0a\x0a<h2\x20id=\"2009-12-09\">2009-12-09</h2>\x0a\x0a<pre>\x0aSince\x20the\x20last\x20release\x20there\x20are\x20two\x20changes\x20to\x20the\x20language:\x20\x0a\x0a*\x20new\x20builtin\x20copy(dst,\x20src)\x20copies\x20n\x20=\x20min(len(dst),\x20len(src))\x20\x0a\x20\x20elements\x20to\x20dst\x20from\x20src\x20and\x20returns\x20n.\x20\x20It\x20works\x20correctly\x20\x0a\x20\x20even\x20if\x20dst\x20and\x20src\x20overlap.\x20\x20bytes.Copy\x20is\x20gone.\x20\x0a\x20\x20Convert\x20your\x20programs\x20using:\x20\x0a\x20\x20\x20\x20\x20\x20gofmt\x20-w\x20-r\x20'bytes.Copy(d,\x20s)\x20-&gt;\x20copy(d,\x20s)'\x20*.go\x20\x0a\x0a*\x20new\x20syntax\x20x[lo:]\x20is\x20shorthand\x20for\x20x[lo:len(x)].\x20\x0a\x20\x20Convert\x20your\x20programs\x20using:\x20\x0a\x20\x20\x20\x20\x20\x20gofmt\x20-w\x20-r\x20'a[b:len(a)]\x20-&gt;\x20a[b:]'\x20*.go\x20\x0a\x0aIn\x20addition,\x20there\x20have\x20been\x20many\x20smaller\x20fixes\x20and\x20updates:\x20\x0a\x0a*\x206g/8g/5g:\x20many\x20bug\x20fixes\x20\x0a*\x208g:\x20fix\x20386\x20floating\x20point\x20stack\x20bug\x20(thanks\x20Charles\x20Dorian)\x20\x0a*\x20all.bash:\x20now\x20works\x20even\x20when\x20$GOROOT\x20has\x20spaces\x20(thanks\x20Sergio\x20Luis\x20O.\x20B.\x20Correia),\x20\x0a\x20\x20\x20\x20starting\x20to\x20make\x20build\x20work\x20with\x20mingw\x20(thanks\x20Hector\x20Chu),\x20\x0a\x20\x20\x20\x20FreeBSD\x20support\x20(thanks\x20Devon\x20O'Dell)\x20\x0a*\x20big:\x20much\x20faster\x20on\x20386.\x20\x0a*\x20bytes:\x20new\x20function\x20IndexByte,\x20implemented\x20in\x20assembly\x20\x0a\x20\x20\x20\x20new\x20function\x20Runes\x20(thanks\x20Peter\x20Froehlich),\x20\x0a\x20\x20\x20\x20performance\x20tuning\x20in\x20bytes.Buffer.\x20\x0a*\x20codereview:\x20various\x20bugs\x20fixed\x20\x0a*\x20container/vector:\x20New\x20is\x20gone;\x20just\x20declare\x20a\x20Vector\x20instead.\x20\x0a\x20\x20\x20\x20call\x20Resize\x20to\x20set\x20len\x20and\x20cap.\x20\x0a*\x20cgo:\x20many\x20bug\x20fixes\x20(thanks\x20Eden\x20Li)\x20\x0a*\x20crypto:\x20added\x20MD4\x20(thanks\x20Chris\x20Lennert),\x20\x0a\x20\x20\x20\x20added\x20XTEA\x20(thanks\x20Adrian\x20O'Grady).\x20\x0a*\x20crypto/tls:\x20basic\x20client\x20\x0a*\x20exp/iterable:\x20new\x20functions\x20(thanks\x20Michael\x20Elkins)\x20\x0a*\x20exp/nacl:\x20native\x20client\x20tree\x20builds\x20again\x20\x0a*\x20fmt:\x20preliminary\x20performance\x20tuning\x20\x0a*\x20go/ast:\x20more\x20powerful\x20Visitor\x20(thanks\x20Roger\x20Peppe)\x20\x0a*\x20gob:\x20a\x20few\x20bug\x20fixes\x20\x0a*\x20gofmt:\x20better\x20handling\x20of\x20standard\x20input,\x20error\x20reporting\x20(thanks\x20Fazlul\x20Shahriar)\x20\x0a\x20\x20\x20\x20new\x20-r\x20flag\x20for\x20rewriting\x20programs\x20\x0a*\x20gotest:\x20support\x20for\x20Benchmark\x20functions\x20(thanks\x20Trevor\x20Strohman)\x20\x0a*\x20io:\x20ReadFile,\x20WriteFile,\x20ReadDir\x20now\x20in\x20separate\x20package\x20io/ioutil.\x20\x0a*\x20json:\x20new\x20Marshal\x20function\x20(thanks\x20Michael\x20Hoisie),\x20\x0a\x20\x20\x20\x20better\x20white\x20space\x20handling\x20(thanks\x20Andrew\x20Skiba),\x20\x0a\x20\x20\x20\x20decoding\x20into\x20native\x20data\x20structures\x20(thanks\x20Sergey\x20Gromov),\x20\x0a\x20\x20\x20\x20handling\x20of\x20nil\x20interface\x20values\x20(thanks\x20Ross\x20Light).\x20\x0a*\x20math:\x20correct\x20handling\x20of\x20sin/cos\x20of\x20large\x20angles\x20\x0a*\x20net:\x20better\x20handling\x20of\x20Close\x20(thanks\x20Devon\x20O'Dell\x20and\x20Christopher\x20Wedgwood)\x20\x0a\x20\x20\x20\x20support\x20for\x20UDP\x20broadcast\x20(thanks\x20Jonathan\x20Wills),\x20\x0a\x20\x20\x20\x20support\x20for\x20empty\x20packets\x20\x0a*\x20rand:\x20top-level\x20functions\x20now\x20safe\x20to\x20call\x20from\x20multiple\x20goroutines\x20\x0a(thanks\x20Roger\x20Peppe).\x20\x0a*\x20regexp:\x20a\x20few\x20easy\x20optimizations\x20\x0a*\x20rpc:\x20better\x20error\x20handling,\x20a\x20few\x20bug\x20fixes\x20\x0a*\x20runtime:\x20better\x20signal\x20handling\x20on\x20OS\x20X,\x20malloc\x20fixes,\x20\x0a\x20\x20\x20\x20global\x20channel\x20lock\x20is\x20gone.\x20\x0a*\x20sync:\x20RWMutex\x20now\x20allows\x20concurrent\x20readers\x20(thanks\x20P\xc3\xa9ter\x20Szab\xc3\xb3)\x20\x0a*\x20template:\x20can\x20use\x20maps\x20as\x20data\x20(thanks\x20James\x20Meneghello)\x20\x0a*\x20unicode:\x20updated\x20to\x20Unicode\x205.2.\x20\x0a*\x20websocket:\x20new\x20package\x20(thanks\x20Fumitoshi\x20Ukai)\x20\x0a*\x20xgb:\x20preliminary\x20X\x20Go\x20Bindings\x20(thanks\x20Tor\x20Andersson)\x20\x0a*\x20xml:\x20fixed\x20crash\x20(thanks\x20Vish\x20Subramanian)\x20\x0a*\x20misc:\x20bbedit\x20config\x20(thanks\x20Anthony\x20Starks),\x20\x0a\x20\x20\x20\x20kate\x20config\x20(thanks\x20Evan\x20Shaw)\x20\x0a</pre>\x0a",
 
-	"doc/docs.html": "<!--{\x0a\x09\"Title\":\x20\"Documentation\",\x0a\x09\"Path\":\x20\"/doc/\",\x0a\x09\"Template\":\x20true\x0a}-->\x0a\x0a<p>\x0aThe\x20Go\x20programming\x20language\x20is\x20an\x20open\x20source\x20project\x20to\x20make\x20programmers\x20more\x0aproductive.\x0a</p>\x0a\x0a<p>\x0aGo\x20is\x20expressive,\x20concise,\x20clean,\x20and\x20efficient.\x20Its\x20concurrency\x0amechanisms\x20make\x20it\x20easy\x20to\x20write\x20programs\x20that\x20get\x20the\x20most\x20out\x20of\x20multicore\x0aand\x20networked\x20machines,\x20while\x20its\x20novel\x20type\x20system\x20enables\x20flexible\x20and\x0amodular\x20program\x20construction.\x20Go\x20compiles\x20quickly\x20to\x20machine\x20code\x20yet\x20has\x20the\x0aconvenience\x20of\x20garbage\x20collection\x20and\x20the\x20power\x20of\x20run-time\x20reflection.\x20It's\x20a\x0afast,\x20statically\x20typed,\x20compiled\x20language\x20that\x20feels\x20like\x20a\x20dynamically\x20typed,\x0ainterpreted\x20language.\x0a</p>\x0a\x0a<div\x20id=\"manual-nav\"></div>\x0a\x0a<h2>Installing\x20Go</h2>\x0a\x0a<h3><a\x20href=\"/doc/install\">Getting\x20Started</a></h3>\x0a<p>\x0aInstructions\x20for\x20downloading\x20and\x20installing\x20the\x20Go\x20compilers,\x20tools,\x20and\x0alibraries.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"learning\">Learning\x20Go</h2>\x0a\x0a<img\x20class=\"gopher\"\x20src=\"/doc/gopher/doc.png\"\x20alt=\"\"/>\x0a\x0a<h3\x20id=\"go_tour\">\x0a\x09{{if\x20$.GoogleCN}}\x0a\x09\x20\x20A\x20Tour\x20of\x20Go\x0a\x09{{else}}\x0a\x09\x20\x20<a\x20href=\"//tour.golang.org/\">A\x20Tour\x20of\x20Go</a>\x0a\x09{{end}}\x0a</h3>\x0a<p>\x0aAn\x20interactive\x20introduction\x20to\x20Go\x20in\x20three\x20sections.\x0aThe\x20first\x20section\x20covers\x20basic\x20syntax\x20and\x20data\x20structures;\x20the\x20second\x20discusses\x0amethods\x20and\x20interfaces;\x20and\x20the\x20third\x20introduces\x20Go's\x20concurrency\x20primitives.\x0aEach\x20section\x20concludes\x20with\x20a\x20few\x20exercises\x20so\x20you\x20can\x20practice\x20what\x20you've\x0alearned.\x20You\x20can\x20{{if\x20not\x20$.GoogleCN}}<a\x20href=\"//tour.golang.org/\">take\x20the\x20tour\x0aonline</a>\x20or{{end}}\x20install\x20it\x20locally\x20with:\x0a</p>\x0a<pre>\x0a$\x20go\x20get\x20golang.org/x/tour\x0a</pre>\x0a<p>\x0aThis\x20will\x20place\x20the\x20<code>tour</code>\x20binary\x20in\x20your\x20workspace's\x20<code>bin</code>\x20directory.\x0a</p>\x0a\x0a<h3\x20id=\"code\"><a\x20href=\"code.html\">How\x20to\x20write\x20Go\x20code</a></h3>\x0a<p>\x0aThis\x20doc\x20explains\x20how\x20to\x20develop\x20a\x20simple\x20set\x20of\x20Go\x20packages\x20inside\x20a\x20module,\x0aand\x20it\x20shows\x20how\x20to\x20use\x20the\x20<a\x20href=\"/cmd/go/\"><code>go</code>&nbsp;command</a>\x0ato\x20build\x20and\x20test\x20packages.\x0a</p>\x0a\x0a<h3\x20id=\"editors\"><a\x20href=\"editors.html\">Editor\x20plugins\x20and\x20IDEs</a></h3>\x0a<p>\x0aA\x20document\x20that\x20summarizes\x20commonly\x20used\x20editor\x20plugins\x20and\x20IDEs\x20with\x0aGo\x20support.\x0a</p>\x0a\x0a<h3\x20id=\"effective_go\"><a\x20href=\"effective_go.html\">Effective\x20Go</a></h3>\x0a<p>\x0aA\x20document\x20that\x20gives\x20tips\x20for\x20writing\x20clear,\x20idiomatic\x20Go\x20code.\x0aA\x20must\x20read\x20for\x20any\x20new\x20Go\x20programmer.\x20It\x20augments\x20the\x20tour\x20and\x0athe\x20language\x20specification,\x20both\x20of\x20which\x20should\x20be\x20read\x20first.\x0a</p>\x0a\x0a<h3\x20id=\"diagnostics\"><a\x20href=\"/doc/diagnostics.html\">Diagnostics</a></h3>\x0a<p>\x0aSummarizes\x20tools\x20and\x20methodologies\x20to\x20diagnose\x20problems\x20in\x20Go\x20programs.\x0a</p>\x0a\x0a<h3\x20id=\"faq\"><a\x20href=\"/doc/faq\">Frequently\x20Asked\x20Questions\x20(FAQ)</a></h3>\x0a<p>\x0aAnswers\x20to\x20common\x20questions\x20about\x20Go.\x0a</p>\x0a\x0a<h3\x20id=\"wiki\"><a\x20href=\"/wiki\">The\x20Go\x20Wiki</a></h3>\x0a<p>A\x20wiki\x20maintained\x20by\x20the\x20Go\x20community.</p>\x0a\x0a<h4\x20id=\"learn_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/Learn\">Learn</a>\x20page\x20at\x20the\x20<a\x20href=\"/wiki\">Wiki</a>\x0afor\x20more\x20Go\x20learning\x20resources.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"references\">References</h2>\x0a\x0a<h3\x20id=\"pkg\"><a\x20href=\"/pkg/\">Package\x20Documentation</a></h3>\x0a<p>\x0aThe\x20documentation\x20for\x20the\x20Go\x20standard\x20library.\x0a</p>\x0a\x0a<h3\x20id=\"cmd\"><a\x20href=\"/doc/cmd\">Command\x20Documentation</a></h3>\x0a<p>\x0aThe\x20documentation\x20for\x20the\x20Go\x20tools.\x0a</p>\x0a\x0a<h3\x20id=\"spec\"><a\x20href=\"/ref/spec\">Language\x20Specification</a></h3>\x0a<p>\x0aThe\x20official\x20Go\x20Language\x20specification.\x0a</p>\x0a\x0a<h3\x20id=\"go_mem\"><a\x20href=\"/ref/mem\">The\x20Go\x20Memory\x20Model</a></h3>\x0a<p>\x0aA\x20document\x20that\x20specifies\x20the\x20conditions\x20under\x20which\x20reads\x20of\x20a\x20variable\x20in\x0aone\x20goroutine\x20can\x20be\x20guaranteed\x20to\x20observe\x20values\x20produced\x20by\x20writes\x20to\x20the\x0asame\x20variable\x20in\x20a\x20different\x20goroutine.\x0a</p>\x0a\x0a<h3\x20id=\"release\"><a\x20href=\"/doc/devel/release.html\">Release\x20History</a></h3>\x0a<p>A\x20summary\x20of\x20the\x20changes\x20between\x20Go\x20releases.</p>\x0a\x0a\x0a<h2\x20id=\"articles\">Articles</h2>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h3\x20id=\"blog\"><a\x20href=\"//blog.golang.org/\">The\x20Go\x20Blog</a></h3>\x0a<p>The\x20official\x20blog\x20of\x20the\x20Go\x20project,\x20featuring\x20news\x20and\x20in-depth\x20articles\x20by\x0athe\x20Go\x20team\x20and\x20guests.</p>\x0a{{end}}\x0a\x0a<h4>Codewalks</h4>\x0a<p>\x0aGuided\x20tours\x20of\x20Go\x20programs.\x0a</p>\x0a<ul>\x0a<li><a\x20href=\"/doc/codewalk/functions\">First-Class\x20Functions\x20in\x20Go</a></li>\x0a<li><a\x20href=\"/doc/codewalk/markov\">Generating\x20arbitrary\x20text:\x20a\x20Markov\x20chain\x20algorithm</a></li>\x0a<li><a\x20href=\"/doc/codewalk/sharemem\">Share\x20Memory\x20by\x20Communicating</a></li>\x0a<li><a\x20href=\"/doc/articles/wiki/\">Writing\x20Web\x20Applications</a>\x20-\x20building\x20a\x20simple\x20web\x20application.</li>\x0a</ul>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h4>Language</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/json-rpc-tale-of-interfaces\">JSON-RPC:\x20a\x20tale\x20of\x20interfaces</a></li>\x0a<li><a\x20href=\"/blog/gos-declaration-syntax\">Go's\x20Declaration\x20Syntax</a></li>\x0a<li><a\x20href=\"/blog/defer-panic-and-recover\">Defer,\x20Panic,\x20and\x20Recover</a></li>\x0a<li><a\x20href=\"/blog/go-concurrency-patterns-timing-out-and\">Go\x20Concurrency\x20Patterns:\x20Timing\x20out,\x20moving\x20on</a></li>\x0a<li><a\x20href=\"/blog/go-slices-usage-and-internals\">Go\x20Slices:\x20usage\x20and\x20internals</a></li>\x0a<li><a\x20href=\"/blog/gif-decoder-exercise-in-go-interfaces\">A\x20GIF\x20decoder:\x20an\x20exercise\x20in\x20Go\x20interfaces</a></li>\x0a<li><a\x20href=\"/blog/error-handling-and-go\">Error\x20Handling\x20and\x20Go</a></li>\x0a<li><a\x20href=\"/blog/organizing-go-code\">Organizing\x20Go\x20code</a></li>\x0a</ul>\x0a\x0a<h4>Packages</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/json-and-go\">JSON\x20and\x20Go</a>\x20-\x20using\x20the\x20<a\x20href=\"/pkg/encoding/json/\">json</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/gobs-of-data\">Gobs\x20of\x20data</a>\x20-\x20the\x20design\x20and\x20use\x20of\x20the\x20<a\x20href=\"/pkg/encoding/gob/\">gob</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/laws-of-reflection\">The\x20Laws\x20of\x20Reflection</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/reflect/\">reflect</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/go-image-package\">The\x20Go\x20image\x20package</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/image/\">image</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/go-imagedraw-package\">The\x20Go\x20image/draw\x20package</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/image/draw/\">image/draw</a>\x20package.</li>\x0a</ul>\x0a\x0a<h4>Modules</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/using-go-modules\">Using\x20Go\x20Modules</a>\x20-\x20an\x20introduction\x20to\x20using\x20modules\x20in\x20a\x20simple\x20project.</li>\x0a<li><a\x20href=\"/blog/migrating-to-go-modules\">Migrating\x20to\x20Go\x20Modules</a>\x20-\x20converting\x20an\x20existing\x20project\x20to\x20use\x20modules.</li>\x0a<li><a\x20href=\"/blog/publishing-go-modules\">Publishing\x20Go\x20Modules</a>\x20-\x20how\x20to\x20make\x20new\x20versions\x20of\x20modules\x20available\x20to\x20others.</li>\x0a<li><a\x20href=\"/blog/v2-go-modules\">Go\x20Modules:\x20v2\x20and\x20Beyond</a>\x20-\x20creating\x20and\x20publishing\x20major\x20versions\x202\x20and\x20higher.</li>\x0a<li><a\x20href=\"/blog/module-compatibility\">Keeping\x20Your\x20Modules\x20Compatible</a>\x20-\x20how\x20to\x20keep\x20your\x20modules\x20compatible\x20with\x20prior\x20minor/patch\x20versions.</li>\x0a</ul>\x0a{{end}}\x0a\x0a<h4>Tools</h4>\x0a<ul>\x0a<li><a\x20href=\"/doc/articles/go_command.html\">About\x20the\x20Go\x20command</a>\x20-\x20why\x20we\x20wrote\x20it,\x20what\x20it\x20is,\x20what\x20it's\x20not,\x20and\x20how\x20to\x20use\x20it.</li>\x0a<li><a\x20href=\"/doc/gdb\">Debugging\x20Go\x20Code\x20with\x20GDB</a></li>\x0a<li><a\x20href=\"/doc/articles/race_detector.html\">Data\x20Race\x20Detector</a>\x20-\x20a\x20manual\x20for\x20the\x20data\x20race\x20detector.</li>\x0a<li><a\x20href=\"/doc/asm\">A\x20Quick\x20Guide\x20to\x20Go's\x20Assembler</a>\x20-\x20an\x20introduction\x20to\x20the\x20assembler\x20used\x20by\x20Go.</li>\x0a{{if\x20not\x20$.GoogleCN}}\x0a<li><a\x20href=\"/blog/c-go-cgo\">C?\x20Go?\x20Cgo!</a>\x20-\x20linking\x20against\x20C\x20code\x20with\x20<a\x20href=\"/cmd/cgo/\">cgo</a>.</li>\x0a<li><a\x20href=\"/blog/godoc-documenting-go-code\">Godoc:\x20documenting\x20Go\x20code</a>\x20-\x20writing\x20good\x20documentation\x20for\x20<a\x20href=\"/cmd/godoc/\">godoc</a>.</li>\x0a<li><a\x20href=\"/blog/profiling-go-programs\">Profiling\x20Go\x20Programs</a></li>\x0a<li><a\x20href=\"/blog/race-detector\">Introducing\x20the\x20Go\x20Race\x20Detector</a>\x20-\x20an\x20introduction\x20to\x20the\x20race\x20detector.</li>\x0a{{end}}\x0a</ul>\x0a\x0a<h4\x20id=\"articles_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/Articles\">Articles\x20page</a>\x20at\x20the\x0a<a\x20href=\"/wiki\">Wiki</a>\x20for\x20more\x20Go\x20articles.\x0a</p>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h2\x20id=\"talks\">Talks</h2>\x0a\x0a<img\x20class=\"gopher\"\x20src=\"/doc/gopher/talks.png\"\x20alt=\"\"/>\x0a\x0a<h3\x20id=\"video_tour_of_go\"><a\x20href=\"https://research.swtch.com/gotour\">A\x20Video\x20Tour\x20of\x20Go</a></h3>\x0a<p>\x0aThree\x20things\x20that\x20make\x20Go\x20fast,\x20fun,\x20and\x20productive:\x0ainterfaces,\x20reflection,\x20and\x20concurrency.\x20Builds\x20a\x20toy\x20web\x20crawler\x20to\x0ademonstrate\x20these.\x0a</p>\x0a\x0a<h3\x20id=\"go_code_that_grows\"><a\x20href=\"//vimeo.com/53221560\">Code\x20that\x20grows\x20with\x20grace</a></h3>\x0a<p>\x0aOne\x20of\x20Go's\x20key\x20design\x20goals\x20is\x20code\x20adaptability;\x20that\x20it\x20should\x20be\x20easy\x20to\x20take\x20a\x20simple\x20design\x20and\x20build\x20upon\x20it\x20in\x20a\x20clean\x20and\x20natural\x20way.\x20In\x20this\x20talk\x20Andrew\x20Gerrand\x20describes\x20a\x20simple\x20\"chat\x20roulette\"\x20server\x20that\x20matches\x20pairs\x20of\x20incoming\x20TCP\x20connections,\x20and\x20then\x20use\x20Go's\x20concurrency\x20mechanisms,\x20interfaces,\x20and\x20standard\x20library\x20to\x20extend\x20it\x20with\x20a\x20web\x20interface\x20and\x20other\x20features.\x20While\x20the\x20function\x20of\x20the\x20program\x20changes\x20dramatically,\x20Go's\x20flexibility\x20preserves\x20the\x20original\x20design\x20as\x20it\x20grows.\x0a</p>\x0a\x0a<h3\x20id=\"go_concurrency_patterns\"><a\x20href=\"//www.youtube.com/watch?v=f6kdp27TYZs\">Go\x20Concurrency\x20Patterns</a></h3>\x0a<p>\x0aConcurrency\x20is\x20the\x20key\x20to\x20designing\x20high\x20performance\x20network\x20services.\x20Go's\x20concurrency\x20primitives\x20(goroutines\x20and\x20channels)\x20provide\x20a\x20simple\x20and\x20efficient\x20means\x20of\x20expressing\x20concurrent\x20execution.\x20In\x20this\x20talk\x20we\x20see\x20how\x20tricky\x20concurrency\x20problems\x20can\x20be\x20solved\x20gracefully\x20with\x20simple\x20Go\x20code.\x0a</p>\x0a\x0a<h3\x20id=\"advanced_go_concurrency_patterns\"><a\x20href=\"//www.youtube.com/watch?v=QDDwwePbDtw\">Advanced\x20Go\x20Concurrency\x20Patterns</a></h3>\x0a<p>\x0aThis\x20talk\x20expands\x20on\x20the\x20<i>Go\x20Concurrency\x20Patterns</i>\x20talk\x20to\x20dive\x20deeper\x20into\x20Go's\x20concurrency\x20primitives.\x0a</p>\x0a\x0a<h4\x20id=\"talks_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/talks\">Go\x20Talks\x20site</a>\x20and\x20<a\x20href=\"/wiki/GoTalks\">wiki\x20page</a>\x20for\x20more\x20Go\x20talks.\x0a</p>\x0a{{end}}\x0a\x0a<h2\x20id=\"nonenglish\">Non-English\x20Documentation</h2>\x0a\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/NonEnglish\">NonEnglish</a>\x20page\x0aat\x20the\x20<a\x20href=\"/wiki\">Wiki</a>\x20for\x20localized\x0adocumentation.\x0a</p>\x0a",
+	"doc/docs.html": "<!--{\x0a\x09\"Title\":\x20\"Documentation\",\x0a\x09\"Path\":\x20\"/doc/\",\x0a\x09\"Template\":\x20true\x0a}-->\x0a\x0a<p>\x0aThe\x20Go\x20programming\x20language\x20is\x20an\x20open\x20source\x20project\x20to\x20make\x20programmers\x20more\x0aproductive.\x0a</p>\x0a\x0a<p>\x0aGo\x20is\x20expressive,\x20concise,\x20clean,\x20and\x20efficient.\x20Its\x20concurrency\x0amechanisms\x20make\x20it\x20easy\x20to\x20write\x20programs\x20that\x20get\x20the\x20most\x20out\x20of\x20multicore\x0aand\x20networked\x20machines,\x20while\x20its\x20novel\x20type\x20system\x20enables\x20flexible\x20and\x0amodular\x20program\x20construction.\x20Go\x20compiles\x20quickly\x20to\x20machine\x20code\x20yet\x20has\x20the\x0aconvenience\x20of\x20garbage\x20collection\x20and\x20the\x20power\x20of\x20run-time\x20reflection.\x20It's\x20a\x0afast,\x20statically\x20typed,\x20compiled\x20language\x20that\x20feels\x20like\x20a\x20dynamically\x20typed,\x0ainterpreted\x20language.\x0a</p>\x0a\x0a<div\x20id=\"manual-nav\"></div>\x0a\x0a<h2\x20id=\"getting-started\">Getting\x20started</h2>\x0a\x0a<h3\x20id=\"installing\"><a\x20href=\"/doc/install\">Installing\x20Go</a></h3>\x0a<p>\x0aInstructions\x20for\x20downloading\x20and\x20installing\x20Go.\x0a</p>\x0a\x0a<h3\x20id=\"get-started-tutorial\"><a\x20href=\"/doc/tutorial/getting-started.html\">Tutorial:\x20Getting\x20started</a></h3>\x0a<p>\x0aA\x20brief\x20Hello,\x20World\x20tutorial\x20to\x20get\x20started.\x20Learn\x20a\x20bit\x20about\x20Go\x20code,\x20tools,\x20packages,\x20and\x20modules.\x0a</p>\x0a\x0a<h3\x20id=\"create-module-tutorial\"><a\x20href=\"/doc/tutorial/create-module.html\">Tutorial:\x20Create\x20a\x20module</a></h3>\x0a<p>\x0aA\x20tutorial\x20of\x20short\x20topics\x20introducing\x20functions,\x20error\x20handling,\x20arrays,\x20maps,\x20unit\x20testing,\x20and\x20compiling.\x0a</p>\x0a\x0a<h2\x20id=\"learning\">Learning\x20Go</h2>\x0a\x0a<img\x20class=\"gopher\"\x20src=\"/doc/gopher/doc.png\"\x20alt=\"\"/>\x0a\x0a<h3\x20id=\"go_tour\">\x0a\x09{{if\x20$.GoogleCN}}\x0a\x09\x20\x20A\x20Tour\x20of\x20Go\x0a\x09{{else}}\x0a\x09\x20\x20<a\x20href=\"//tour.golang.org/\">A\x20Tour\x20of\x20Go</a>\x0a\x09{{end}}\x0a</h3>\x0a<p>\x0aAn\x20interactive\x20introduction\x20to\x20Go\x20in\x20three\x20sections.\x0aThe\x20first\x20section\x20covers\x20basic\x20syntax\x20and\x20data\x20structures;\x20the\x20second\x20discusses\x0amethods\x20and\x20interfaces;\x20and\x20the\x20third\x20introduces\x20Go's\x20concurrency\x20primitives.\x0aEach\x20section\x20concludes\x20with\x20a\x20few\x20exercises\x20so\x20you\x20can\x20practice\x20what\x20you've\x0alearned.\x20You\x20can\x20{{if\x20not\x20$.GoogleCN}}<a\x20href=\"//tour.golang.org/\">take\x20the\x20tour\x0aonline</a>\x20or{{end}}\x20install\x20it\x20locally\x20with:\x0a</p>\x0a<pre>\x0a$\x20go\x20get\x20golang.org/x/tour\x0a</pre>\x0a<p>\x0aThis\x20will\x20place\x20the\x20<code>tour</code>\x20binary\x20in\x20your\x20workspace's\x20<code>bin</code>\x20directory.\x0a</p>\x0a\x0a<h3\x20id=\"code\"><a\x20href=\"code.html\">How\x20to\x20write\x20Go\x20code</a></h3>\x0a<p>\x0aThis\x20doc\x20explains\x20how\x20to\x20develop\x20a\x20simple\x20set\x20of\x20Go\x20packages\x20inside\x20a\x20module,\x0aand\x20it\x20shows\x20how\x20to\x20use\x20the\x20<a\x20href=\"/cmd/go/\"><code>go</code>&nbsp;command</a>\x0ato\x20build\x20and\x20test\x20packages.\x0a</p>\x0a\x0a<h3\x20id=\"editors\"><a\x20href=\"editors.html\">Editor\x20plugins\x20and\x20IDEs</a></h3>\x0a<p>\x0aA\x20document\x20that\x20summarizes\x20commonly\x20used\x20editor\x20plugins\x20and\x20IDEs\x20with\x0aGo\x20support.\x0a</p>\x0a\x0a<h3\x20id=\"effective_go\"><a\x20href=\"effective_go.html\">Effective\x20Go</a></h3>\x0a<p>\x0aA\x20document\x20that\x20gives\x20tips\x20for\x20writing\x20clear,\x20idiomatic\x20Go\x20code.\x0aA\x20must\x20read\x20for\x20any\x20new\x20Go\x20programmer.\x20It\x20augments\x20the\x20tour\x20and\x0athe\x20language\x20specification,\x20both\x20of\x20which\x20should\x20be\x20read\x20first.\x0a</p>\x0a\x0a<h3\x20id=\"diagnostics\"><a\x20href=\"/doc/diagnostics.html\">Diagnostics</a></h3>\x0a<p>\x0aSummarizes\x20tools\x20and\x20methodologies\x20to\x20diagnose\x20problems\x20in\x20Go\x20programs.\x0a</p>\x0a\x0a<h3\x20id=\"faq\"><a\x20href=\"/doc/faq\">Frequently\x20Asked\x20Questions\x20(FAQ)</a></h3>\x0a<p>\x0aAnswers\x20to\x20common\x20questions\x20about\x20Go.\x0a</p>\x0a\x0a<h3\x20id=\"tutorials\"><a\x20href=\"/doc/tutorial/\">Tutorials</a></h3>\x0a<p>\x0aA\x20list\x20of\x20tutorials\x20to\x20get\x20started\x20with\x20Go.\x0a</p>\x0a\x0a<h3\x20id=\"wiki\"><a\x20href=\"/wiki\">The\x20Go\x20Wiki</a></h3>\x0a<p>A\x20wiki\x20maintained\x20by\x20the\x20Go\x20community.</p>\x0a\x0a<h4\x20id=\"learn_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/Learn\">Learn</a>\x20page\x20at\x20the\x20<a\x20href=\"/wiki\">Wiki</a>\x0afor\x20more\x20Go\x20learning\x20resources.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"references\">References</h2>\x0a\x0a<h3\x20id=\"pkg\"><a\x20href=\"/pkg/\">Package\x20Documentation</a></h3>\x0a<p>\x0aThe\x20documentation\x20for\x20the\x20Go\x20standard\x20library.\x0a</p>\x0a\x0a<h3\x20id=\"cmd\"><a\x20href=\"/doc/cmd\">Command\x20Documentation</a></h3>\x0a<p>\x0aThe\x20documentation\x20for\x20the\x20Go\x20tools.\x0a</p>\x0a\x0a<h3\x20id=\"spec\"><a\x20href=\"/ref/spec\">Language\x20Specification</a></h3>\x0a<p>\x0aThe\x20official\x20Go\x20Language\x20specification.\x0a</p>\x0a\x0a<h3\x20id=\"go_mem\"><a\x20href=\"/ref/mem\">The\x20Go\x20Memory\x20Model</a></h3>\x0a<p>\x0aA\x20document\x20that\x20specifies\x20the\x20conditions\x20under\x20which\x20reads\x20of\x20a\x20variable\x20in\x0aone\x20goroutine\x20can\x20be\x20guaranteed\x20to\x20observe\x20values\x20produced\x20by\x20writes\x20to\x20the\x0asame\x20variable\x20in\x20a\x20different\x20goroutine.\x0a</p>\x0a\x0a<h3\x20id=\"release\"><a\x20href=\"/doc/devel/release.html\">Release\x20History</a></h3>\x0a<p>A\x20summary\x20of\x20the\x20changes\x20between\x20Go\x20releases.</p>\x0a\x0a\x0a<h2\x20id=\"articles\">Articles</h2>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h3\x20id=\"blog\"><a\x20href=\"//blog.golang.org/\">The\x20Go\x20Blog</a></h3>\x0a<p>The\x20official\x20blog\x20of\x20the\x20Go\x20project,\x20featuring\x20news\x20and\x20in-depth\x20articles\x20by\x0athe\x20Go\x20team\x20and\x20guests.</p>\x0a{{end}}\x0a\x0a<h4>Codewalks</h4>\x0a<p>\x0aGuided\x20tours\x20of\x20Go\x20programs.\x0a</p>\x0a<ul>\x0a<li><a\x20href=\"/doc/codewalk/functions\">First-Class\x20Functions\x20in\x20Go</a></li>\x0a<li><a\x20href=\"/doc/codewalk/markov\">Generating\x20arbitrary\x20text:\x20a\x20Markov\x20chain\x20algorithm</a></li>\x0a<li><a\x20href=\"/doc/codewalk/sharemem\">Share\x20Memory\x20by\x20Communicating</a></li>\x0a<li><a\x20href=\"/doc/articles/wiki/\">Writing\x20Web\x20Applications</a>\x20-\x20building\x20a\x20simple\x20web\x20application.</li>\x0a</ul>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h4>Language</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/json-rpc-tale-of-interfaces\">JSON-RPC:\x20a\x20tale\x20of\x20interfaces</a></li>\x0a<li><a\x20href=\"/blog/gos-declaration-syntax\">Go's\x20Declaration\x20Syntax</a></li>\x0a<li><a\x20href=\"/blog/defer-panic-and-recover\">Defer,\x20Panic,\x20and\x20Recover</a></li>\x0a<li><a\x20href=\"/blog/go-concurrency-patterns-timing-out-and\">Go\x20Concurrency\x20Patterns:\x20Timing\x20out,\x20moving\x20on</a></li>\x0a<li><a\x20href=\"/blog/go-slices-usage-and-internals\">Go\x20Slices:\x20usage\x20and\x20internals</a></li>\x0a<li><a\x20href=\"/blog/gif-decoder-exercise-in-go-interfaces\">A\x20GIF\x20decoder:\x20an\x20exercise\x20in\x20Go\x20interfaces</a></li>\x0a<li><a\x20href=\"/blog/error-handling-and-go\">Error\x20Handling\x20and\x20Go</a></li>\x0a<li><a\x20href=\"/blog/organizing-go-code\">Organizing\x20Go\x20code</a></li>\x0a</ul>\x0a\x0a<h4>Packages</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/json-and-go\">JSON\x20and\x20Go</a>\x20-\x20using\x20the\x20<a\x20href=\"/pkg/encoding/json/\">json</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/gobs-of-data\">Gobs\x20of\x20data</a>\x20-\x20the\x20design\x20and\x20use\x20of\x20the\x20<a\x20href=\"/pkg/encoding/gob/\">gob</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/laws-of-reflection\">The\x20Laws\x20of\x20Reflection</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/reflect/\">reflect</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/go-image-package\">The\x20Go\x20image\x20package</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/image/\">image</a>\x20package.</li>\x0a<li><a\x20href=\"/blog/go-imagedraw-package\">The\x20Go\x20image/draw\x20package</a>\x20-\x20the\x20fundamentals\x20of\x20the\x20<a\x20href=\"/pkg/image/draw/\">image/draw</a>\x20package.</li>\x0a</ul>\x0a\x0a<h4>Modules</h4>\x0a<ul>\x0a<li><a\x20href=\"/blog/using-go-modules\">Using\x20Go\x20Modules</a>\x20-\x20an\x20introduction\x20to\x20using\x20modules\x20in\x20a\x20simple\x20project.</li>\x0a<li><a\x20href=\"/blog/migrating-to-go-modules\">Migrating\x20to\x20Go\x20Modules</a>\x20-\x20converting\x20an\x20existing\x20project\x20to\x20use\x20modules.</li>\x0a<li><a\x20href=\"/blog/publishing-go-modules\">Publishing\x20Go\x20Modules</a>\x20-\x20how\x20to\x20make\x20new\x20versions\x20of\x20modules\x20available\x20to\x20others.</li>\x0a<li><a\x20href=\"/blog/v2-go-modules\">Go\x20Modules:\x20v2\x20and\x20Beyond</a>\x20-\x20creating\x20and\x20publishing\x20major\x20versions\x202\x20and\x20higher.</li>\x0a<li><a\x20href=\"/blog/module-compatibility\">Keeping\x20Your\x20Modules\x20Compatible</a>\x20-\x20how\x20to\x20keep\x20your\x20modules\x20compatible\x20with\x20prior\x20minor/patch\x20versions.</li>\x0a</ul>\x0a{{end}}\x0a\x0a<h4>Tools</h4>\x0a<ul>\x0a<li><a\x20href=\"/doc/articles/go_command.html\">About\x20the\x20Go\x20command</a>\x20-\x20why\x20we\x20wrote\x20it,\x20what\x20it\x20is,\x20what\x20it's\x20not,\x20and\x20how\x20to\x20use\x20it.</li>\x0a<li><a\x20href=\"/doc/gdb\">Debugging\x20Go\x20Code\x20with\x20GDB</a></li>\x0a<li><a\x20href=\"/doc/articles/race_detector.html\">Data\x20Race\x20Detector</a>\x20-\x20a\x20manual\x20for\x20the\x20data\x20race\x20detector.</li>\x0a<li><a\x20href=\"/doc/asm\">A\x20Quick\x20Guide\x20to\x20Go's\x20Assembler</a>\x20-\x20an\x20introduction\x20to\x20the\x20assembler\x20used\x20by\x20Go.</li>\x0a{{if\x20not\x20$.GoogleCN}}\x0a<li><a\x20href=\"/blog/c-go-cgo\">C?\x20Go?\x20Cgo!</a>\x20-\x20linking\x20against\x20C\x20code\x20with\x20<a\x20href=\"/cmd/cgo/\">cgo</a>.</li>\x0a<li><a\x20href=\"/blog/godoc-documenting-go-code\">Godoc:\x20documenting\x20Go\x20code</a>\x20-\x20writing\x20good\x20documentation\x20for\x20<a\x20href=\"/cmd/godoc/\">godoc</a>.</li>\x0a<li><a\x20href=\"/blog/profiling-go-programs\">Profiling\x20Go\x20Programs</a></li>\x0a<li><a\x20href=\"/blog/race-detector\">Introducing\x20the\x20Go\x20Race\x20Detector</a>\x20-\x20an\x20introduction\x20to\x20the\x20race\x20detector.</li>\x0a{{end}}\x0a</ul>\x0a\x0a<h4\x20id=\"articles_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/Articles\">Articles\x20page</a>\x20at\x20the\x0a<a\x20href=\"/wiki\">Wiki</a>\x20for\x20more\x20Go\x20articles.\x0a</p>\x0a\x0a{{if\x20not\x20$.GoogleCN}}\x0a<h2\x20id=\"talks\">Talks</h2>\x0a\x0a<img\x20class=\"gopher\"\x20src=\"/doc/gopher/talks.png\"\x20alt=\"\"/>\x0a\x0a<h3\x20id=\"video_tour_of_go\"><a\x20href=\"https://research.swtch.com/gotour\">A\x20Video\x20Tour\x20of\x20Go</a></h3>\x0a<p>\x0aThree\x20things\x20that\x20make\x20Go\x20fast,\x20fun,\x20and\x20productive:\x0ainterfaces,\x20reflection,\x20and\x20concurrency.\x20Builds\x20a\x20toy\x20web\x20crawler\x20to\x0ademonstrate\x20these.\x0a</p>\x0a\x0a<h3\x20id=\"go_code_that_grows\"><a\x20href=\"//vimeo.com/53221560\">Code\x20that\x20grows\x20with\x20grace</a></h3>\x0a<p>\x0aOne\x20of\x20Go's\x20key\x20design\x20goals\x20is\x20code\x20adaptability;\x20that\x20it\x20should\x20be\x20easy\x20to\x20take\x20a\x20simple\x20design\x20and\x20build\x20upon\x20it\x20in\x20a\x20clean\x20and\x20natural\x20way.\x20In\x20this\x20talk\x20Andrew\x20Gerrand\x20describes\x20a\x20simple\x20\"chat\x20roulette\"\x20server\x20that\x20matches\x20pairs\x20of\x20incoming\x20TCP\x20connections,\x20and\x20then\x20use\x20Go's\x20concurrency\x20mechanisms,\x20interfaces,\x20and\x20standard\x20library\x20to\x20extend\x20it\x20with\x20a\x20web\x20interface\x20and\x20other\x20features.\x20While\x20the\x20function\x20of\x20the\x20program\x20changes\x20dramatically,\x20Go's\x20flexibility\x20preserves\x20the\x20original\x20design\x20as\x20it\x20grows.\x0a</p>\x0a\x0a<h3\x20id=\"go_concurrency_patterns\"><a\x20href=\"//www.youtube.com/watch?v=f6kdp27TYZs\">Go\x20Concurrency\x20Patterns</a></h3>\x0a<p>\x0aConcurrency\x20is\x20the\x20key\x20to\x20designing\x20high\x20performance\x20network\x20services.\x20Go's\x20concurrency\x20primitives\x20(goroutines\x20and\x20channels)\x20provide\x20a\x20simple\x20and\x20efficient\x20means\x20of\x20expressing\x20concurrent\x20execution.\x20In\x20this\x20talk\x20we\x20see\x20how\x20tricky\x20concurrency\x20problems\x20can\x20be\x20solved\x20gracefully\x20with\x20simple\x20Go\x20code.\x0a</p>\x0a\x0a<h3\x20id=\"advanced_go_concurrency_patterns\"><a\x20href=\"//www.youtube.com/watch?v=QDDwwePbDtw\">Advanced\x20Go\x20Concurrency\x20Patterns</a></h3>\x0a<p>\x0aThis\x20talk\x20expands\x20on\x20the\x20<i>Go\x20Concurrency\x20Patterns</i>\x20talk\x20to\x20dive\x20deeper\x20into\x20Go's\x20concurrency\x20primitives.\x0a</p>\x0a\x0a<h4\x20id=\"talks_more\">More</h4>\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/talks\">Go\x20Talks\x20site</a>\x20and\x20<a\x20href=\"/wiki/GoTalks\">wiki\x20page</a>\x20for\x20more\x20Go\x20talks.\x0a</p>\x0a{{end}}\x0a\x0a<h2\x20id=\"nonenglish\">Non-English\x20Documentation</h2>\x0a\x0a<p>\x0aSee\x20the\x20<a\x20href=\"/wiki/NonEnglish\">NonEnglish</a>\x20page\x0aat\x20the\x20<a\x20href=\"/wiki\">Wiki</a>\x20for\x20localized\x0adocumentation.\x0a</p>\x0a",
+
+	"doc/download.js": "//\x20var\x20controller;\x0a\x0aclass\x20DownloadsController\x20{\x0a\x0a\x20\x20constructor()\x20{\x0a\x20\x20\x20\x20//\x20Parts\x20of\x20tabbed\x20section.\x0a\x20\x20\x20\x20this.tablist\x20=\x20document.querySelector('.js-tabSection');\x0a\x20\x20\x20\x20this.tabs\x20=\x20this.tablist.querySelectorAll('[role=\"tab\"]');\x0a\x20\x20\x20\x20this.panels\x20=\x20document.querySelectorAll('[role=\"tabpanel\"]');\x0a\x0a\x20\x20\x20\x20//\x20OS\x20for\x20which\x20to\x20display\x20download\x20and\x20install\x20steps.\x0a\x20\x20\x20\x20this.osName\x20=\x20'Unknown\x20OS';\x0a\x0a\x20\x20\x20\x20//\x20URL\x20to\x20JSON\x20containing\x20list\x20of\x20installer\x20downloads.\x0a\x20\x20\x20\x20const\x20fileListUrl\x20=\x20'https://golang.org/dl/?mode=json';\x0a\x20\x20\x20\x20this.activeTabIndex\x20=\x200;\x0a\x0a\x20\x20\x20\x20//\x20Get\x20the\x20install\x20file\x20list,\x20then\x20get\x20names\x20and\x20sizes\x0a\x20\x20\x20\x20//\x20for\x20each\x20OS\x20supported\x20on\x20the\x20install\x20page.\x0a\x20\x20\x20\x20fetch(fileListUrl)\x0a\x20\x20\x20\x20\x20\x20.then((response)\x20=>\x20response.json())\x0a\x20\x20\x20\x20\x20\x20.then((data)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20data[0]['files'];\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(var\x20i\x20=\x200;\x20i\x20<\x20files.length;\x20i++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20file\x20=\x20files[i].filename;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20fileSize\x20=\x20files[i].size;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(file.match('.linux-amd64.tar.gz$'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.linuxFileName\x20=\x20file;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.linuxFileSize\x20=\x20Math.round(fileSize\x20/\x20Math.pow(1024,\x202));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(file.match('.darwin-amd64(-osx10.8)?.pkg$'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.macFileName\x20=\x20file;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.macFileSize\x20=\x20Math.round(fileSize\x20/\x20Math.pow(1024,\x202));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(file.match('.windows-amd64.msi$'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.windowsFileName\x20=\x20file;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.windowsFileSize\x20=\x20Math.round(fileSize\x20/\x20Math.pow(1024,\x202));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.detectOS();\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.getElementById(this.osName).click();\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.setDownloadForOS(this.osName);\x0a\x20\x20\x20\x20\x20\x20})\x0a\x20\x20\x20\x20\x20\x20.catch(console.error);\x0a\x20\x20\x20\x20\x20\x20this.setEventListeners();\x0a\x20\x20}\x0a\x0a\x20\x20setEventListeners()\x20{\x0a\x20\x20\x20\x20this.tabs.forEach((tabEl)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20tabEl.addEventListener('click',\x20e\x20=>\x20this.handleTabClick((e)));\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Set\x20the\x20download\x20button\x20UI\x20for\x20a\x20specific\x20OS.\x0a\x20\x20setDownloadForOS(osName)\x20{\x0a\x20\x20\x20\x20const\x20baseURL\x20=\x20'https://golang.org/dl/';\x0a\x20\x20\x20\x20let\x20download;\x0a\x0a\x20\x20\x20\x20switch(osName){\x0a\x20\x20\x20\x20\x20\x20case\x20'linux':\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadButton').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'Download\x20Go\x20for\x20Linux';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadDescription').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.linuxFileName\x20+\x20'\x20('\x20+\x20this.linuxFileSize\x20+\x20'\x20MB)';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-download').href\x20=\x20baseURL\x20+\x20this.linuxFileName;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20'mac':\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadButton').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'Download\x20Go\x20for\x20Mac';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadDescription').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.macFileName\x20+\x20'\x20('\x20+\x20this.macFileSize\x20+\x20'\x20MB)';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-download').href\x20=\x20baseURL\x20+\x20this.macFileName;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20case\x20'windows':\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadButton').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'Download\x20Go\x20for\x20Windows';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadDescription').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.windowsFileName\x20+\x20'\x20('\x20+\x20this.windowsFileSize\x20+\x20'\x20MB)';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-download').href\x20=\x20baseURL\x20+\x20this.windowsFileName;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadButton').textContent\x20=\x20'Download\x20Go';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-downloadDescription').textContent\x20=\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'Visit\x20the\x20downloads\x20page.';\x0a\x20\x20\x20\x20\x20\x20\x20\x20document.querySelector('.js-download').href\x20=\x20baseURL;\x0a\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Detect\x20the\x20users\x20OS\x20for\x20installation\x20default.\x0a\x20\x20detectOS()\x20{\x0a\x20\x20\x20\x20if\x20(navigator.appVersion.indexOf('Linux')\x20!==\x20-1)\x20{\x0a\x20\x20\x20\x20\x20\x20this.osName\x20=\x20'linux';\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(navigator.appVersion.indexOf('Mac')\x20!==\x20-1)\x20{\x0a\x20\x20\x20\x20\x20\x20this.osName\x20=\x20'mac';\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(navigator.appVersion.indexOf('X11')\x20!==\x20-1)\x20{\x0a\x20\x20\x20\x20\x20\x20this.osName\x20=\x20'unix';\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(navigator.appVersion.indexOf('Win')\x20!==\x20-1)\x20{\x0a\x20\x20\x20\x20\x20\x20this.osName\x20=\x20'windows';\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Activates\x20the\x20tab\x20at\x20the\x20given\x20index.\x0a\x20\x20activateTab(index)\x20{\x0a\x20\x20\x20\x20this.tabs[this.activeTabIndex].setAttribute('aria-selected',\x20'false');\x0a\x20\x20\x20\x20this.tabs[this.activeTabIndex].setAttribute('tabindex',\x20'-1');\x0a\x20\x20\x20\x20this.panels[this.activeTabIndex].setAttribute('hidden',\x20'');\x0a\x20\x20\x20\x20this.tabs[index].setAttribute('aria-selected',\x20'true');\x0a\x20\x20\x20\x20this.tabs[index].setAttribute('tabindex',\x20'0');\x0a\x20\x20\x20\x20this.panels[index].removeAttribute('hidden');\x0a\x20\x20\x20\x20this.tabs[index].focus();\x0a\x20\x20\x20\x20this.activeTabIndex\x20=\x20index;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Handles\x20clicks\x20on\x20tabs.\x0a\x20\x20handleTabClick(e)\x20{\x0a\x20\x20\x20\x20const\x20el\x20=\x20(e.target);\x0a\x20\x20\x20\x20this.activateTab(Array.prototype.indexOf.call(this.tabs,\x20el));\x0a\x20\x20\x20\x20this.setDownloadForOS(el.id);\x0a\x20\x20}\x0a\x0a}\x0a\x0a//\x20Instantiate\x20controller\x20for\x20page\x20event\x20handling.\x0anew\x20DownloadsController();\x0a",
 
 	"doc/gopath_code.html": "<!--{\x0a\x09\"Title\":\x20\"How\x20to\x20Write\x20Go\x20Code\x20(with\x20GOPATH)\"\x0a}-->\x0a\x0a<h2\x20id=\"Introduction\">Introduction</h2>\x0a\x0a<p><b>\x0aIf\x20you\x20are\x20new\x20to\x20Go,\x20please\x20see\x20the\x20more\x20recent\x0a<a\x20href=\"code.html\">How\x20to\x20Write\x20Go\x20Code</a>.\x0a</b></p>\x0a\x0a<p>\x0aThis\x20document\x20demonstrates\x20the\x20development\x20of\x20a\x20simple\x20Go\x20package\x20and\x0aintroduces\x20the\x20<a\x20href=\"/cmd/go/\">go\x20tool</a>,\x20the\x20standard\x20way\x20to\x20fetch,\x0abuild,\x20and\x20install\x20Go\x20packages\x20and\x20commands.\x0a</p>\x0a\x0a<p>\x0aThe\x20<code>go</code>\x20tool\x20requires\x20you\x20to\x20organize\x20your\x20code\x20in\x20a\x20specific\x0away.\x20Please\x20read\x20this\x20document\x20carefully.\x0aIt\x20explains\x20the\x20simplest\x20way\x20to\x20get\x20up\x20and\x20running\x20with\x20your\x20Go\x20installation.\x0a</p>\x0a\x0a<p>\x0aA\x20similar\x20explanation\x20is\x20available\x20as\x20a\x0a<a\x20href=\"//www.youtube.com/watch?v=XCsL89YtqCs\">screencast</a>.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"Organization\">Code\x20organization</h2>\x0a\x0a<h3\x20id=\"Overview\">Overview</h3>\x0a\x0a<ul>\x0a\x09<li>Go\x20programmers\x20typically\x20keep\x20all\x20their\x20Go\x20code\x20in\x20a\x20single\x20<i>workspace</i>.</li>\x0a\x09<li>A\x20workspace\x20contains\x20many\x20version\x20control\x20<i>repositories</i>\x0a\x09\x20\x20\x20\x20(managed\x20by\x20Git,\x20for\x20example).</li>\x0a\x09<li>Each\x20repository\x20contains\x20one\x20or\x20more\x20<i>packages</i>.</li>\x0a\x09<li>Each\x20package\x20consists\x20of\x20one\x20or\x20more\x20Go\x20source\x20files\x20in\x20a\x20single\x20directory.</li>\x0a\x09<li>The\x20path\x20to\x20a\x20package's\x20directory\x20determines\x20its\x20<i>import\x20path</i>.</li>\x0a</ul>\x0a\x0a<p>\x0aNote\x20that\x20this\x20differs\x20from\x20other\x20programming\x20environments\x20in\x20which\x20every\x0aproject\x20has\x20a\x20separate\x20workspace\x20and\x20workspaces\x20are\x20closely\x20tied\x20to\x20version\x0acontrol\x20repositories.\x0a</p>\x0a\x0a<h3\x20id=\"Workspaces\">Workspaces</h3>\x0a\x0a<p>\x0aA\x20workspace\x20is\x20a\x20directory\x20hierarchy\x20with\x20two\x20directories\x20at\x20its\x20root:\x0a</p>\x0a\x0a<ul>\x0a<li><code>src</code>\x20contains\x20Go\x20source\x20files,\x20and\x0a<li><code>bin</code>\x20contains\x20executable\x20commands.\x0a</ul>\x0a\x0a<p>\x0aThe\x20<code>go</code>\x20tool\x20builds\x20and\x20installs\x20binaries\x20to\x20the\x20<code>bin</code>\x20directory.\x0a</p>\x0a\x0a<p>\x0aThe\x20<code>src</code>\x20subdirectory\x20typically\x20contains\x20multiple\x20version\x20control\x0arepositories\x20(such\x20as\x20for\x20Git\x20or\x20Mercurial)\x20that\x20track\x20the\x20development\x20of\x20one\x0aor\x20more\x20source\x20packages.\x0a</p>\x0a\x0a<p>\x0aTo\x20give\x20you\x20an\x20idea\x20of\x20how\x20a\x20workspace\x20looks\x20in\x20practice,\x20here's\x20an\x20example:\x0a</p>\x0a\x0a<pre>\x0abin/\x0a\x20\x20\x20\x20hello\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20executable\x0a\x20\x20\x20\x20outyet\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20executable\x0asrc/\x0a\x20\x20\x20\x20<a\x20href=\"https://github.com/golang/example/\">github.com/golang/example/</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20.git/\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20Git\x20repository\x20metadata\x0a\x09hello/\x0a\x09\x20\x20\x20\x20hello.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20source\x0a\x09outyet/\x0a\x09\x20\x20\x20\x20main.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20source\x0a\x09\x20\x20\x20\x20main_test.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20test\x20source\x0a\x09stringutil/\x0a\x09\x20\x20\x20\x20reverse.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20package\x20source\x0a\x09\x20\x20\x20\x20reverse_test.go\x20\x20\x20\x20\x20\x20\x20\x20#\x20test\x20source\x0a\x20\x20\x20\x20<a\x20href=\"https://golang.org/x/image/\">golang.org/x/image/</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20.git/\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20Git\x20repository\x20metadata\x0a\x09bmp/\x0a\x09\x20\x20\x20\x20reader.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20package\x20source\x0a\x09\x20\x20\x20\x20writer.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20package\x20source\x0a\x20\x20\x20\x20...\x20(many\x20more\x20repositories\x20and\x20packages\x20omitted)\x20...\x0a</pre>\x0a\x0a<p>\x0aThe\x20tree\x20above\x20shows\x20a\x20workspace\x20containing\x20two\x20repositories\x0a(<code>example</code>\x20and\x20<code>image</code>).\x0aThe\x20<code>example</code>\x20repository\x20contains\x20two\x20commands\x20(<code>hello</code>\x0aand\x20<code>outyet</code>)\x20and\x20one\x20library\x20(<code>stringutil</code>).\x0aThe\x20<code>image</code>\x20repository\x20contains\x20the\x20<code>bmp</code>\x20package\x0aand\x20<a\x20href=\"https://godoc.org/golang.org/x/image\">several\x20others</a>.\x0a</p>\x0a\x0a<p>\x0aA\x20typical\x20workspace\x20contains\x20many\x20source\x20repositories\x20containing\x20many\x0apackages\x20and\x20commands.\x20Most\x20Go\x20programmers\x20keep\x20<i>all</i>\x20their\x20Go\x20source\x20code\x0aand\x20dependencies\x20in\x20a\x20single\x20workspace.\x0a</p>\x0a\x0a<p>\x0aNote\x20that\x20symbolic\x20links\x20should\x20<b>not</b>\x20be\x20used\x20to\x20link\x20files\x20or\x20directories\x20into\x20your\x20workspace.\x0a</p>\x0a\x0a<p>\x0aCommands\x20and\x20libraries\x20are\x20built\x20from\x20different\x20kinds\x20of\x20source\x20packages.\x0aWe\x20will\x20discuss\x20the\x20distinction\x20<a\x20href=\"#PackageNames\">later</a>.\x0a</p>\x0a\x0a\x0a<h3\x20id=\"GOPATH\">The\x20<code>GOPATH</code>\x20environment\x20variable</h3>\x0a\x0a<p>\x0aThe\x20<code>GOPATH</code>\x20environment\x20variable\x20specifies\x20the\x20location\x20of\x20your\x0aworkspace.\x20It\x20defaults\x20to\x20a\x20directory\x20named\x20<code>go</code>\x20inside\x20your\x20home\x20directory,\x0aso\x20<code>$HOME/go</code>\x20on\x20Unix,\x0a<code>$home/go</code>\x20on\x20Plan\x209,\x0aand\x20<code>%USERPROFILE%\\go</code>\x20(usually\x20<code>C:\\Users\\YourName\\go</code>)\x20on\x20Windows.\x0a</p>\x0a\x0a<p>\x0aIf\x20you\x20would\x20like\x20to\x20work\x20in\x20a\x20different\x20location,\x20you\x20will\x20need\x20to\x0a<a\x20href=\"https://golang.org/wiki/SettingGOPATH\">set\x20<code>GOPATH</code></a>\x0ato\x20the\x20path\x20to\x20that\x20directory.\x0a(Another\x20common\x20setup\x20is\x20to\x20set\x20<code>GOPATH=$HOME</code>.)\x0aNote\x20that\x20<code>GOPATH</code>\x20must\x20<b>not</b>\x20be\x20the\x0asame\x20path\x20as\x20your\x20Go\x20installation.\x0a</p>\x0a\x0a<p>\x0aThe\x20command\x20<code>go</code>\x20<code>env</code>\x20<code>GOPATH</code>\x0aprints\x20the\x20effective\x20current\x20<code>GOPATH</code>;\x0ait\x20prints\x20the\x20default\x20location\x20if\x20the\x20environment\x20variable\x20is\x20unset.\x0a</p>\x0a\x0a<p>\x0aFor\x20convenience,\x20add\x20the\x20workspace's\x20<code>bin</code>\x20subdirectory\x0ato\x20your\x20<code>PATH</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>export\x20PATH=$PATH:$(go\x20env\x20GOPATH)/bin</b>\x0a</pre>\x0a\x0a<p>\x0aThe\x20scripts\x20in\x20the\x20rest\x20of\x20this\x20document\x20use\x20<code>$GOPATH</code>\x0ainstead\x20of\x20<code>$(go\x20env\x20GOPATH)</code>\x20for\x20brevity.\x0aTo\x20make\x20the\x20scripts\x20run\x20as\x20written\x0aif\x20you\x20have\x20not\x20set\x20GOPATH,\x0ayou\x20can\x20substitute\x20$HOME/go\x20in\x20those\x20commands\x0aor\x20else\x20run:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>export\x20GOPATH=$(go\x20env\x20GOPATH)</b>\x0a</pre>\x0a\x0a<p>\x0aTo\x20learn\x20more\x20about\x20the\x20<code>GOPATH</code>\x20environment\x20variable,\x20see\x0a<a\x20href=\"/cmd/go/#hdr-GOPATH_environment_variable\"><code>'go\x20help\x20gopath'</code></a>.\x0a</p>\x0a\x0a<h3\x20id=\"ImportPaths\">Import\x20paths</h3>\x0a\x0a<p>\x0aAn\x20<i>import\x20path</i>\x20is\x20a\x20string\x20that\x20uniquely\x20identifies\x20a\x20package.\x0aA\x20package's\x20import\x20path\x20corresponds\x20to\x20its\x20location\x20inside\x20a\x20workspace\x0aor\x20in\x20a\x20remote\x20repository\x20(explained\x20below).\x0a</p>\x0a\x0a<p>\x0aThe\x20packages\x20from\x20the\x20standard\x20library\x20are\x20given\x20short\x20import\x20paths\x20such\x20as\x0a<code>\"fmt\"</code>\x20and\x20<code>\"net/http\"</code>.\x0aFor\x20your\x20own\x20packages,\x20you\x20must\x20choose\x20a\x20base\x20path\x20that\x20is\x20unlikely\x20to\x0acollide\x20with\x20future\x20additions\x20to\x20the\x20standard\x20library\x20or\x20other\x20external\x0alibraries.\x0a</p>\x0a\x0a<p>\x0aIf\x20you\x20keep\x20your\x20code\x20in\x20a\x20source\x20repository\x20somewhere,\x20then\x20you\x20should\x20use\x20the\x0aroot\x20of\x20that\x20source\x20repository\x20as\x20your\x20base\x20path.\x0aFor\x20instance,\x20if\x20you\x20have\x20a\x20<a\x20href=\"https://github.com/\">GitHub</a>\x20account\x20at\x0a<code>github.com/user</code>,\x20that\x20should\x20be\x20your\x20base\x20path.\x0a</p>\x0a\x0a<p>\x0aNote\x20that\x20you\x20don't\x20need\x20to\x20publish\x20your\x20code\x20to\x20a\x20remote\x20repository\x20before\x20you\x0acan\x20build\x20it.\x20It's\x20just\x20a\x20good\x20habit\x20to\x20organize\x20your\x20code\x20as\x20if\x20you\x20will\x0apublish\x20it\x20someday.\x20In\x20practice\x20you\x20can\x20choose\x20any\x20arbitrary\x20path\x20name,\x0aas\x20long\x20as\x20it\x20is\x20unique\x20to\x20the\x20standard\x20library\x20and\x20greater\x20Go\x20ecosystem.\x0a</p>\x0a\x0a<p>\x0aWe'll\x20use\x20<code>github.com/user</code>\x20as\x20our\x20base\x20path.\x20Create\x20a\x20directory\x0ainside\x20your\x20workspace\x20in\x20which\x20to\x20keep\x20source\x20code:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>mkdir\x20-p\x20$GOPATH/src/github.com/user</b>\x0a</pre>\x0a\x0a\x0a<h3\x20id=\"Command\">Your\x20first\x20program</h3>\x0a\x0a<p>\x0aTo\x20compile\x20and\x20run\x20a\x20simple\x20program,\x20first\x20choose\x20a\x20package\x20path\x20(we'll\x20use\x0a<code>github.com/user/hello</code>)\x20and\x20create\x20a\x20corresponding\x20package\x20directory\x0ainside\x20your\x20workspace:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>mkdir\x20$GOPATH/src/github.com/user/hello</b>\x0a</pre>\x0a\x0a<p>\x0aNext,\x20create\x20a\x20file\x20named\x20<code>hello.go</code>\x20inside\x20that\x20directory,\x0acontaining\x20the\x20following\x20Go\x20code.\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(\"Hello,\x20world.\")\x0a}\x0a</pre>\x0a\x0a<p>\x0aNow\x20you\x20can\x20build\x20and\x20install\x20that\x20program\x20with\x20the\x20<code>go</code>\x20tool:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20install\x20github.com/user/hello</b>\x0a</pre>\x0a\x0a<p>\x0aNote\x20that\x20you\x20can\x20run\x20this\x20command\x20from\x20anywhere\x20on\x20your\x20system.\x20The\x0a<code>go</code>\x20tool\x20finds\x20the\x20source\x20code\x20by\x20looking\x20for\x20the\x0a<code>github.com/user/hello</code>\x20package\x20inside\x20the\x20workspace\x20specified\x20by\x0a<code>GOPATH</code>.\x0a</p>\x0a\x0a<p>\x0aYou\x20can\x20also\x20omit\x20the\x20package\x20path\x20if\x20you\x20run\x20<code>go\x20install</code>\x20from\x20the\x0apackage\x20directory:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>cd\x20$GOPATH/src/github.com/user/hello</b>\x0a$\x20<b>go\x20install</b>\x0a</pre>\x0a\x0a<p>\x0aThis\x20command\x20builds\x20the\x20<code>hello</code>\x20command,\x20producing\x20an\x20executable\x0abinary.\x20It\x20then\x20installs\x20that\x20binary\x20to\x20the\x20workspace's\x20<code>bin</code>\x0adirectory\x20as\x20<code>hello</code>\x20(or,\x20under\x20Windows,\x20<code>hello.exe</code>).\x0aIn\x20our\x20example,\x20that\x20will\x20be\x20<code>$GOPATH/bin/hello</code>,\x20which\x20is\x0a<code>$HOME/go/bin/hello</code>.\x0a</p>\x0a\x0a<p>\x0aThe\x20<code>go</code>\x20tool\x20will\x20only\x20print\x20output\x20when\x20an\x20error\x20occurs,\x20so\x20if\x0athese\x20commands\x20produce\x20no\x20output\x20they\x20have\x20executed\x20successfully.\x0a</p>\x0a\x0a<p>\x0aYou\x20can\x20now\x20run\x20the\x20program\x20by\x20typing\x20its\x20full\x20path\x20at\x20the\x20command\x20line:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>$GOPATH/bin/hello</b>\x0aHello,\x20world.\x0a</pre>\x0a\x0a<p>\x0aOr,\x20as\x20you\x20have\x20added\x20<code>$GOPATH/bin</code>\x20to\x20your\x20<code>PATH</code>,\x0ajust\x20type\x20the\x20binary\x20name:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>hello</b>\x0aHello,\x20world.\x0a</pre>\x0a\x0a<p>\x0aIf\x20you're\x20using\x20a\x20source\x20control\x20system,\x20now\x20would\x20be\x20a\x20good\x20time\x20to\x20initialize\x0aa\x20repository,\x20add\x20the\x20files,\x20and\x20commit\x20your\x20first\x20change.\x20Again,\x20this\x20step\x20is\x0aoptional:\x20you\x20do\x20not\x20need\x20to\x20use\x20source\x20control\x20to\x20write\x20Go\x20code.\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>cd\x20$GOPATH/src/github.com/user/hello</b>\x0a$\x20<b>git\x20init</b>\x0aInitialized\x20empty\x20Git\x20repository\x20in\x20/home/user/go/src/github.com/user/hello/.git/\x0a$\x20<b>git\x20add\x20hello.go</b>\x0a$\x20<b>git\x20commit\x20-m\x20\"initial\x20commit\"</b>\x0a[master\x20(root-commit)\x200b4507d]\x20initial\x20commit\x0a\x201\x20file\x20changed,\x207\x20insertion(+)\x0a\x20create\x20mode\x20100644\x20hello.go\x0a</pre>\x0a\x0a<p>\x0aPushing\x20the\x20code\x20to\x20a\x20remote\x20repository\x20is\x20left\x20as\x20an\x20exercise\x20for\x20the\x20reader.\x0a</p>\x0a\x0a\x0a<h3\x20id=\"Library\">Your\x20first\x20library</h3>\x0a\x0a<p>\x0aLet's\x20write\x20a\x20library\x20and\x20use\x20it\x20from\x20the\x20<code>hello</code>\x20program.\x0a</p>\x0a\x0a<p>\x0aAgain,\x20the\x20first\x20step\x20is\x20to\x20choose\x20a\x20package\x20path\x20(we'll\x20use\x0a<code>github.com/user/stringutil</code>)\x20and\x20create\x20the\x20package\x20directory:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>mkdir\x20$GOPATH/src/github.com/user/stringutil</b>\x0a</pre>\x0a\x0a<p>\x0aNext,\x20create\x20a\x20file\x20named\x20<code>reverse.go</code>\x20in\x20that\x20directory\x20with\x20the\x0afollowing\x20contents.\x0a</p>\x0a\x0a<pre>\x0a//\x20Package\x20stringutil\x20contains\x20utility\x20functions\x20for\x20working\x20with\x20strings.\x0apackage\x20stringutil\x0a\x0a//\x20Reverse\x20returns\x20its\x20argument\x20string\x20reversed\x20rune-wise\x20left\x20to\x20right.\x0afunc\x20Reverse(s\x20string)\x20string\x20{\x0a\x09r\x20:=\x20[]rune(s)\x0a\x09for\x20i,\x20j\x20:=\x200,\x20len(r)-1;\x20i\x20&lt;\x20len(r)/2;\x20i,\x20j\x20=\x20i+1,\x20j-1\x20{\x0a\x09\x09r[i],\x20r[j]\x20=\x20r[j],\x20r[i]\x0a\x09}\x0a\x09return\x20string(r)\x0a}\x0a</pre>\x0a\x0a<p>\x0aNow,\x20test\x20that\x20the\x20package\x20compiles\x20with\x20<code>go\x20build</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20build\x20github.com/user/stringutil</b>\x0a</pre>\x0a\x0a<p>\x0aOr,\x20if\x20you\x20are\x20working\x20in\x20the\x20package's\x20source\x20directory,\x20just:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20build</b>\x0a</pre>\x0a\x0a<p>\x0aThis\x20won't\x20produce\x20an\x20output\x20file.\x0aInstead\x20it\x20saves\x20the\x20compiled\x20package\x20in\x20the\x20local\x20build\x20cache.\x0a</p>\x0a\x0a<p>\x0aAfter\x20confirming\x20that\x20the\x20<code>stringutil</code>\x20package\x20builds,\x0amodify\x20your\x20original\x20<code>hello.go</code>\x20(which\x20is\x20in\x0a<code>$GOPATH/src/github.com/user/hello</code>)\x20to\x20use\x20it:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09<b>\"github.com/user/stringutil\"</b>\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(stringutil.Reverse(\"!oG\x20,olleH\"))\x0a}\x0a</pre>\x0a\x0a<p>\x0aInstall\x20the\x20<code>hello</code>\x20program:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20install\x20github.com/user/hello</b>\x0a</pre>\x0a\x0a<p>\x0aRunning\x20the\x20new\x20version\x20of\x20the\x20program,\x20you\x20should\x20see\x20a\x20new,\x20reversed\x20message:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>hello</b>\x0aHello,\x20Go!\x0a</pre>\x0a\x0a<p>\x0aAfter\x20the\x20steps\x20above,\x20your\x20workspace\x20should\x20look\x20like\x20this:\x0a</p>\x0a\x0a<pre>\x0abin/\x0a\x20\x20\x20\x20hello\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20executable\x0asrc/\x0a\x20\x20\x20\x20github.com/user/\x0a\x20\x20\x20\x20\x20\x20\x20\x20hello/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hello.go\x20\x20\x20\x20\x20\x20#\x20command\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20stringutil/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reverse.go\x20\x20\x20\x20#\x20package\x20source\x0a</pre>\x0a\x0a<h3\x20id=\"PackageNames\">Package\x20names</h3>\x0a\x0a<p>\x0aThe\x20first\x20statement\x20in\x20a\x20Go\x20source\x20file\x20must\x20be\x0a</p>\x0a\x0a<pre>\x0apackage\x20<i>name</i>\x0a</pre>\x0a\x0a<p>\x0awhere\x20<code><i>name</i></code>\x20is\x20the\x20package's\x20default\x20name\x20for\x20imports.\x0a(All\x20files\x20in\x20a\x20package\x20must\x20use\x20the\x20same\x20<code><i>name</i></code>.)\x0a</p>\x0a\x0a<p>\x0aGo's\x20convention\x20is\x20that\x20the\x20package\x20name\x20is\x20the\x20last\x20element\x20of\x20the\x0aimport\x20path:\x20the\x20package\x20imported\x20as\x20\"<code>crypto/rot13</code>\"\x0ashould\x20be\x20named\x20<code>rot13</code>.\x0a</p>\x0a\x0a<p>\x0aExecutable\x20commands\x20must\x20always\x20use\x20<code>package\x20main</code>.\x0a</p>\x0a\x0a<p>\x0aThere\x20is\x20no\x20requirement\x20that\x20package\x20names\x20be\x20unique\x0aacross\x20all\x20packages\x20linked\x20into\x20a\x20single\x20binary,\x0aonly\x20that\x20the\x20import\x20paths\x20(their\x20full\x20file\x20names)\x20be\x20unique.\x0a</p>\x0a\x0a<p>\x0aSee\x20<a\x20href=\"/doc/effective_go.html#names\">Effective\x20Go</a>\x20to\x20learn\x20more\x20about\x0aGo's\x20naming\x20conventions.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"Testing\">Testing</h2>\x0a\x0a<p>\x0aGo\x20has\x20a\x20lightweight\x20test\x20framework\x20composed\x20of\x20the\x20<code>go\x20test</code>\x0acommand\x20and\x20the\x20<code>testing</code>\x20package.\x0a</p>\x0a\x0a<p>\x0aYou\x20write\x20a\x20test\x20by\x20creating\x20a\x20file\x20with\x20a\x20name\x20ending\x20in\x20<code>_test.go</code>\x0athat\x20contains\x20functions\x20named\x20<code>TestXXX</code>\x20with\x20signature\x0a<code>func\x20(t\x20*testing.T)</code>.\x0aThe\x20test\x20framework\x20runs\x20each\x20such\x20function;\x0aif\x20the\x20function\x20calls\x20a\x20failure\x20function\x20such\x20as\x20<code>t.Error</code>\x20or\x0a<code>t.Fail</code>,\x20the\x20test\x20is\x20considered\x20to\x20have\x20failed.\x0a</p>\x0a\x0a<p>\x0aAdd\x20a\x20test\x20to\x20the\x20<code>stringutil</code>\x20package\x20by\x20creating\x20the\x20file\x0a<code>$GOPATH/src/github.com/user/stringutil/reverse_test.go</code>\x20containing\x0athe\x20following\x20Go\x20code.\x0a</p>\x0a\x0a<pre>\x0apackage\x20stringutil\x0a\x0aimport\x20\"testing\"\x0a\x0afunc\x20TestReverse(t\x20*testing.T)\x20{\x0a\x09cases\x20:=\x20[]struct\x20{\x0a\x09\x09in,\x20want\x20string\x0a\x09}{\x0a\x09\x09{\"Hello,\x20world\",\x20\"dlrow\x20,olleH\"},\x0a\x09\x09{\"Hello,\x20\xe4\xb8\x96\xe7\x95\x8c\",\x20\"\xe7\x95\x8c\xe4\xb8\x96\x20,olleH\"},\x0a\x09\x09{\"\",\x20\"\"},\x0a\x09}\x0a\x09for\x20_,\x20c\x20:=\x20range\x20cases\x20{\x0a\x09\x09got\x20:=\x20Reverse(c.in)\x0a\x09\x09if\x20got\x20!=\x20c.want\x20{\x0a\x09\x09\x09t.Errorf(\"Reverse(%q)\x20==\x20%q,\x20want\x20%q\",\x20c.in,\x20got,\x20c.want)\x0a\x09\x09}\x0a\x09}\x0a}\x0a</pre>\x0a\x0a<p>\x0aThen\x20run\x20the\x20test\x20with\x20<code>go\x20test</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20test\x20github.com/user/stringutil</b>\x0aok\x20\x20\x09github.com/user/stringutil\x200.165s\x0a</pre>\x0a\x0a<p>\x0aAs\x20always,\x20if\x20you\x20are\x20running\x20the\x20<code>go</code>\x20tool\x20from\x20the\x20package\x0adirectory,\x20you\x20can\x20omit\x20the\x20package\x20path:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20test</b>\x0aok\x20\x20\x09github.com/user/stringutil\x200.165s\x0a</pre>\x0a\x0a<p>\x0aRun\x20<code><a\x20href=\"/cmd/go/#hdr-Test_packages\">go\x20help\x20test</a></code>\x20and\x20see\x20the\x0a<a\x20href=\"/pkg/testing/\">testing\x20package\x20documentation</a>\x20for\x20more\x20detail.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"remote\">Remote\x20packages</h2>\x0a\x0a<p>\x0aAn\x20import\x20path\x20can\x20describe\x20how\x20to\x20obtain\x20the\x20package\x20source\x20code\x20using\x20a\x0arevision\x20control\x20system\x20such\x20as\x20Git\x20or\x20Mercurial.\x20The\x20<code>go</code>\x20tool\x20uses\x0athis\x20property\x20to\x20automatically\x20fetch\x20packages\x20from\x20remote\x20repositories.\x0aFor\x20instance,\x20the\x20examples\x20described\x20in\x20this\x20document\x20are\x20also\x20kept\x20in\x20a\x0aGit\x20repository\x20hosted\x20at\x20GitHub\x0a<code><a\x20href=\"https://github.com/golang/example\">github.com/golang/example</a></code>.\x0aIf\x20you\x20include\x20the\x20repository\x20URL\x20in\x20the\x20package's\x20import\x20path,\x0a<code>go\x20get</code>\x20will\x20fetch,\x20build,\x20and\x20install\x20it\x20automatically:\x0a</p>\x0a\x0a<pre>\x0a$\x20<b>go\x20get\x20github.com/golang/example/hello</b>\x0a$\x20<b>$GOPATH/bin/hello</b>\x0aHello,\x20Go\x20examples!\x0a</pre>\x0a\x0a<p>\x0aIf\x20the\x20specified\x20package\x20is\x20not\x20present\x20in\x20a\x20workspace,\x20<code>go\x20get</code>\x0awill\x20place\x20it\x20inside\x20the\x20first\x20workspace\x20specified\x20by\x20<code>GOPATH</code>.\x0a(If\x20the\x20package\x20does\x20already\x20exist,\x20<code>go\x20get</code>\x20skips\x20the\x20remote\x0afetch\x20and\x20behaves\x20the\x20same\x20as\x20<code>go\x20install</code>.)\x0a</p>\x0a\x0a<p>\x0aAfter\x20issuing\x20the\x20above\x20<code>go\x20get</code>\x20command,\x20the\x20workspace\x20directory\x0atree\x20should\x20now\x20look\x20like\x20this:\x0a</p>\x0a\x0a<pre>\x0abin/\x0a\x20\x20\x20\x20hello\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20executable\x0asrc/\x0a\x20\x20\x20\x20github.com/golang/example/\x0a\x09.git/\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20Git\x20repository\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20hello/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hello.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20stringutil/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reverse.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20package\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reverse_test.go\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20test\x20source\x0a\x20\x20\x20\x20github.com/user/\x0a\x20\x20\x20\x20\x20\x20\x20\x20hello/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20hello.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20command\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20stringutil/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reverse.go\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20package\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reverse_test.go\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20test\x20source\x0a</pre>\x0a\x0a<p>\x0aThe\x20<code>hello</code>\x20command\x20hosted\x20at\x20GitHub\x20depends\x20on\x20the\x0a<code>stringutil</code>\x20package\x20within\x20the\x20same\x20repository.\x20The\x20imports\x20in\x0a<code>hello.go</code>\x20file\x20use\x20the\x20same\x20import\x20path\x20convention,\x20so\x20the\x0a<code>go\x20get</code>\x20command\x20is\x20able\x20to\x20locate\x20and\x20install\x20the\x20dependent\x0apackage,\x20too.\x0a</p>\x0a\x0a<pre>\x0aimport\x20\"github.com/golang/example/stringutil\"\x0a</pre>\x0a\x0a<p>\x0aThis\x20convention\x20is\x20the\x20easiest\x20way\x20to\x20make\x20your\x20Go\x20packages\x20available\x20for\x0aothers\x20to\x20use.\x0aThe\x20<a\x20href=\"//golang.org/wiki/Projects\">Go\x20Wiki</a>\x0aand\x20<a\x20href=\"//godoc.org/\">godoc.org</a>\x0aprovide\x20lists\x20of\x20external\x20Go\x20projects.\x0a</p>\x0a\x0a<p>\x0aFor\x20more\x20information\x20on\x20using\x20remote\x20repositories\x20with\x20the\x20<code>go</code>\x20tool,\x20see\x0a<code><a\x20href=\"/cmd/go/#hdr-Remote_import_paths\">go\x20help\x20importpath</a></code>.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"next\">What's\x20next</h2>\x0a\x0a<p>\x0aSubscribe\x20to\x20the\x0a<a\x20href=\"//groups.google.com/group/golang-announce\">golang-announce</a>\x0amailing\x20list\x20to\x20be\x20notified\x20when\x20a\x20new\x20stable\x20version\x20of\x20Go\x20is\x20released.\x0a</p>\x0a\x0a<p>\x0aSee\x20<a\x20href=\"/doc/effective_go.html\">Effective\x20Go</a>\x20for\x20tips\x20on\x20writing\x0aclear,\x20idiomatic\x20Go\x20code.\x0a</p>\x0a\x0a<p>\x0aTake\x20<a\x20href=\"//tour.golang.org/\">A\x20Tour\x20of\x20Go</a>\x20to\x20learn\x20the\x20language\x0aproper.\x0a</p>\x0a\x0a<p>\x0aVisit\x20the\x20<a\x20href=\"/doc/#articles\">documentation\x20page</a>\x20for\x20a\x20set\x20of\x20in-depth\x0aarticles\x20about\x20the\x20Go\x20language\x20and\x20its\x20libraries\x20and\x20tools.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"help\">Getting\x20help</h2>\x0a\x0a<p>\x0aFor\x20real-time\x20help,\x20ask\x20the\x20helpful\x20gophers\x20in\x20<code>#go-nuts</code>\x20on\x20the\x0a<a\x20href=\"https://freenode.net/\">Freenode</a>\x20IRC\x20server.\x0a</p>\x0a\x0a<p>\x0aThe\x20official\x20mailing\x20list\x20for\x20discussion\x20of\x20the\x20Go\x20language\x20is\x0a<a\x20href=\"//groups.google.com/group/golang-nuts\">Go\x20Nuts</a>.\x0a</p>\x0a\x0a<p>\x0aReport\x20bugs\x20using\x20the\x0a<a\x20href=\"//golang.org/issue\">Go\x20issue\x20tracker</a>.\x0a</p>\x0a",
 
+	"doc/install.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Download\x20and\x20install\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/install\"\x0a}-->\x0a<p>\x0a\x20\x20Download\x20and\x20install\x20Go\x20quickly\x20with\x20the\x20steps\x20described\x20here.\x0a</p>\x0a<p>For\x20other\x20content\x20on\x20installing,\x20you\x20might\x20be\x20interested\x20in:</p>\x0a<ul>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"/doc/manage-install.html\">Managing\x20Go\x20installations</a>\x20--\x20How\x20to\x0a\x20\x20\x20\x20install\x20multiple\x20versions\x20and\x20uninstall.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"/doc/install-source.html\">Installing\x20Go\x20from\x20source</a>\x20--\x20How\x20to\x0a\x20\x20\x20\x20check\x20out\x20the\x20sources,\x20build\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.\x0a\x20\x20</li>\x0a</ul>\x0a<h2\x20id=\"download\">1.\x20Go\x20download.</h2>\x0a<p>\x0a\x20\x20Click\x20the\x20button\x20below\x20to\x20download\x20the\x20Go\x20installer.\x0a</p>\x0a<p>\x0a\x20\x20<a\x20href=\"/dl/\"\x20id=\"start\"\x20class=\"download\x20js-download\">\x0a\x20\x20\x20\x20<span\x20id=\"download-button\"\x20class=\"big\x20js-downloadButton\">Download\x20Go</span>\x0a\x20\x20\x20\x20<span\x20id=\"download-description\"\x20class=\"desc\x20js-downloadDescription\"></span>\x0a\x20\x20</a>\x0a</p>\x0a<p>\x0a\x20\x20Don't\x20see\x20your\x20operating\x20system\x20here?\x20Try\x20one\x20of\x20the\x0a\x20\x20<a\x20href=\"https://golang.org/dl/\">other\x20downloads</a>.\x0a</p>\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20By\x20default,\x20the\x20<code>go</code>\x20command\x20downloads\x20and\x0a\x20\x20authenticates\x20modules\x20using\x20the\x20Go\x20module\x20mirror\x20and\x20Go\x20checksum\x20database\x0a\x20\x20run\x20by\x20Google.\x20<a\x20href=\"https://golang.org/dl\">Learn\x20more.</a>\x0a</aside>\x0a<h2\x20id=\"install\">2.\x20Go\x20install.</h2>\x0a<p>\x0a\x20\x20Select\x20the\x20tab\x20for\x20your\x20computer's\x20operating\x20system\x20below,\x20then\x20follow\x20its\x0a\x20\x20installation\x20instructions.\x0a</p>\x0a<div\x20id=\"os-install-tabs\"\x20class=\"TabSection\x20js-tabSection\">\x0a\x20\x20<div\x20id=\"os-install-tablist\"\x20class=\"TabSection-tabList\"\x20role=\"tablist\">\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20role=\"tab\"\x0a\x20\x20\x20\x20\x20\x20aria-selected=\"true\"\x0a\x20\x20\x20\x20\x20\x20aria-controls=\"linux-tab\"\x0a\x20\x20\x20\x20\x20\x20id=\"linux\"\x0a\x20\x20\x20\x20\x20\x20tabindex=\"0\"\x0a\x20\x20\x20\x20\x20\x20class=\"TabSection-tab\x20active\"\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20Linux\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20role=\"tab\"\x0a\x20\x20\x20\x20\x20\x20aria-selected=\"false\"\x0a\x20\x20\x20\x20\x20\x20aria-controls=\"mac-tab\"\x0a\x20\x20\x20\x20\x20\x20id=\"mac\"\x0a\x20\x20\x20\x20\x20\x20tabindex=\"-1\"\x0a\x20\x20\x20\x20\x20\x20class=\"TabSection-tab\"\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20Mac\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20role=\"tab\"\x0a\x20\x20\x20\x20\x20\x20aria-selected=\"false\"\x0a\x20\x20\x20\x20\x20\x20aria-controls=\"windows-tab\"\x0a\x20\x20\x20\x20\x20\x20id=\"windows\"\x0a\x20\x20\x20\x20\x20\x20tabindex=\"-1\"\x0a\x20\x20\x20\x20\x20\x20class=\"TabSection-tab\"\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20Windows\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x20\x20<div\x0a\x20\x20\x20\x20role=\"tabpanel\"\x0a\x20\x20\x20\x20id=\"linux-tab\"\x0a\x20\x20\x20\x20class=\"TabSection-tabPanel\"\x0a\x20\x20\x20\x20aria-labelledby=\"linux\"\x0a\x20\x20>\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20If\x20you\x20have\x20a\x20previous\x20version\x20of\x20Go\x20installed,\x20be\x20sure\x20to\x0a\x20\x20\x20\x20\x20\x20<a\x20href=\"manage-install\">remove\x20it</a>\x20before\x20installing\x20another.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Download\x20the\x20archive\x20and\x20extract\x20it\x20into\x20/usr/local,\x20creating\x20a\x20Go\x20tree\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20/usr/local/go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20For\x20example,\x20run\x20the\x20following\x20as\x20root\x20or\x20through\x20<code>sudo</code>:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0atar\x20-C\x20/usr/local\x20-xzf\x20go1.14.3.linux-amd64.tar.gz\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20/usr/local/go/bin\x20to\x20the\x20<code>PATH</code>\x20environment\x20variable.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20You\x20can\x20do\x20this\x20by\x20adding\x20the\x20following\x20line\x20to\x20your\x20$HOME/.profile\x20or\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/etc/profile\x20(for\x20a\x20system-wide\x20installation):\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0aexport\x20PATH=$PATH:/usr/local/go/bin\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Note:</strong>\x20Changes\x20made\x20to\x20a\x20profile\x20file\x20may\x20not\x20apply\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20until\x20the\x20next\x20time\x20you\x20log\x20into\x20your\x20computer.\x20To\x20apply\x20the\x20changes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20immediately,\x20just\x20run\x20the\x20shell\x20commands\x20directly\x20or\x20execute\x20them\x20from\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20profile\x20using\x20a\x20command\x20such\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>source\x20$HOME/.profile</code>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20go\x20version\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.</li>\x0a\x20\x20\x20\x20</ol>\x0a\x20\x20</div>\x0a\x20\x20<div\x0a\x20\x20\x20\x20role=\"tabpanel\"\x0a\x20\x20\x20\x20id=\"mac-tab\"\x0a\x20\x20\x20\x20class=\"TabSection-tabPanel\"\x0a\x20\x20\x20\x20aria-labelledby=\"mac\"\x0a\x20\x20\x20\x20hidden\x0a\x20\x20>\x0a\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20package\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x0a\x20\x20\x20\x20\x20\x20\x20\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20package\x20installs\x20the\x20Go\x20distribution\x20to\x20/usr/local/go.\x20The\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20should\x20put\x20the\x20/usr/local/go/bin\x20directory\x20in\x20your\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>PATH</code>\x20environment\x20variable.\x20You\x20may\x20need\x20to\x20restart\x20any\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20open\x20Terminal\x20sessions\x20for\x20the\x20change\x20to\x20take\x20effect.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20go\x20version\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.</li>\x0a\x20\x20\x20\x20</ol>\x0a\x20\x20</div>\x0a\x20\x20<div\x0a\x20\x20\x20\x20role=\"tabpanel\"\x0a\x20\x20\x20\x20id=\"windows-tab\"\x0a\x20\x20\x20\x20class=\"TabSection-tabPanel\"\x0a\x20\x20\x20\x20aria-labelledby=\"windows\"\x0a\x20\x20\x20\x20hidden\x0a\x20\x20>\x0a\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20MSI\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20By\x20default,\x20the\x20installer\x20will\x20install\x20Go\x20to\x20C:\\Go.\x20You\x20can\x20change\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20location\x20as\x20needed.\x20After\x20installing,\x20you\x20will\x20need\x20to\x20close\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reopen\x20any\x20open\x20command\x20prompts\x20so\x20that\x20changes\x20to\x20the\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20made\x20by\x20the\x20installer\x20are\x20reflected\x20at\x20the\x20command\x20prompt.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20<strong>Windows</strong>,\x20click\x20the\x20<strong>Start</strong>\x20menu.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20menu's\x20search\x20box,\x20type\x20<code>cmd</code>,\x20then\x20press\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Enter</strong>\x20key.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20Command\x20Prompt\x20window\x20that\x20appears,\x20type\x20the\x20following\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20go\x20version\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ol>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ol>\x0a\x20\x20</div>\x0a</div>\x0a<h2\x20id=\"code\">3.\x20Go\x20code.</h2>\x0a<p>\x0a\x20\x20You're\x20set\x20up!\x20Visit\x20the\x0a\x20\x20<a\x20href=\"tutorial/getting-started.html\">Getting\x20Started\x20tutorial</a>\x20to\x20write\x0a\x20\x20some\x20simple\x20Go\x20code.\x20It\x20takes\x20about\x2010\x20minutes\x20to\x20complete.\x0a</p>\x0a\x0a<script\x20async\x20src=\"/doc/download.js\"></script>",
+
+	"doc/install-source.html": "<!--{\x0a\x09\"Title\":\x20\"Installing\x20Go\x20from\x20source\",\x0a\x09\"Path\":\x20\"/doc/install/source\"\x0a}-->\x0a\x0a<p>This\x20topic\x20describes\x20how\x20to\x20build\x20and\x20run\x20Go\x20from\x20source\x20code.\x20To\x20install\x20with\x20an\x20installer,\x20see\x20<a\x20href=\"/doc/install.html\">Download\x20and\x20install</a>.</p>\x0a\x0a<h2\x20id=\"introduction\">Introduction</h2>\x0a\x0a<p>\x0aGo\x20is\x20an\x20open\x20source\x20project,\x20distributed\x20under\x20a\x0a<a\x20href=\"/LICENSE\">BSD-style\x20license</a>.\x0aThis\x20document\x20explains\x20how\x20to\x20check\x20out\x20the\x20sources,\x0abuild\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.\x0a</p>\x0a\x0a<p>\x0aMost\x20users\x20don't\x20need\x20to\x20do\x20this,\x20and\x20will\x20instead\x20install\x0afrom\x20precompiled\x20binary\x20packages\x20as\x20described\x20in\x0a<a\x20href=\"/doc/install\">Download\x20and\x20install</a>,\x0aa\x20much\x20simpler\x20process.\x0aIf\x20you\x20want\x20to\x20help\x20develop\x20what\x20goes\x20into\x20those\x20precompiled\x0apackages,\x20though,\x20read\x20on.\x0a</p>\x0a\x0a<div\x20class=\"detail\">\x0a\x0a<p>\x0aThere\x20are\x20two\x20official\x20Go\x20compiler\x20toolchains.\x0aThis\x20document\x20focuses\x20on\x20the\x20<code>gc</code>\x20Go\x0acompiler\x20and\x20tools.\x0aFor\x20information\x20on\x20how\x20to\x20work\x20on\x20<code>gccgo</code>,\x20a\x20more\x20traditional\x0acompiler\x20using\x20the\x20GCC\x20back\x20end,\x20see\x0a<a\x20href=\"/doc/install/gccgo\">Setting\x20up\x20and\x20using\x20gccgo</a>.\x0a</p>\x0a\x0a<p>\x0aThe\x20Go\x20compilers\x20support\x20the\x20following\x20instruction\x20sets:\x0a\x0a<dl>\x0a<dt>\x0a\x20\x20<code>amd64</code>,\x20<code>386</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x20<code>x86</code>\x20instruction\x20set,\x2064-\x20and\x2032-bit.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>arm64</code>,\x20<code>arm</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x20<code>ARM</code>\x20instruction\x20set,\x2064-bit\x20(<code>AArch64</code>)\x20and\x2032-bit.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>mips64</code>,\x20<code>mips64le</code>,\x20<code>mips</code>,\x20\x20<code>mipsle</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x20<code>MIPS</code>\x20instruction\x20set,\x20big-\x20and\x20little-endian,\x2064-\x20and\x2032-bit.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>ppc64</code>,\x20<code>ppc64le</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x2064-bit\x20PowerPC\x20instruction\x20set,\x20big-\x20and\x20little-endian.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>riscv64</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x2064-bit\x20RISC-V\x20instruction\x20set.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>s390x</code>\x0a</dt>\x0a<dd>\x0a\x20\x20The\x20IBM\x20z/Architecture.\x0a</dd>\x0a<dt>\x0a\x20\x20<code>wasm</code>\x0a</dt>\x0a<dd>\x0a\x20\x20<a\x20href=\"https://webassembly.org\">WebAssembly</a>.\x0a</dd>\x0a</dl>\x0a</p>\x0a\x0a<p>\x0aThe\x20compilers\x20can\x20target\x20the\x20AIX,\x20Android,\x20DragonFly\x20BSD,\x20FreeBSD,\x0aIllumos,\x20Linux,\x20macOS/iOS\x20(Darwin),\x20NetBSD,\x20OpenBSD,\x20Plan\x209,\x20Solaris,\x0aand\x20Windows\x20operating\x20systems\x20(although\x20not\x20all\x20operating\x20systems\x0asupport\x20all\x20architectures).\x0a</p>\x0a\x0a<p>\x0aA\x20list\x20of\x20ports\x20which\x20are\x20considered\x20\"first\x20class\"\x20is\x20available\x20at\x20the\x0a<a\x20href=\"/wiki/PortingPolicy#first-class-ports\">first\x20class\x20ports</a>\x0awiki\x20page.\x0a</p>\x0a\x0a<p>\x0aThe\x20full\x20set\x20of\x20supported\x20combinations\x20is\x20listed\x20in\x20the\x0adiscussion\x20of\x20<a\x20href=\"#environment\">environment\x20variables</a>\x20below.\x0a</p>\x0a\x0a<p>\x0aSee\x20the\x20main\x20installation\x20page\x20for\x20the\x20<a\x20href=\"/doc/install#requirements\">overall\x20system\x20requirements</a>.\x0aThe\x20following\x20additional\x20constraints\x20apply\x20to\x20systems\x20that\x20can\x20be\x20built\x20only\x20from\x20source:\x0a</p>\x0a\x0a<ul>\x0a<li>For\x20Linux\x20on\x20PowerPC\x2064-bit,\x20the\x20minimum\x20supported\x20kernel\x20version\x20is\x202.6.37,\x20meaning\x20that\x0aGo\x20does\x20not\x20support\x20CentOS\x206\x20on\x20these\x20systems.\x0a</li>\x0a</ul>\x0a\x20\x0a</div>\x0a\x0a<h2\x20id=\"go14\">Install\x20Go\x20compiler\x20binaries\x20for\x20bootstrap</h2>\x0a\x0a<p>\x0aThe\x20Go\x20toolchain\x20is\x20written\x20in\x20Go.\x20To\x20build\x20it,\x20you\x20need\x20a\x20Go\x20compiler\x20installed.\x0aThe\x20scripts\x20that\x20do\x20the\x20initial\x20build\x20of\x20the\x20tools\x20look\x20for\x20a\x20\"go\"\x20command\x0ain\x20<code>$PATH</code>,\x20so\x20as\x20long\x20as\x20you\x20have\x20Go\x20installed\x20in\x20your\x0asystem\x20and\x20configured\x20in\x20your\x20<code>$PATH</code>,\x20you\x20are\x20ready\x20to\x20build\x20Go\x0afrom\x20source.\x20\x0aOr\x20if\x20you\x20prefer\x20you\x20can\x20set\x20<code>$GOROOT_BOOTSTRAP</code>\x20to\x20the\x0aroot\x20of\x20a\x20Go\x20installation\x20to\x20use\x20to\x20build\x20the\x20new\x20Go\x20toolchain;\x0a<code>$GOROOT_BOOTSTRAP/bin/go</code>\x20should\x20be\x20the\x20go\x20command\x20to\x20use.</p>\x0a\x0a<h3\x20id=\"bootstrapFromBinaryRelease\">Bootstrap\x20toolchain\x20from\x20binary\x20release</h3>\x0a\x0a<p>\x0aTo\x20use\x20a\x20binary\x20release\x20as\x20a\x20bootstrap\x20toolchain,\x20see\x0a<a\x20href=\"/dl/\">the\x20downloads\x20page</a>\x20or\x20use\x20any\x20other\x0apackaged\x20Go\x20distribution.\x0a</p>\x0a\x0a<h3\x20id=\"bootstrapFromSource\">Bootstrap\x20toolchain\x20from\x20source</h3>\x0a\x0a<p>\x0aTo\x20build\x20a\x20bootstrap\x20toolchain\x20from\x20source,\x20use\x0aeither\x20the\x20git\x20branch\x20<code>release-branch.go1.4</code>\x20or\x0a<a\x20href=\"https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz\">go1.4-bootstrap-20171003.tar.gz</a>,\x0awhich\x20contains\x20the\x20Go\x201.4\x20source\x20code\x20plus\x20accumulated\x20fixes\x0ato\x20keep\x20the\x20tools\x20running\x20on\x20newer\x20operating\x20systems.\x0a(Go\x201.4\x20was\x20the\x20last\x20distribution\x20in\x20which\x20the\x20toolchain\x20was\x20written\x20in\x20C.)\x0aAfter\x20unpacking\x20the\x20Go\x201.4\x20source,\x20<code>cd</code>\x20to\x0athe\x20<code>src</code>\x20subdirectory,\x20set\x20<code>CGO_ENABLED=0</code>\x20in\x0athe\x20environment,\x20and\x20run\x20<code>make.bash</code>\x20(or,\x0aon\x20Windows,\x20<code>make.bat</code>).\x0a</p>\x0a\x0a<p>\x0aOnce\x20the\x20Go\x201.4\x20source\x20has\x20been\x20unpacked\x20into\x20your\x20GOROOT_BOOTSTRAP\x20directory,\x0ayou\x20must\x20keep\x20this\x20git\x20clone\x20instance\x20checked\x20out\x20to\x20branch\x0a<code>release-branch.go1.4</code>.\x20\x20Specifically,\x20do\x20not\x20attempt\x20to\x20reuse\x0athis\x20git\x20clone\x20in\x20the\x20later\x20step\x20named\x20\"Fetch\x20the\x20repository.\"\x20\x20The\x20go1.4\x0abootstrap\x20toolchain\x20<b>must\x20be\x20able</b>\x20to\x20properly\x20traverse\x20the\x20go1.4\x20sources\x0athat\x20it\x20assumes\x20are\x20present\x20under\x20this\x20repository\x20root.\x0a</p>\x0a\x0a<h3\x20id=\"bootstrapFromCrosscompiledSource\">Bootstrap\x20toolchain\x20from\x20cross-compiled\x20source</h3>\x0a\x0a<p>\x0aTo\x20cross-compile\x20a\x20bootstrap\x20toolchain\x20from\x20source,\x20which\x20is\x0anecessary\x20on\x20systems\x20Go\x201.4\x20did\x20not\x20target\x20(for\x0aexample,\x20<code>linux/ppc64le</code>),\x20install\x20Go\x20on\x20a\x20different\x20system\x0aand\x20run\x20<a\x20href=\"/src/bootstrap.bash\">bootstrap.bash</a>.\x0a</p>\x0a\x0a<p>\x0aWhen\x20run\x20as\x20(for\x20example)\x0a</p>\x0a\x0a<pre>\x0a$\x20GOOS=linux\x20GOARCH=ppc64\x20./bootstrap.bash\x0a</pre>\x0a\x0a<p>\x0a<code>bootstrap.bash</code>\x20cross-compiles\x20a\x20toolchain\x20for\x20that\x20<code>GOOS/GOARCH</code>\x0acombination,\x20leaving\x20the\x20resulting\x20tree\x20in\x20<code>../../go-${GOOS}-${GOARCH}-bootstrap</code>.\x0aThat\x20tree\x20can\x20be\x20copied\x20to\x20a\x20machine\x20of\x20the\x20given\x20target\x20type\x0aand\x20used\x20as\x20<code>GOROOT_BOOTSTRAP</code>\x20to\x20bootstrap\x20a\x20local\x20build.\x0a</p>\x0a\x0a<h3\x20id=\"bootstrapFromGccgo\">Bootstrap\x20toolchain\x20using\x20gccgo</h3>\x0a\x0a<p>\x0aTo\x20use\x20gccgo\x20as\x20the\x20bootstrap\x20toolchain,\x20you\x20need\x20to\x20arrange\x0afor\x20<code>$GOROOT_BOOTSTRAP/bin/go</code>\x20to\x20be\x20the\x20go\x20tool\x20that\x20comes\x0aas\x20part\x20of\x20gccgo\x205.\x20For\x20example\x20on\x20Ubuntu\x20Vivid:\x0a</p>\x0a\x0a<pre>\x0a$\x20sudo\x20apt-get\x20install\x20gccgo-5\x0a$\x20sudo\x20update-alternatives\x20--set\x20go\x20/usr/bin/go-5\x0a$\x20GOROOT_BOOTSTRAP=/usr\x20./make.bash\x0a</pre>\x0a\x0a<h2\x20id=\"git\">Install\x20Git,\x20if\x20needed</h2>\x0a\x0a<p>\x0aTo\x20perform\x20the\x20next\x20step\x20you\x20must\x20have\x20Git\x20installed.\x20(Check\x20that\x20you\x0ahave\x20a\x20<code>git</code>\x20command\x20before\x20proceeding.)\x0a</p>\x0a\x0a<p>\x0aIf\x20you\x20do\x20not\x20have\x20a\x20working\x20Git\x20installation,\x0afollow\x20the\x20instructions\x20on\x20the\x0a<a\x20href=\"https://git-scm.com/downloads\">Git\x20downloads</a>\x20page.\x0a</p>\x0a\x0a<h2\x20id=\"ccompiler\">(Optional)\x20Install\x20a\x20C\x20compiler</h2>\x0a\x0a<p>\x0aTo\x20build\x20a\x20Go\x20installation\x0awith\x20<code><a\x20href=\"/cmd/cgo\">cgo</a></code>\x20support,\x20which\x20permits\x20Go\x0aprograms\x20to\x20import\x20C\x20libraries,\x20a\x20C\x20compiler\x20such\x20as\x20<code>gcc</code>\x0aor\x20<code>clang</code>\x20must\x20be\x20installed\x20first.\x20Do\x20this\x20using\x20whatever\x0ainstallation\x20method\x20is\x20standard\x20on\x20the\x20system.\x0a</p>\x0a\x0a<p>\x0aTo\x20build\x20without\x20<code>cgo</code>,\x20set\x20the\x20environment\x20variable\x0a<code>CGO_ENABLED=0</code>\x20before\x20running\x20<code>all.bash</code>\x20or\x0a<code>make.bash</code>.\x0a</p>\x0a\x0a<h2\x20id=\"fetch\">Fetch\x20the\x20repository</h2>\x0a\x0a<p>Change\x20to\x20the\x20directory\x20where\x20you\x20intend\x20to\x20install\x20Go,\x20and\x20make\x20sure\x0athe\x20<code>goroot</code>\x20directory\x20does\x20not\x20exist.\x20Then\x20clone\x20the\x20repository\x0aand\x20check\x20out\x20the\x20latest\x20release\x20tag\x20(<code\x20class=\"versionTag\">go1.12</code>,\x0afor\x20example):</p>\x0a\x0a<pre>\x0a$\x20git\x20clone\x20https://go.googlesource.com/go\x20goroot\x0a$\x20cd\x20goroot\x0a$\x20git\x20checkout\x20<span\x20class=\"versionTag\"><i>&lt;tag&gt;</i></span>\x0a</pre>\x0a\x0a<p\x20class=\"whereTag\">\x0aWhere\x20<code>&lt;tag&gt;</code>\x20is\x20the\x20version\x20string\x20of\x20the\x20release.\x0a</p>\x0a\x0a<p>Go\x20will\x20be\x20installed\x20in\x20the\x20directory\x20where\x20it\x20is\x20checked\x20out.\x20For\x20example,\x0aif\x20Go\x20is\x20checked\x20out\x20in\x20<code>$HOME/goroot</code>,\x20executables\x20will\x20be\x20installed\x0ain\x20<code>$HOME/goroot/bin</code>.\x20The\x20directory\x20may\x20have\x20any\x20name,\x20but\x20note\x0athat\x20if\x20Go\x20is\x20checked\x20out\x20in\x20<code>$HOME/go</code>,\x20it\x20will\x20conflict\x20with\x0athe\x20default\x20location\x20of\x20<code>$GOPATH</code>.\x0aSee\x20<a\x20href=\"#gopath\"><code>GOPATH</code></a>\x20below.</p>\x0a\x0a<p>\x0aReminder:\x20If\x20you\x20opted\x20to\x20also\x20compile\x20the\x20bootstrap\x20binaries\x20from\x20source\x20(in\x20an\x0aearlier\x20section),\x20you\x20still\x20need\x20to\x20<code>git\x20clone</code>\x20again\x20at\x20this\x20point\x0a(to\x20checkout\x20the\x20latest\x20<code>&lt;tag&gt;</code>),\x20because\x20you\x20must\x20keep\x20your\x0ago1.4\x20repository\x20distinct.\x0a</p>\x0a\x0a<h2\x20id=\"head\">(Optional)\x20Switch\x20to\x20the\x20master\x20branch</h2>\x0a\x0a<p>If\x20you\x20intend\x20to\x20modify\x20the\x20go\x20source\x20code,\x20and\x0a<a\x20href=\"/doc/contribute.html\">contribute\x20your\x20changes</a>\x0ato\x20the\x20project,\x20then\x20move\x20your\x20repository\x0aoff\x20the\x20release\x20branch,\x20and\x20onto\x20the\x20master\x20(development)\x20branch.\x0aOtherwise,\x20skip\x20this\x20step.</p>\x0a\x0a<pre>\x0a$\x20git\x20checkout\x20master\x0a</pre>\x0a\x0a<h2\x20id=\"install\">Install\x20Go</h2>\x0a\x0a<p>\x0aTo\x20build\x20the\x20Go\x20distribution,\x20run\x0a</p>\x0a\x0a<pre>\x0a$\x20cd\x20src\x0a$\x20./all.bash\x0a</pre>\x0a\x0a<p>\x0a(To\x20build\x20under\x20Windows\x20use\x20<code>all.bat</code>.)\x0a</p>\x0a\x0a<p>\x0aIf\x20all\x20goes\x20well,\x20it\x20will\x20finish\x20by\x20printing\x20output\x20like:\x0a</p>\x0a\x0a<pre>\x0aALL\x20TESTS\x20PASSED\x0a\x0a---\x0aInstalled\x20Go\x20for\x20linux/amd64\x20in\x20/home/you/go.\x0aInstalled\x20commands\x20in\x20/home/you/go/bin.\x0a***\x20You\x20need\x20to\x20add\x20/home/you/go/bin\x20to\x20your\x20$PATH.\x20***\x0a</pre>\x0a\x0a<p>\x0awhere\x20the\x20details\x20on\x20the\x20last\x20few\x20lines\x20reflect\x20the\x20operating\x20system,\x0aarchitecture,\x20and\x20root\x20directory\x20used\x20during\x20the\x20install.\x0a</p>\x0a\x0a<div\x20class=\"detail\">\x0a<p>\x0aFor\x20more\x20information\x20about\x20ways\x20to\x20control\x20the\x20build,\x20see\x20the\x20discussion\x20of\x0a<a\x20href=\"#environment\">environment\x20variables</a>\x20below.\x0a<code>all.bash</code>\x20(or\x20<code>all.bat</code>)\x20runs\x20important\x20tests\x20for\x20Go,\x0awhich\x20can\x20take\x20more\x20time\x20than\x20simply\x20building\x20Go.\x20If\x20you\x20do\x20not\x20want\x20to\x20run\x0athe\x20test\x20suite\x20use\x20<code>make.bash</code>\x20(or\x20<code>make.bat</code>)\x0ainstead.\x0a</p>\x0a</div>\x0a\x0a\x0a<h2\x20id=\"testing\">Testing\x20your\x20installation</h2>\x0a\x0a<p>\x0aCheck\x20that\x20Go\x20is\x20installed\x20correctly\x20by\x20building\x20a\x20simple\x20program.\x0a</p>\x0a\x0a<p>\x0aCreate\x20a\x20file\x20named\x20<code>hello.go</code>\x20and\x20put\x20the\x20following\x20program\x20in\x20it:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Printf(\"hello,\x20world\\n\")\x0a}\x0a</pre>\x0a\x0a<p>\x0aThen\x20run\x20it\x20with\x20the\x20<code>go</code>\x20tool:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20run\x20hello.go\x0ahello,\x20world\x0a</pre>\x0a\x0a<p>\x0aIf\x20you\x20see\x20the\x20\"hello,\x20world\"\x20message\x20then\x20Go\x20is\x20installed\x20correctly.\x0a</p>\x0a\x0a<h2\x20id=\"gopath\">Set\x20up\x20your\x20work\x20environment</h2>\x0a\x0a<p>\x0aYou're\x20almost\x20done.\x0aYou\x20just\x20need\x20to\x20do\x20a\x20little\x20more\x20setup.\x0a</p>\x0a\x0a<p>\x0a<a\x20href=\"/doc/code.html\"\x20class=\"download\"\x20id=\"start\">\x0a<span\x20class=\"big\">How\x20to\x20Write\x20Go\x20Code</span>\x0a<span\x20class=\"desc\">Learn\x20how\x20to\x20set\x20up\x20and\x20use\x20the\x20Go\x20tools</span>\x0a</a>\x0a</p>\x0a\x0a<p>\x0aThe\x20<a\x20href=\"/doc/code.html\">How\x20to\x20Write\x20Go\x20Code</a>\x20document\x0aprovides\x20<b>essential\x20setup\x20instructions</b>\x20for\x20using\x20the\x20Go\x20tools.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"tools\">Install\x20additional\x20tools</h2>\x0a\x0a<p>\x0aThe\x20source\x20code\x20for\x20several\x20Go\x20tools\x20(including\x20<a\x20href=\"/cmd/godoc/\">godoc</a>)\x0ais\x20kept\x20in\x20<a\x20href=\"https://golang.org/x/tools\">the\x20go.tools\x20repository</a>.\x0aTo\x20install\x20one\x20of\x20the\x20tools\x20(<code>godoc</code>\x20in\x20this\x20case):\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20get\x20golang.org/x/tools/cmd/godoc\x0a</pre>\x0a\x0a<p>\x0aTo\x20install\x20these\x20tools,\x20the\x20<code>go</code>\x20<code>get</code>\x20command\x20requires\x0athat\x20<a\x20href=\"#git\">Git</a>\x20be\x20installed\x20locally.\x0a</p>\x0a\x0a<p>\x0aYou\x20must\x20also\x20have\x20a\x20workspace\x20(<code>GOPATH</code>)\x20set\x20up;\x0asee\x20<a\x20href=\"/doc/code.html\">How\x20to\x20Write\x20Go\x20Code</a>\x20for\x20the\x20details.\x0a</p>\x0a\x0a<h2\x20id=\"community\">Community\x20resources</h2>\x0a\x0a<p>\x0aThe\x20usual\x20community\x20resources\x20such\x20as\x0a<code>#go-nuts</code>\x20on\x20the\x20<a\x20href=\"https://freenode.net/\">Freenode</a>\x20IRC\x20server\x0aand\x20the\x0a<a\x20href=\"//groups.google.com/group/golang-nuts\">Go\x20Nuts</a>\x0amailing\x20list\x20have\x20active\x20developers\x20that\x20can\x20help\x20you\x20with\x20problems\x0awith\x20your\x20installation\x20or\x20your\x20development\x20work.\x0aFor\x20those\x20who\x20wish\x20to\x20keep\x20up\x20to\x20date,\x0athere\x20is\x20another\x20mailing\x20list,\x20<a\x20href=\"//groups.google.com/group/golang-checkins\">golang-checkins</a>,\x0athat\x20receives\x20a\x20message\x20summarizing\x20each\x20checkin\x20to\x20the\x20Go\x20repository.\x0a</p>\x0a\x0a<p>\x0aBugs\x20can\x20be\x20reported\x20using\x20the\x20<a\x20href=\"//golang.org/issue/new\">Go\x20issue\x20tracker</a>.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"releases\">Keeping\x20up\x20with\x20releases</h2>\x0a\x0a<p>\x0aNew\x20releases\x20are\x20announced\x20on\x20the\x0a<a\x20href=\"//groups.google.com/group/golang-announce\">golang-announce</a>\x0amailing\x20list.\x0aEach\x20announcement\x20mentions\x20the\x20latest\x20release\x20tag,\x20for\x20instance,\x0a<code\x20class=\"versionTag\">go1.9</code>.\x0a</p>\x0a\x0a<p>\x0aTo\x20update\x20an\x20existing\x20tree\x20to\x20the\x20latest\x20release,\x20you\x20can\x20run:\x0a</p>\x0a\x0a<pre>\x0a$\x20cd\x20go/src\x0a$\x20git\x20fetch\x0a$\x20git\x20checkout\x20<span\x20class=\"versionTag\"><i>&lt;tag&gt;</i></psan>\x0a$\x20./all.bash\x0a</pre>\x0a\x0a<p\x20class=\"whereTag\">\x0aWhere\x20<code>&lt;tag&gt;</code>\x20is\x20the\x20version\x20string\x20of\x20the\x20release.\x0a</p>\x0a\x0a\x0a<h2\x20id=\"environment\">Optional\x20environment\x20variables</h2>\x0a\x0a<p>\x0aThe\x20Go\x20compilation\x20environment\x20can\x20be\x20customized\x20by\x20environment\x20variables.\x0a<i>None\x20is\x20required\x20by\x20the\x20build</i>,\x20but\x20you\x20may\x20wish\x20to\x20set\x20some\x0ato\x20override\x20the\x20defaults.\x0a</p>\x0a\x0a<ul>\x0a<li><code>$GOROOT</code>\x0a<p>\x0aThe\x20root\x20of\x20the\x20Go\x20tree,\x20often\x20<code>$HOME/go1.X</code>.\x0aIts\x20value\x20is\x20built\x20into\x20the\x20tree\x20when\x20it\x20is\x20compiled,\x20and\x0adefaults\x20to\x20the\x20parent\x20of\x20the\x20directory\x20where\x20<code>all.bash</code>\x20was\x20run.\x0aThere\x20is\x20no\x20need\x20to\x20set\x20this\x20unless\x20you\x20want\x20to\x20switch\x20between\x20multiple\x0alocal\x20copies\x20of\x20the\x20repository.\x0a</p>\x0a</li>\x0a\x0a<li><code>$GOROOT_FINAL</code>\x0a<p>\x0aThe\x20value\x20assumed\x20by\x20installed\x20binaries\x20and\x20scripts\x20when\x0a<code>$GOROOT</code>\x20is\x20not\x20set\x20explicitly.\x0aIt\x20defaults\x20to\x20the\x20value\x20of\x20<code>$GOROOT</code>.\x0aIf\x20you\x20want\x20to\x20build\x20the\x20Go\x20tree\x20in\x20one\x20location\x0abut\x20move\x20it\x20elsewhere\x20after\x20the\x20build,\x20set\x0a<code>$GOROOT_FINAL</code>\x20to\x20the\x20eventual\x20location.\x0a</p>\x0a</li>\x0a\x0a<li\x20id=\"gopath\"><code>$GOPATH</code>\x0a<p>\x0aThe\x20directory\x20where\x20Go\x20projects\x20outside\x20the\x20Go\x20distribution\x20are\x20typically\x0achecked\x20out.\x20For\x20example,\x20<code>golang.org/x/tools</code>\x20might\x20be\x20checked\x20out\x0ato\x20<code>$GOPATH/src/golang.org/x/tools</code>.\x20Executables\x20outside\x20the\x0aGo\x20distribution\x20are\x20installed\x20in\x20<code>$GOPATH/bin</code>\x20(or\x0a<code>$GOBIN</code>,\x20if\x20set).\x20Modules\x20are\x20downloaded\x20and\x20cached\x20in\x0a<code>$GOPATH/pkg/mod</code>.\x0a</p>\x0a\x0a<p>The\x20default\x20location\x20of\x20<code>$GOPATH</code>\x20is\x20<code>$HOME/go</code>,\x0aand\x20it's\x20not\x20usually\x20necessary\x20to\x20set\x20<code>GOPATH</code>\x20explicitly.\x20However,\x0aif\x20you\x20have\x20checked\x20out\x20the\x20Go\x20distribution\x20to\x20<code>$HOME/go</code>,\x0ayou\x20must\x20set\x20<code>GOPATH</code>\x20to\x20another\x20location\x20to\x20avoid\x20conflicts.\x0a</p>\x0a</li>\x0a\x0a<li><code>$GOBIN</code>\x0a<p>\x0aThe\x20directory\x20where\x20executables\x20outside\x20the\x20Go\x20distribution\x20are\x20installed\x0ausing\x20the\x20<a\x20href=\"/cmd/go\">go\x20command</a>.\x20For\x20example,\x0a<code>go\x20get\x20golang.org/x/tools/cmd/godoc</code>\x20downloads,\x20builds,\x20and\x0ainstalls\x20<code>$GOBIN/godoc</code>.\x20By\x20default,\x20<code>$GOBIN</code>\x20is\x0a<code>$GOPATH/bin</code>\x20(or\x20<code>$HOME/go/bin</code>\x20if\x20<code>GOPATH</code>\x0ais\x20not\x20set).\x20After\x20installing,\x20you\x20will\x20want\x20to\x20add\x20this\x20directory\x20to\x0ayour\x20<code>$PATH</code>\x20so\x20you\x20can\x20use\x20installed\x20tools.\x0a</p>\x0a\x0a<p>\x0aNote\x20that\x20the\x20Go\x20distribution's\x20executables\x20are\x20installed\x20in\x0a<code>$GOROOT/bin</code>\x20(for\x20executables\x20invoked\x20by\x20people)\x20or\x0a<code>$GOTOOLDIR</code>\x20(for\x20executables\x20invoked\x20by\x20the\x20go\x20command;\x0adefaults\x20to\x20<code>$GOROOT/pkg/$GOOS_GOARCH</code>)\x20instead\x20of\x0a<code>$GOBIN</code>.\x0a</p>\x0a</li>\x0a\x0a<li><code>$GOOS</code>\x20and\x20<code>$GOARCH</code>\x0a<p>\x0aThe\x20name\x20of\x20the\x20target\x20operating\x20system\x20and\x20compilation\x20architecture.\x0aThese\x20default\x20to\x20the\x20values\x20of\x20<code>$GOHOSTOS</code>\x20and\x0a<code>$GOHOSTARCH</code>\x20respectively\x20(described\x20below).\x0a</li>\x0a\x0a<p>\x0aChoices\x20for\x20<code>$GOOS</code>\x20are\x0a<code>android</code>,\x20<code>darwin</code>\x20(macOS/iOS),\x0a<code>dragonfly</code>,\x20<code>freebsd</code>,\x20<code>illumos</code>,\x20<code>js</code>,\x0a<code>linux</code>,\x20<code>netbsd</code>,\x20<code>openbsd</code>,\x0a<code>plan9</code>,\x20<code>solaris</code>\x20and\x20<code>windows</code>.\x0a</p>\x0a\x0a<p>\x0aChoices\x20for\x20<code>$GOARCH</code>\x20are\x0a<code>amd64</code>\x20(64-bit\x20x86,\x20the\x20most\x20mature\x20port),\x0a<code>386</code>\x20(32-bit\x20x86),\x20<code>arm</code>\x20(32-bit\x20ARM),\x20<code>arm64</code>\x20(64-bit\x20ARM),\x0a<code>ppc64le</code>\x20(PowerPC\x2064-bit,\x20little-endian),\x20<code>ppc64</code>\x20(PowerPC\x2064-bit,\x20big-endian),\x0a<code>mips64le</code>\x20(MIPS\x2064-bit,\x20little-endian),\x20<code>mips64</code>\x20(MIPS\x2064-bit,\x20big-endian),\x0a<code>mipsle</code>\x20(MIPS\x2032-bit,\x20little-endian),\x20<code>mips</code>\x20(MIPS\x2032-bit,\x20big-endian),\x0a<code>s390x</code>\x20(IBM\x20System\x20z\x2064-bit,\x20big-endian),\x20and\x0a<code>wasm</code>\x20(WebAssembly\x2032-bit).\x0a</p>\x0a\x0a<p>\x0aThe\x20valid\x20combinations\x20of\x20<code>$GOOS</code>\x20and\x20<code>$GOARCH</code>\x20are:\x0a<table\x20cellpadding=\"0\">\x0a<tr>\x0a<th\x20width=\"50\"></th><th\x20align=\"left\"\x20width=\"100\"><code>$GOOS</code></th>\x20<th\x20align=\"left\"\x20width=\"100\"><code>$GOARCH</code></th>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>aix</code></td>\x20<td><code>ppc64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>android</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>android</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>android</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>android</code></td>\x20<td><code>arm64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>darwin</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>darwin</code></td>\x20<td><code>arm64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>dragonfly</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>freebsd</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>freebsd</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>freebsd</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>illumos</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>js</code></td>\x20<td><code>wasm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>arm64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>ppc64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>ppc64le</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>mips</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>mipsle</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>mips64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>mips64le</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>linux</code></td>\x20<td><code>s390x</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>netbsd</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>netbsd</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>netbsd</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>openbsd</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>openbsd</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>openbsd</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>openbsd</code></td>\x20<td><code>arm64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>plan9</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>plan9</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>plan9</code></td>\x20<td><code>arm</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>solaris</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>windows</code></td>\x20<td><code>386</code></td>\x0a</tr>\x0a<tr>\x0a<td></td><td><code>windows</code></td>\x20<td><code>amd64</code></td>\x0a</tr>\x0a</table>\x0a<br>\x0a\x0a<li><code>$GOHOSTOS</code>\x20and\x20<code>$GOHOSTARCH</code>\x0a<p>\x0aThe\x20name\x20of\x20the\x20host\x20operating\x20system\x20and\x20compilation\x20architecture.\x0aThese\x20default\x20to\x20the\x20local\x20system's\x20operating\x20system\x20and\x0aarchitecture.\x0a</p>\x0a</li>\x0a\x0a<p>\x0aValid\x20choices\x20are\x20the\x20same\x20as\x20for\x20<code>$GOOS</code>\x20and\x0a<code>$GOARCH</code>,\x20listed\x20above.\x0aThe\x20specified\x20values\x20must\x20be\x20compatible\x20with\x20the\x20local\x20system.\x0aFor\x20example,\x20you\x20should\x20not\x20set\x20<code>$GOHOSTARCH</code>\x20to\x0a<code>arm</code>\x20on\x20an\x20x86\x20system.\x0a</p>\x0a\x0a<li><code>$GO386</code>\x20(for\x20<code>386</code>\x20only,\x20default\x20is\x20auto-detected\x0aif\x20built\x20on\x20either\x20<code>386</code>\x20or\x20<code>amd64</code>,\x20<code>387</code>\x20otherwise)\x0a<p>\x0aThis\x20controls\x20the\x20code\x20generated\x20by\x20gc\x20to\x20use\x20either\x20the\x20387\x20floating-point\x20unit\x0a(set\x20to\x20<code>387</code>)\x20or\x20SSE2\x20instructions\x20(set\x20to\x20<code>sse2</code>)\x20for\x0afloating\x20point\x20computations.\x0a</p>\x0a<ul>\x0a\x09<li><code>GO386=387</code>:\x20use\x20x87\x20for\x20floating\x20point\x20operations;\x20should\x20support\x20all\x20x86\x20chips\x20(Pentium\x20MMX\x20or\x20later).</li>\x0a\x09<li><code>GO386=sse2</code>:\x20use\x20SSE2\x20for\x20floating\x20point\x20operations;\x20has\x20better\x20performance\x20than\x20387,\x20but\x20only\x20available\x20on\x20Pentium\x204/Opteron/Athlon\x2064\x20or\x20later.</li>\x0a</ul>\x0a</li>\x0a\x0a<li><code>$GOARM</code>\x20(for\x20<code>arm</code>\x20only;\x20default\x20is\x20auto-detected\x20if\x20building\x0aon\x20the\x20target\x20processor,\x206\x20if\x20not)\x0a<p>\x0aThis\x20sets\x20the\x20ARM\x20floating\x20point\x20co-processor\x20architecture\x20version\x20the\x20run-time\x0ashould\x20target.\x20If\x20you\x20are\x20compiling\x20on\x20the\x20target\x20system,\x20its\x20value\x20will\x20be\x20auto-detected.\x0a</p>\x0a<ul>\x0a\x09<li><code>GOARM=5</code>:\x20use\x20software\x20floating\x20point;\x20when\x20CPU\x20doesn't\x20have\x20VFP\x20co-processor</li>\x0a\x09<li><code>GOARM=6</code>:\x20use\x20VFPv1\x20only;\x20default\x20if\x20cross\x20compiling;\x20usually\x20ARM11\x20or\x20better\x20cores\x20(VFPv2\x20or\x20better\x20is\x20also\x20supported)</li>\x0a\x09<li><code>GOARM=7</code>:\x20use\x20VFPv3;\x20usually\x20Cortex-A\x20cores</li>\x0a</ul>\x0a<p>\x0aIf\x20in\x20doubt,\x20leave\x20this\x20variable\x20unset,\x20and\x20adjust\x20it\x20if\x20required\x0awhen\x20you\x20first\x20run\x20the\x20Go\x20executable.\x0aThe\x20<a\x20href=\"//golang.org/wiki/GoArm\">GoARM</a>\x20page\x0aon\x20the\x20<a\x20href=\"//golang.org/wiki\">Go\x20community\x20wiki</a>\x0acontains\x20further\x20details\x20regarding\x20Go's\x20ARM\x20support.\x0a</p>\x0a</li>\x0a\x0a<li><code>$GOMIPS</code>\x20(for\x20<code>mips</code>\x20and\x20<code>mipsle</code>\x20only)\x20<br>\x20<code>$GOMIPS64</code>\x20(for\x20<code>mips64</code>\x20and\x20<code>mips64le</code>\x20only)\x0a<p>\x0a\x09These\x20variables\x20set\x20whether\x20to\x20use\x20floating\x20point\x20instructions.\x20Set\x20to\x20\"<code>hardfloat</code>\"\x20to\x20use\x20floating\x20point\x20instructions;\x20this\x20is\x20the\x20default.\x20\x20Set\x20to\x20\"<code>softfloat</code>\"\x20to\x20use\x20soft\x20floating\x20point.\x0a</p>\x0a</li>\x0a\x0a<li><code>$GOPPC64</code>\x20(for\x20<code>ppc64</code>\x20and\x20<code>ppc64le</code>\x20only)\x0a<p>\x0aThis\x20variable\x20sets\x20the\x20processor\x20level\x20(i.e.\x20Instruction\x20Set\x20Architecture\x20version)\x0afor\x20which\x20the\x20compiler\x20will\x20target.\x20The\x20default\x20is\x20<code>power8</code>.\x0a</p>\x0a<ul>\x0a\x09<li><code>GOPPC64=power8</code>:\x20generate\x20ISA\x20v2.07\x20instructions</li>\x0a\x09<li><code>GOPPC64=power9</code>:\x20generate\x20ISA\x20v3.00\x20instructions</li>\x0a</ul>\x0a</li>\x0a\x0a\x0a<li><code>$GOWASM</code>\x20(for\x20<code>wasm</code>\x20only)\x0a\x09<p>\x0a\x09This\x20variable\x20is\x20a\x20comma\x20separated\x20list\x20of\x20<a\x20href=\"https://github.com/WebAssembly/proposals\">experimental\x20WebAssembly\x20features</a>\x20that\x20the\x20compiled\x20WebAssembly\x20binary\x20is\x20allowed\x20to\x20use.\x0a\x09The\x20default\x20is\x20to\x20use\x20no\x20experimental\x20features.\x0a\x09</p>\x0a\x09<ul>\x0a\x09\x09<li><code>GOWASM=satconv</code>:\x20generate\x20<a\x20href=\"https://github.com/WebAssembly/nontrapping-float-to-int-conversions/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md\">saturating\x20(non-trapping)\x20float-to-int\x20conversions</a></li>\x0a\x09\x09<li><code>GOWASM=signext</code>:\x20generate\x20<a\x20href=\"https://github.com/WebAssembly/sign-extension-ops/blob/master/proposals/sign-extension-ops/Overview.md\">sign-extension\x20operators</a></li>\x0a\x09</ul>\x0a</li>\x0a\x0a</ul>\x0a\x0a<p>\x0aNote\x20that\x20<code>$GOARCH</code>\x20and\x20<code>$GOOS</code>\x20identify\x20the\x0a<em>target</em>\x20environment,\x20not\x20the\x20environment\x20you\x20are\x20running\x20on.\x0aIn\x20effect,\x20you\x20are\x20always\x20cross-compiling.\x0aBy\x20architecture,\x20we\x20mean\x20the\x20kind\x20of\x20binaries\x0athat\x20the\x20target\x20environment\x20can\x20run:\x0aan\x20x86-64\x20system\x20running\x20a\x2032-bit-only\x20operating\x20system\x0amust\x20set\x20<code>GOARCH</code>\x20to\x20<code>386</code>,\x0anot\x20<code>amd64</code>.\x0a</p>\x0a\x0a<p>\x0aIf\x20you\x20choose\x20to\x20override\x20the\x20defaults,\x0aset\x20these\x20variables\x20in\x20your\x20shell\x20profile\x20(<code>$HOME/.bashrc</code>,\x0a<code>$HOME/.profile</code>,\x20or\x20equivalent).\x20The\x20settings\x20might\x20look\x0asomething\x20like\x20this:\x0a</p>\x0a\x0a<pre>\x0aexport\x20GOARCH=amd64\x0aexport\x20GOOS=linux\x0a</pre>\x0a\x0a<p>\x0aalthough,\x20to\x20reiterate,\x20none\x20of\x20these\x20variables\x20needs\x20to\x20be\x20set\x20to\x20build,\x0ainstall,\x20and\x20develop\x20the\x20Go\x20tree.\x0a</p>\x0a",
+
+	"doc/manage-install.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Managing\x20Go\x20installations\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/manage-install\"\x0a}-->\x0a\x0a<p>\x0aThis\x20topic\x20describes\x20how\x20to\x20install\x20multiple\x20versions\x20of\x20Go\x20on\x20the\x20same\x20machine,\x20as\x20well\x20as\x20how\x20to\x20uninstall\x20Go.\x0a</p>\x0a\x0a<p>For\x20other\x20content\x20on\x20installing,\x20you\x20might\x20be\x20interested\x20in:</p>\x0a<ul>\x0a<li><a\x20href=\"/doc/install.html\">Download\x20and\x20install</a>\x20--\x20The\x20simplest\x20way\x20to\x20get\x20installed\x20and\x20running.</li>\x0a<li><a\x20href=\"/doc/install-source.html\">Installing\x20Go\x20from\x20source</a>\x20--\x20How\x20to\x20check\x20out\x20the\x20sources,\x20build\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.</li>\x0a</ul>\x0a\x0a<h2\x20id=\"installing-multiple\">Installing\x20multiple\x20Go\x20versions</h2>\x0a\x0a<p>\x0aYou\x20can\x20install\x20multiple\x20Go\x20versions\x20on\x20the\x20same\x20machine.\x20For\x20example,\x20you\x20might\x20want\x20to\x20test\x20your\x20code\x20on\x20multiple\x20Go\x20versions.\x20For\x20a\x20list\x20of\x20versions\x20you\x20can\x20install\x20this\x20way,\x20see\x20the\x20<a\x20href=\"https://golang.org/dl/\">download\x20page</a>.\x0a</p>\x0a\x0a<p>\x0a<strong>Note:</strong>\x20To\x20install\x20using\x20the\x20method\x20described\x20here,\x20you'll\x20need\x20to\x20have\x20<a\x20href=\"https://git-scm.com/\">git</a>\x20installed.\x0a</p>\x0a\x0a<p>\x0aTo\x20install\x20additional\x20Go\x20versions,\x20run\x20the\x20<a\x20href=\"/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them\"><code>go\x20get</code>\x20command</a>,\x20specifying\x20the\x20download\x20location\x20of\x20the\x20version\x20you\x20want\x20to\x20install.\x20The\x20following\x20example\x20illustrates\x20with\x20version\x201.10.7:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20get\x20golang.org/dl/go1.10.7\x0a$\x20go1.10.7\x20download\x0a</pre>\x0a\x0a<p>\x0aTo\x20run\x20<code>go</code>\x20commands\x20with\x20the\x20newly-downloaded\x20version,\x20append\x20the\x20version\x20number\x20to\x20the\x20<code>go</code>\x20command,\x20as\x20follows:\x0a</p>\x0a\x0a<pre>\x0a$\x20go1.10.7\x20version\x0ago\x20version\x20go1.10.7\x20linux/amd64\x0a</pre>\x0a\x0a<p>\x0aWhen\x20you\x20have\x20multiple\x20versions\x20installed,\x20you\x20can\x20discover\x20where\x20each\x20is\x20installed,\x20look\x20at\x20the\x20version's\x20<code>GOROOT</code>\x20value.\x20For\x20example,\x20run\x20a\x20command\x20such\x20as\x20the\x20following:\x0a</p>\x0a\x0a<pre>\x0a$\x20go1.10.7\x20env\x20GOROOT\x0a</pre>\x0a\x0a<p>\x0aTo\x20uninstall\x20a\x20downloaded\x20version,\x20just\x20remove\x20the\x20directory\x20specified\x20by\x20its\x20<code>GOROOT</code>\x20environment\x20variable\x20and\x20the\x20goX.Y.Z\x20binary.\x0a</p>\x0a\x0a<h2\x20id=\"uninstalling\">Uninstalling\x20Go</h2>\x0a\x0a<p>\x0aYou\x20can\x20remove\x20Go\x20from\x20your\x20system\x20using\x20the\x20steps\x20described\x20in\x20this\x20topic.\x0a</p>\x0a\x0a<h3\x20id=\"linux-mac-bsd\">Linux\x20/\x20macOS\x20/\x20FreeBSD</h3>\x0a\x0a<ol>\x0a\x0a<li>Delete\x20the\x20go\x20directory.\x0a\x0a<p>\x0aThis\x20is\x20usually\x20/usr/local/go.\x0a</p>\x0a\x0a</li>\x0a\x0a<li>Remove\x20the\x20Go\x20bin\x20directory\x20from\x20your\x20<code>PATH</code>\x20environment\x20variable.\x0a\x0a<p>\x0aUnder\x20Linux\x20and\x20FreeBSD,\x20edit\x20/etc/profile\x20or\x20$HOME/.profile.\x20If\x20you\x20installed\x20Go\x20with\x20the\x20macOS\x20package,\x20remove\x20the\x20/etc/paths.d/go\x20file.\x0a</p>\x0a\x0a</li>\x0a\x0a</ol>\x0a\x0a<h3\x20id=\"windows\">Windows</h3>\x0a\x0a<p>\x0aThe\x20simplest\x20way\x20to\x20remove\x20Go\x20is\x20via\x20Add/Remove\x20Programs\x20in\x20the\x20Windows\x20control\x20panel:\x0a</p>\x0a\x0a<ol>\x0a\x0a<li>In\x20Control\x20Panel,\x20double-click\x20<strong>Add/Remove\x20Programs</strong>.</li>\x0a<li>In\x20<strong>Add/Remove\x20Programs</strong>,\x20select\x20<strong>Go\x20Programming\x20Language,</strong>\x20click\x20Uninstall,\x20then\x20follow\x20the\x20prompts.</li>\x0a\x0a</ol>\x0a\x0a<p>\x0aFor\x20removing\x20Go\x20with\x20tools,\x20you\x20can\x20also\x20use\x20the\x20command\x20line:\x0a</p>\x0a\x0a<ul>\x0a\x0a<li>Uninstall\x20using\x20the\x20command\x20line\x20by\x20running\x20the\x20following\x20command:\x0a\x0a<pre>\x0amsiexec\x20/x\x20go{{version}}.windows-{{cpu-arch}}.msi\x20/q\x0a</pre>\x0a\x0a<p>\x0a\x0a<strong>Note:</strong>\x20Using\x20this\x20uninstall\x20process\x20for\x20Windows\x20will\x20automatically\x20remove\x20windows\x20environment\x20variables\x20created\x20by\x20the\x20original\x20installation.\x0a</p>\x0a\x0a</li>\x0a\x0a</ul>\x0a\x0a",
+
 	"doc/mvs/buildlist.svg": "<?xml\x20version=\"1.0\"\x20encoding=\"UTF-8\"\x20standalone=\"no\"?>\x0a<!DOCTYPE\x20svg\x20PUBLIC\x20\"-//W3C//DTD\x20SVG\x201.1//EN\"\x20\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\x0a<svg\x20xmlns=\"http://www.w3.org/2000/svg\"\x20xmlns:xl=\"http://www.w3.org/1999/xlink\"\x20version=\"1.1\"\x20xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\x20viewBox=\"-1\x20-5\x20528\x20276\"\x20width=\"528\"\x20height=\"276\">\x0a\x20\x20<defs>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20panose-1=\"2\x200\x200\x200\x200\x200\x200\x200\x200\x200\"\x20units-per-em=\"1000\"\x20underline-position=\"-73.24219\"\x20underline-thickness=\"48.828125\"\x20slope=\"0\"\x20x-height=\"528.3203\"\x20cap-height=\"710.9375\"\x20ascent=\"927.7344\"\x20descent=\"-244.14062\"\x20font-weight=\"700\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"Roboto-Bold\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20panose-1=\"2\x200\x200\x200\x200\x200\x200\x200\x200\x200\"\x20units-per-em=\"1000\"\x20underline-position=\"-73.24219\"\x20underline-thickness=\"48.828125\"\x20slope=\"0\"\x20x-height=\"528.3203\"\x20cap-height=\"710.9375\"\x20ascent=\"927.7344\"\x20descent=\"-244.14062\"\x20font-weight=\"400\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"Roboto-Regular\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20\x20\x20<marker\x20orient=\"auto\"\x20overflow=\"visible\"\x20markerUnits=\"strokeWidth\"\x20id=\"FilledArrow_Marker\"\x20stroke-linejoin=\"miter\"\x20stroke-miterlimit=\"10\"\x20viewBox=\"-1\x20-4\x2010\x208\"\x20markerWidth=\"10\"\x20markerHeight=\"8\"\x20color=\"black\">\x0a\x20\x20\x20\x20\x20\x20<g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x208\x200\x20L\x200\x20-3\x20L\x200\x203\x20Z\"\x20fill=\"currentColor\"\x20stroke=\"currentColor\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20</marker>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20panose-1=\"2\x200\x205\x203\x200\x200\x200\x202\x200\x204\"\x20units-per-em=\"1000\"\x20underline-position=\"-100\"\x20underline-thickness=\"50\"\x20slope=\"0\"\x20x-height=\"517\"\x20cap-height=\"714\"\x20ascent=\"951.9958\"\x20descent=\"-212.99744\"\x20font-weight=\"400\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"HelveticaNeue\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20</defs>\x0a\x20\x20<metadata>\x20Produced\x20by\x20OmniGraffle\x207.16\x20\x0a\x20\x20\x20\x20<dc:date>2020-06-16\x2022:16:38\x20+0000</dc:date>\x0a\x20\x20</metadata>\x0a\x20\x20<g\x20id=\"Canvas_1\"\x20stroke-opacity=\"1\"\x20stroke-dasharray=\"none\"\x20stroke=\"none\"\x20fill-opacity=\"1\"\x20fill=\"none\">\x0a\x20\x20\x20\x20<title>Canvas\x201</title>\x0a\x20\x20\x20\x20<g\x20id=\"Canvas_1:\x20Layer\x201\">\x0a\x20\x20\x20\x20\x20\x20<title>Layer\x201</title>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_2\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"0\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"0\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(135\x205.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"2.1015625\"\x20y=\"15\">Main</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_3\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"180\"\x20y=\"60\"\x20width=\"190\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20180\x2060\x20L\x20370\x2060\x20L\x20370\x20110\x20L\x20180\x20110\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_4\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(195\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.9492188\"\x20y=\"15\">B\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_10\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"250\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"250\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(255\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.3984375\"\x20y=\"15\">B\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_11\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.9492188\"\x20y=\"15\">B\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_17\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"0\"\x20y=\"60\"\x20width=\"130\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x200\x2060\x20L\x20130\x2060\x20L\x20130\x20110\x20L\x200\x20110\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_16\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(15\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7109375\"\x20y=\"15\">A\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_15\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(75\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.1210938\"\x20y=\"15\">A\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_27\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"141.07143\"\x20y1=\"31.25\"\x20x2=\"115.3714\"\x20y2=\"61.23336\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_28\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"181.25\"\x20y1=\"30.3125\"\x20x2=\"240.1986\"\x20y2=\"64.69918\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_32\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"0\"\x20y=\"140\"\x20width=\"250\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x200\x20140\x20L\x20250\x20140\x20L\x20250\x20190\x20L\x200\x20190\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_31\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(15\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_30\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(75\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_33\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(135\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_34\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(195\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.2695312\"\x20y=\"15\">C\x201.4</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_40\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"60\"\x20y=\"220\"\x20width=\"190\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x2060\x20220\x20L\x20250\x20220\x20L\x20250\x20270\x20L\x2060\x20270\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_39\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"69\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"69\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(74\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.6835938\"\x20y=\"15\">D\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_38\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"129\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"129\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(134\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.3046875\"\x20y=\"15\">D\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_37\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"189\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"189\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(194\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.6835938\"\x20y=\"15\">D\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Group_45\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_44\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"300\"\x20y=\"140\"\x20width=\"70\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20300\x20140\x20L\x20370\x20140\x20L\x20370\x20190\x20L\x20300\x20190\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_43\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"2.3828125\"\x20y=\"15\">E\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Group_46\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_48\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"300\"\x20y=\"220\"\x20width=\"70\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20300\x20220\x20L\x20370\x20220\x20L\x20370\x20270\x20L\x20300\x20270\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_47\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"2.5078125\"\x20y=\"15\">F\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_50\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"107.1875\"\x20y1=\"101.25\"\x20x2=\"137.81\"\x20y2=\"142.08\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_51\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"262.8125\"\x20y1=\"101.25\"\x20x2=\"233.1275\"\x20y2=\"140.83\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_52\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"35\"\x20y1=\"100\"\x20x2=\"35\"\x20y2=\"140.1\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_53\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"46.0625\"\x20y1=\"180\"\x20x2=\"77.06143\"\x20y2=\"222.03245\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_54\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"94.8125\"\x20y1=\"180\"\x20x2=\"94.31124\"\x20y2=\"220.10077\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_55\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"154.8125\"\x20y1=\"180\"\x20x2=\"154.32687\"\x20y2=\"218.85077\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_56\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"202.60938\"\x20y1=\"181.25\"\x20x2=\"172.39342\"\x20y2=\"220.87749\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_57\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"335\"\x20y1=\"100\"\x20x2=\"335\"\x20y2=\"140.1\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_58\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20330.8284\x20180\x20C\x20329.32873\x20187.07273\x20328\x20196.12552\x20328\x20206\x20C\x20328\x20211.10463\x20328.3551\x20215.88823\x20328.9053\x20220.23645\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_59\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20341.33417\x20230\x20C\x20343.3183\x20223.5244\x20345\x20215.29436\x20345\x20206\x20C\x20345\x20200.16788\x20344.33784\x20194.6224\x20343.3543\x20189.60223\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_64\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"0\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"0\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_65\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x200)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">Selected\x20version</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_67\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"26\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"26\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_68\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x2026)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">go.mod\x20loaded</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_69\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"52\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"52\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_70\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x2052)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">Available\x20version</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20</g>\x0a\x20\x20</g>\x0a</svg>\x0a",
 
 	"doc/mvs/downgrade.svg": "<?xml\x20version=\"1.0\"\x20encoding=\"UTF-8\"\x20standalone=\"no\"?>\x0a<!DOCTYPE\x20svg\x20PUBLIC\x20\"-//W3C//DTD\x20SVG\x201.1//EN\"\x20\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\x0a<svg\x20xmlns=\"http://www.w3.org/2000/svg\"\x20xmlns:xl=\"http://www.w3.org/1999/xlink\"\x20version=\"1.1\"\x20xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\x20viewBox=\"-1\x20-5\x20531\x20276\"\x20width=\"531\"\x20height=\"276\">\x0a\x20\x20<defs>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20panose-1=\"2\x200\x200\x200\x200\x200\x200\x200\x200\x200\"\x20units-per-em=\"1000\"\x20underline-position=\"-73.24219\"\x20underline-thickness=\"48.828125\"\x20slope=\"0\"\x20x-height=\"528.3203\"\x20cap-height=\"710.9375\"\x20ascent=\"927.7344\"\x20descent=\"-244.14062\"\x20font-weight=\"700\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"Roboto-Bold\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20panose-1=\"2\x200\x200\x200\x200\x200\x200\x200\x200\x200\"\x20units-per-em=\"1000\"\x20underline-position=\"-73.24219\"\x20underline-thickness=\"48.828125\"\x20slope=\"0\"\x20x-height=\"528.3203\"\x20cap-height=\"710.9375\"\x20ascent=\"927.7344\"\x20descent=\"-244.14062\"\x20font-weight=\"400\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"Roboto-Regular\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20\x20\x20<marker\x20orient=\"auto\"\x20overflow=\"visible\"\x20markerUnits=\"strokeWidth\"\x20id=\"FilledArrow_Marker\"\x20stroke-linejoin=\"miter\"\x20stroke-miterlimit=\"10\"\x20viewBox=\"-1\x20-4\x2010\x208\"\x20markerWidth=\"10\"\x20markerHeight=\"8\"\x20color=\"black\">\x0a\x20\x20\x20\x20\x20\x20<g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x208\x200\x20L\x200\x20-3\x20L\x200\x203\x20Z\"\x20fill=\"currentColor\"\x20stroke=\"currentColor\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20</marker>\x0a\x20\x20\x20\x20<marker\x20orient=\"auto\"\x20overflow=\"visible\"\x20markerUnits=\"strokeWidth\"\x20id=\"FilledArrow_Marker_2\"\x20stroke-linejoin=\"miter\"\x20stroke-miterlimit=\"10\"\x20viewBox=\"-1\x20-3\x206\x206\"\x20markerWidth=\"6\"\x20markerHeight=\"6\"\x20color=\"black\">\x0a\x20\x20\x20\x20\x20\x20<g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x204\x200\x20L\x200\x20-1.5\x20L\x200\x201.5\x20Z\"\x20fill=\"currentColor\"\x20stroke=\"currentColor\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20</marker>\x0a\x20\x20\x20\x20<font-face\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20panose-1=\"2\x200\x205\x203\x200\x200\x200\x202\x200\x204\"\x20units-per-em=\"1000\"\x20underline-position=\"-100\"\x20underline-thickness=\"50\"\x20slope=\"0\"\x20x-height=\"517\"\x20cap-height=\"714\"\x20ascent=\"951.9958\"\x20descent=\"-212.99744\"\x20font-weight=\"400\">\x0a\x20\x20\x20\x20\x20\x20<font-face-src>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<font-face-name\x20name=\"HelveticaNeue\"/>\x0a\x20\x20\x20\x20\x20\x20</font-face-src>\x0a\x20\x20\x20\x20</font-face>\x0a\x20\x20</defs>\x0a\x20\x20<metadata>\x20Produced\x20by\x20OmniGraffle\x207.16\x20\x0a\x20\x20\x20\x20<dc:date>2020-06-16\x2022:22:34\x20+0000</dc:date>\x0a\x20\x20</metadata>\x0a\x20\x20<g\x20id=\"Canvas_1\"\x20stroke-opacity=\"1\"\x20stroke-dasharray=\"none\"\x20stroke=\"none\"\x20fill-opacity=\"1\"\x20fill=\"none\">\x0a\x20\x20\x20\x20<title>Canvas\x201</title>\x0a\x20\x20\x20\x20<g\x20id=\"Canvas_1:\x20Layer\x201\">\x0a\x20\x20\x20\x20\x20\x20<title>Layer\x201</title>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_2\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"0\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"0\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(135\x205.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"2.1015625\"\x20y=\"15\">Main</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_3\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"180\"\x20y=\"60\"\x20width=\"190\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20180\x2060\x20L\x20370\x2060\x20L\x20370\x20110\x20L\x20180\x20110\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_4\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(195\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.3984375\"\x20y=\"15\">B\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_10\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"250\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"250\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(255\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.9492188\"\x20y=\"15\">B\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_11\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.9492188\"\x20y=\"15\">B\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_17\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"0\"\x20y=\"60\"\x20width=\"130\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x200\x2060\x20L\x20130\x2060\x20L\x20130\x20110\x20L\x200\x20110\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_16\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(15\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7109375\"\x20y=\"15\">A\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_15\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"70\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(75\x2075.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.1210938\"\x20y=\"15\">A\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_27\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"141.07143\"\x20y1=\"31.25\"\x20x2=\"115.3714\"\x20y2=\"61.23336\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_28\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"181.25\"\x20y1=\"30.3125\"\x20x2=\"241.4486\"\x20y2=\"65.42834\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"1.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_32\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"0\"\x20y=\"140\"\x20width=\"250\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x200\x20140\x20L\x20250\x20140\x20L\x20250\x20190\x20L\x200\x20190\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_31\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"10\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(15\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_30\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"70\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(75\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_33\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"130\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(135\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.2695312\"\x20y=\"15\">C\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_34\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"190\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(195\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.7226562\"\x20y=\"15\">C\x201.4</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_40\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"60\"\x20y=\"220\"\x20width=\"190\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x2060\x20220\x20L\x20250\x20220\x20L\x20250\x20270\x20L\x2060\x20270\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_39\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"69\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"69\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(74\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.6835938\"\x20y=\"15\">D\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_38\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"129\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"129\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(134\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"700\"\x20fill=\"black\"\x20x=\"1.3046875\"\x20y=\"15\">D\x201.2</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_37\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"189\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"189\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(194\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"1.6835938\"\x20y=\"15\">D\x201.3</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Group_45\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_44\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"300\"\x20y=\"140\"\x20width=\"70\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20300\x20140\x20L\x20370\x20140\x20L\x20370\x20190\x20L\x20300\x20190\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_43\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"150\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x20155.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"2.3828125\"\x20y=\"15\">E\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Group_46\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_48\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"300\"\x20y=\"220\"\x20width=\"70\"\x20height=\"50\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20300\x20220\x20L\x20370\x20220\x20L\x20370\x20270\x20L\x20300\x20270\x20Z\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-dasharray=\"4.0,4.0\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_47\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"310\"\x20y=\"230\"\x20width=\"50\"\x20height=\"30\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(315\x20235.5)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Roboto\"\x20font-size=\"16\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"2.5078125\"\x20y=\"15\">F\x201.1</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_50\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"107.1875\"\x20y1=\"101.25\"\x20x2=\"136.8725\"\x20y2=\"140.83\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_51\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"263.75\"\x20y1=\"100\"\x20x2=\"232.19\"\x20y2=\"142.08\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_52\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"35\"\x20y1=\"100\"\x20x2=\"35\"\x20y2=\"140.1\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_53\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"46.0625\"\x20y1=\"180\"\x20x2=\"77.06143\"\x20y2=\"222.03245\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_54\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"94.8125\"\x20y1=\"180\"\x20x2=\"94.31124\"\x20y2=\"220.10077\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_55\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"154.79688\"\x20y1=\"181.25\"\x20x2=\"154.32687\"\x20y2=\"218.85077\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_56\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"203.5625\"\x20y1=\"180\"\x20x2=\"172.39342\"\x20y2=\"220.87749\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_57\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"335\"\x20y1=\"100\"\x20x2=\"335\"\x20y2=\"140.1\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_58\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20330.8284\x20180\x20C\x20329.32873\x20187.07273\x20328\x20196.12552\x20328\x20206\x20C\x20328\x20211.10463\x20328.3551\x20215.88823\x20328.9053\x20220.23645\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_59\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\"M\x20341.33417\x20230\x20C\x20343.3183\x20223.5244\x20345\x20215.29436\x20345\x20206\x20C\x20345\x20200.16788\x20344.33784\x20194.6224\x20343.3543\x20189.60223\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_60\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"199\"\x20y1=\"174.5\"\x20x2=\"229\"\x20y2=\"155.5\"\x20stroke=\"#666\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"6\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_61\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"260\"\x20y1=\"94\"\x20x2=\"290\"\x20y2=\"75\"\x20stroke=\"#666\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"6\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_63\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"168.92857\"\x20y1=\"31.25\"\x20x2=\"194.6286\"\x20y2=\"61.23336\"\x20marker-end=\"url(#FilledArrow_Marker)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_64\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"250\"\x20y1=\"85\"\x20x2=\"247.15\"\x20y2=\"85\"\x20marker-end=\"url(#FilledArrow_Marker_2)\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_73\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"0\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"0\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"2.5\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_72\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x200)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">Selected\x20version</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_71\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"26\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"#e0ebf5\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"26\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_70\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x2026)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">go.mod\x20loaded</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_69\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"52\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"52\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_68\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x2052)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">Available\x20version</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_67\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"78\"\x20width=\"16\"\x20height=\"16\"\x20fill=\"white\"/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<rect\x20x=\"390\"\x20y=\"78\"\x20width=\"16\"\x20height=\"16\"\x20stroke=\"black\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"1\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Graphic_66\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<text\x20transform=\"translate(417\x2078.608)\"\x20fill=\"black\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tspan\x20font-family=\"Helvetica\x20Neue\"\x20font-size=\"14\"\x20font-weight=\"400\"\x20fill=\"black\"\x20x=\"0\"\x20y=\"13\">Excluded\x20version</tspan>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</text>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20\x20\x20<g\x20id=\"Line_65\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\"390\"\x20y1=\"94\"\x20x2=\"406\"\x20y2=\"78\"\x20stroke=\"#666\"\x20stroke-linecap=\"round\"\x20stroke-linejoin=\"round\"\x20stroke-width=\"6\"/>\x0a\x20\x20\x20\x20\x20\x20</g>\x0a\x20\x20\x20\x20</g>\x0a\x20\x20</g>\x0a</svg>\x0a",
@@ -77,6 +85,26 @@
 
 	"doc/security.html": "<!--{\x0a\x09\"Title\":\x20\"Go\x20Security\x20Policy\",\x0a\x09\"Path\":\x20\x20\"/security\"\x0a}-->\x0a\x0a<h2>Implementation</h2>\x0a\x0a<h3>Reporting\x20a\x20Security\x20Bug</h3>\x0a\x0a<p>\x0aPlease\x20report\x20to\x20us\x20any\x20issues\x20you\x20find.\x0aThis\x20document\x20explains\x20how\x20to\x20do\x20that\x20and\x20what\x20to\x20expect\x20in\x20return.\x0a</p>\x0a\x0a<p>\x0aAll\x20security\x20bugs\x20in\x20the\x20Go\x20distribution\x20should\x20be\x20reported\x20by\x20email\x20to\x0a<a\x20href=\"mailto:security@golang.org\">security@golang.org</a>.\x0aThis\x20mail\x20is\x20delivered\x20to\x20a\x20small\x20security\x20team.\x0aYour\x20email\x20will\x20be\x20acknowledged\x20within\x2024\x20hours,\x20and\x20you'll\x20receive\x20a\x20more\x0adetailed\x20response\x20to\x20your\x20email\x20within\x2072\x20hours\x20indicating\x20the\x20next\x20steps\x20in\x0ahandling\x20your\x20report.\x0a</p>\x0a\x0a<p>\x0aTo\x20ensure\x20your\x20report\x20is\x20not\x20marked\x20as\x20spam,\x20please\x20include\x20the\x20word\x20\"vulnerability\"\x0aanywhere\x20in\x20your\x20email.\x20Please\x20use\x20a\x20descriptive\x20subject\x20line\x20for\x20your\x20report\x20email.\x0a</p>\x0a\x0a<p>\x0aAfter\x20the\x20initial\x20reply\x20to\x20your\x20report,\x20the\x20security\x20team\x20will\x20endeavor\x20to\x20keep\x0ayou\x20informed\x20of\x20the\x20progress\x20being\x20made\x20towards\x20a\x20fix\x20and\x20full\x20announcement.\x0aThese\x20updates\x20will\x20be\x20sent\x20at\x20least\x20every\x20five\x20days.\x0aIn\x20reality,\x20this\x20is\x20more\x20likely\x20to\x20be\x20every\x2024-48\x20hours.\x0a</p>\x0a\x0a<p>\x0aIf\x20you\x20have\x20not\x20received\x20a\x20reply\x20to\x20your\x20email\x20within\x2048\x20hours\x20or\x20you\x20have\x20not\x0aheard\x20from\x20the\x20security\x20team\x20for\x20the\x20past\x20five\x20days\x20please\x20contact\x20the\x20Go\x0asecurity\x20team\x20directly:\x0a</p>\x0a\x0a<ul>\x0a<li>Primary\x20security\x20coordinator:\x20<a\x20href=\"mailto:filippo@golang.org\">Filippo\x20Valsorda</a>.</li>\x0a<li>Secondary\x20coordinator:\x20<a\x20href=\"mailto:agl@golang.org\">Adam\x20Langley</a>.</li>\x0a<li>If\x20you\x20receive\x20no\x20response,\x20mail\x20<a\x20href=\"mailto:golang-dev@googlegroups.com\">golang-dev@googlegroups.com</a>\x20or\x20use\x20the\x20<a\x20href=\"https://groups.google.com/forum/#!forum/golang-dev\">golang-dev\x20web\x20interface</a>.</li>\x0a</ul>\x0a\x0a<p>\x0aPlease\x20note\x20that\x20golang-dev\x20is\x20a\x20public\x20discussion\x20forum.\x0aWhen\x20escalating\x20on\x20this\x20list,\x20please\x20do\x20not\x20disclose\x20the\x20details\x20of\x20the\x20issue.\x0aSimply\x20state\x20that\x20you're\x20trying\x20to\x20reach\x20a\x20member\x20of\x20the\x20security\x20team.\x0a</p>\x0a\x0a<h3>Flagging\x20Existing\x20Issues\x20as\x20Security-related</h3>\x0a\x0a<p>\x0aIf\x20you\x20believe\x20that\x20an\x20<a\x20href=\"https://golang.org/issue\">existing\x20issue</a>\x0ais\x20security-related,\x20we\x20ask\x20that\x20you\x20send\x20an\x20email\x20to\x0a<a\x20href=\"mailto:security@golang.org\">security@golang.org</a>.\x0aThe\x20email\x20should\x20include\x20the\x20issue\x20ID\x20and\x20a\x20short\x20description\x20of\x20why\x20it\x20should\x0abe\x20handled\x20according\x20to\x20this\x20security\x20policy.\x0a</p>\x0a\x0a<h3>Disclosure\x20Process</h3>\x0a\x0a<p>The\x20Go\x20project\x20uses\x20the\x20following\x20disclosure\x20process:</p>\x0a\x0a<ol>\x0a<li>Once\x20the\x20security\x20report\x20is\x20received\x20it\x20is\x20assigned\x20a\x20primary\x20handler.\x0aThis\x20person\x20coordinates\x20the\x20fix\x20and\x20release\x20process.</li>\x0a<li>The\x20issue\x20is\x20confirmed\x20and\x20a\x20list\x20of\x20affected\x20software\x20is\x20determined.</li>\x0a<li>Code\x20is\x20audited\x20to\x20find\x20any\x20potential\x20similar\x20problems.</li>\x0a<li>If\x20it\x20is\x20determined,\x20in\x20consultation\x20with\x20the\x20submitter,\x20that\x20a\x20CVE-ID\x20is\x0arequired,\x20the\x20primary\x20handler\x20obtains\x20one\x20via\x20email\x20to\x0a<a\x20href=\"https://oss-security.openwall.org/wiki/mailing-lists/distros\">oss-distros</a>.</li>\x0a<li>Fixes\x20are\x20prepared\x20for\x20the\x20two\x20most\x20recent\x20major\x20releases\x20and\x20the\x20head/master\x0arevision.\x20These\x20fixes\x20are\x20not\x20yet\x20committed\x20to\x20the\x20public\x20repository.</li>\x0a<li>A\x20notification\x20is\x20sent\x20to\x20the\x0a<a\x20href=\"https://groups.google.com/group/golang-announce\">golang-announce</a>\x0amailing\x20list\x20to\x20give\x20users\x20time\x20to\x20prepare\x20their\x20systems\x20for\x20the\x20update.</li>\x0a<li>Three\x20working\x20days\x20following\x20this\x20notification,\x20the\x20fixes\x20are\x20applied\x20to\x0athe\x20<a\x20href=\"https://go.googlesource.com/go\">public\x20repository</a>\x20and\x20a\x20new\x0aGo\x20release\x20is\x20issued.</li>\x0a<li>On\x20the\x20date\x20that\x20the\x20fixes\x20are\x20applied,\x20announcements\x20are\x20sent\x20to\x0a<a\x20href=\"https://groups.google.com/group/golang-announce\">golang-announce</a>,\x0a<a\x20href=\"https://groups.google.com/group/golang-dev\">golang-dev</a>,\x20and\x0a<a\x20href=\"https://groups.google.com/group/golang-nuts\">golang-nuts</a>.\x0a</ol>\x0a\x0a<p>\x0aThis\x20process\x20can\x20take\x20some\x20time,\x20especially\x20when\x20coordination\x20is\x20required\x20with\x0amaintainers\x20of\x20other\x20projects.\x20Every\x20effort\x20will\x20be\x20made\x20to\x20handle\x20the\x20bug\x20in\x0aas\x20timely\x20a\x20manner\x20as\x20possible,\x20however\x20it's\x20important\x20that\x20we\x20follow\x20the\x0aprocess\x20described\x20above\x20to\x20ensure\x20that\x20disclosures\x20are\x20handled\x20consistently.\x0a</p>\x0a\x0a<p>\x0aFor\x20security\x20issues\x20that\x20include\x20the\x20assignment\x20of\x20a\x20CVE-ID,\x0athe\x20issue\x20is\x20listed\x20publicly\x20under\x20the\x0a<a\x20href=\"https://www.cvedetails.com/vulnerability-list/vendor_id-14185/Golang.html\">\"Golang\"\x20product\x20on\x20the\x20CVEDetails\x20website</a>\x0aas\x20well\x20as\x20the\x0a<a\x20href=\"https://web.nvd.nist.gov/view/vuln/search\">National\x20Vulnerability\x20Disclosure\x20site</a>.\x0a</p>\x0a\x0a<h3>Receiving\x20Security\x20Updates</h3>\x0a\x0a<p>\x0aThe\x20best\x20way\x20to\x20receive\x20security\x20announcements\x20is\x20to\x20subscribe\x20to\x20the\x0a<a\x20href=\"https://groups.google.com/forum/#!forum/golang-announce\">golang-announce</a>\x0amailing\x20list.\x20Any\x20messages\x20pertaining\x20to\x20a\x20security\x20issue\x20will\x20be\x20prefixed\x0awith\x20<code>[security]</code>.\x0a</p>\x0a\x0a<h3>Comments\x20on\x20This\x20Policy</h3>\x0a\x0a<p>\x0aIf\x20you\x20have\x20any\x20suggestions\x20to\x20improve\x20this\x20policy,\x20please\x20send\x20an\x20email\x20to\x0a<a\x20href=\"mailto:golang-dev@golang.org\">golang-dev@golang.org</a>\x20for\x20discussion.\x0a</p>\x0a\x0a<h3>PGP\x20Key\x20for\x20<a\x20href=\"mailto:security@golang.org\">security@golang.org</a></h3>\x0a\x0a<p>\x0aWe\x20accept\x20PGP-encrypted\x20email,\x20but\x20the\x20majority\x20of\x20the\x20security\x20team\x0aare\x20not\x20regular\x20PGP\x20users\x20so\x20it's\x20somewhat\x20inconvenient.\x20Please\x20only\x0ause\x20PGP\x20for\x20critical\x20security\x20reports.\x0a</p>\x0a\x0a<pre>\x0a-----BEGIN\x20PGP\x20PUBLIC\x20KEY\x20BLOCK-----\x0a\x0amQINBFXI1h0BEADZdm05GDFWvjmQKutUVb0cJKS+VR+6XU3g/YQZGC8tnIL6i7te\x0a+fPJHfQc2uIw0xeBgZX4Ni/S8yIqsbIjqYeaToX7QFUufJDQwrmlQRDVAvvT5HBT\x0aJ80JEs7yHRreFoLzB6dnWehWXzWle4gFKeIy+hvLrYquZVvbeEYTnX7fNzZg0+5L\x0aksvj7lnQlJIy1l3sL/7uPr9qsm45/hzd0WjTQS85Ry6Na3tMwRpqGENDh25Blz75\x0a8JgK9JmtTJa00my1zzeCXU04CKKEMRbkMLozzudOH4ZLiLWcFiKRpeCn860wC8l3\x0aoJcyyObuTSbr9o05ra3On+epjCEFkknGX1WxPv+TV34i0a23AtuVyTCloKb7RYXc\x0a7mUaskZpU2rFBqIkzZ4MQJ7RDtGlm5oBy36j2QL63jAZ1cKoT/yvjJNp2ObmWaVF\x0aX3tk/nYw2H0YDjTkTCgGtyAOj3Cfqrtsa5L0jG5K2p4RY8mtVgQ5EOh7QxuS+rmN\x0aJiA39SWh7O6uFCwkz/OCXzqeh6/nP10HAb9S9IC34QQxm7Fhd0ZXzEv9IlBTIRzk\x0axddSdACPnLE1gJcFHxBd2LTqS/lmAFShCsf8S252kagKJfHRebQJZHCIs6kT9PfE\x0a0muq6KRKeDXv01afAUvoB4QW/3chUrtgL2HryyO8ugMu7leVGmoZhFkIrQARAQAB\x0atCZHbyBTZWN1cml0eSBUZWFtIDxzZWN1cml0eUBnb2xhbmcub3JnPokCTgQTAQoA\x0aOAIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBGROHzjvGgTlE7xbTTpG0ZF5\x0aWlg4BQJd8rfQAAoJEDpG0ZF5Wlg4198P/2YDcEwEqWBWjriLFXdTGOcVxQ7AC/mX\x0aFe576zwgmrbqO00IaHOOqZZYXKd078FZyg2qQKILvfSAQB7EtLwfPEgv3Wca/Jb/\x0ama2hNz+AveiWDVuF4yPx8qvFer/6Yzv9+anfpUP//qfo/7L3VSYKwNAcqqNGvBMh\x0afLb7oWDSkdRmcu57c4WYv8i5BtxMRXs581r836bG3U0z0WQG8j64RpYp6sipqJnv\x0a09l3R5SXd7kkS26ntLU4fgTNJ6Eim7YoXsqLtVe4VZHGYz3D0yHnvCBpbJa2WpP2\x0aQT6TtFizvKtQlC0k1uo88VV8DyRdp2V6BO9cSNecvXZh81H0SjtD9MwdMnpX3shT\x0aLKu3L6wlJtb/EJVZg6+usJo0VunUdNTiBmy4FJrko7YYOSVHKKBA6dooufGNUSjw\x0a9Tieqh4jnzpg6+aIrNugZIrABH2G0GD/SvUSfjli0i+D1mqQSsMcLzE1BBcichpS\x0ahtjv6fU8nI5XXmloUn1P2WBwziemsb7YcfBLNVeCxlAmoJn1hnOPjNzmKfVZk95E\x0aVJNvVB76JCh+S/0bAba5+nBZ1HRn/FAbs9vfUpp1sOFf25jX9bDAZvkqwgyPpNv/\x0ajONK0zNXRD5AfKdCA1nkMI70NNS5oBxPowp95eKyuw4hCINvfuPq5sLJa3cIMj3M\x0aMVO91QDs9eXxuQINBFXI1h0BEACXD0f/XJtCzgrdcoDWOggjXqu1r0pLt7Dvr5qB\x0aejSN5JHAwRB8i07Fi9+Gajz7J2flNaxNuJ8ZTwvf4QFMxFHLNaFtoY7RaLPDsFNU\x0anufklb6d0+txSmn+KVSToBRXFo7/z9H735Ulmmh6gsddiWgUY25fnwYsjLWNIG8u\x0awuX8qLkg6se8PUYrpN+06XmPwg8LUtIGvAYk7zTfHvBR1A/+2wo39A9HymcGe2sS\x0aCtAVIj5DeqsK9UyZecGVi6aN84G3ykoyAH3+LH4dY3ymJA1CInEP5eMQzpfBSZCo\x0ahHvLkYg0paC6d0Ka1gjNWBj2nYGvpQ+tMmLXYt8q/mzZHo2fEUe/9p3b0Kk9N4sl\x0aGxKoV+oEv3r0EKmP+KxeZASbgW3OJmJ0BFejXYqIYCc8X2i2Ks0enj7yHA0Hexx/\x0atwjnfLydmK871zAjsGgKVjpkhpuMNwnGMr7bh6ajPeYnlIelmlAtJv2jwZsst9c6\x0ar7i7MRfYDfR+Gu2xBv/HQYzi/cRTVo/aaO6SzJhuCV21jri0PfnCoAD2ZWXlTH6D\x0aUehQG8vDSH6XPCHfvQ0nD/8hO8FBVS0MwH3qt8g/h8vmliXmmZHP6+y4nSJfObTm\x0aoGAp9Ko7tOj1JbFA91fz1Hi7T9dUCXDQCT1lx6rdb3q+x4RRNHdqhkIwg+LB9wNq\x0arrStZQARAQABiQI2BBgBCgAgAhsMFiEEZE4fOO8aBOUTvFtNOkbRkXlaWDgFAl3y\x0auFYACgkQOkbRkXlaWDiMgw//YvO2nZxWNSnQxqCEi8RXHV/3qsDDe8LloviFFV/M\x0aGSiGZBOhLJ0bFm9aKKPoye5mrZXBKvEVPu0h1zn43+lZruhARPiTu2AecQ7fstET\x0aPyXMZJ4mfLSFIaAumuH9dQEQJA9RRaFK8uzPRgAxVKyuNYS89psz/RvSeRM3B7Li\x0am9waLs42+5xtltR5F6HKPhrgS/rrFHKMrNiDNMMG2FYu1TjonA9QnzAxDPixH3A1\x0aVNEj6tVqVK8wCMpci3YaXZJntX0H3oO6qloL8qIpSMVrIiD4IDBDK13Jn3OJ7veq\x0aiDn1mbGFYtfu8R+QV2xeDSJ6nEKfV3Mc3PFDbJMdzkOCdvExC8qsuUOqO4J6dRt7\x0a9NVptL0xZqlBjpF9fq9XCt7ZcQLDqbUF/rUs58yKSqEGrruXTx4cTLtwkTLcqJOw\x0a/CSgFtE8cvY51uupuEFzfmt8JLNTxsm2X2NlsZYxFJhamVrGFroa55nqgKe3tF7e\x0aAQBU641SZRYloqGgPK+4PB79vV4RyEDETOpD3PvpN2IafVWDacI4LXW0a4EKnPUj\x0a7JwRBmZxESda3OixSONv/VcuEOyGAZUppbLM4XYTtslRIqdQJFr7Vkza/VIoUqaY\x0aMkFIioHf2QndVwDXt3d0b0aAGaLeMRD1MFGtLNigEDD45nPeEpuGzXkUATpVWGiV\x0abIs=\x0a=Nx85\x0a-----END\x20PGP\x20PUBLIC\x20KEY\x20BLOCK-----\x0a</pre>\x0a",
 
+	"doc/tutorial/add-a-test.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Add\x20a\x20test\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/add-a-test\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20Now\x20that\x20you've\x20gotten\x20your\x20code\x20to\x20a\x20stable\x20place\x20(nicely\x20done,\x20by\x20the\x20way),\x0a\x20\x20add\x20a\x20test.\x20Testing\x20your\x20code\x20during\x20development\x20can\x20expose\x20bugs\x20that\x20find\x0a\x20\x20their\x20way\x20in\x20as\x20you\x20make\x20changes.\x20In\x20this\x20topic,\x20you\x20add\x20a\x20test\x20for\x20the\x0a\x20\x20<code>Hello</code>\x20function.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<p>\x0a\x20\x20Go's\x20built-in\x20support\x20for\x20unit\x20testing\x20makes\x20it\x20easier\x20to\x20test\x20as\x20you\x20go.\x0a\x20\x20Specifically,\x20using\x20naming\x20conventions,\x20Go's\x20<code>testing</code>\x20package,\x20and\x0a\x20\x20the\x20<code>go\x20test</code>\x20command,\x20you\x20can\x20quickly\x20write\x20and\x20execute\x20tests.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20the\x20greetings\x20directory,\x20create\x20a\x20file\x20called\x20greetings_test.go.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Ending\x20a\x20file's\x20name\x20with\x20_test.go\x20tells\x20the\x20<code>go\x20test</code>\x20command\x0a\x20\x20\x20\x20\x20\x20that\x20this\x20file\x20contains\x20test\x20functions.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20greetings_test.go,\x20paste\x20the\x20following\x20code\x20and\x20save\x20the\x20file.\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20greetings\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"testing\"\x0a\x20\x20\x20\x20\"regexp\"\x0a)\x0a\x0a//\x20TestHelloName\x20calls\x20greetings.Hello\x20with\x20a\x20name,\x20checking\x20\x0a//\x20for\x20a\x20valid\x20return\x20value.\x0afunc\x20TestHelloName(t\x20*testing.T)\x20{\x0a\x20\x20\x20\x20name\x20:=\x20\"Gladys\"\x0a\x20\x20\x20\x20want\x20:=\x20regexp.MustCompile(`\\b`+name+`\\b`)\x0a\x20\x20\x20\x20msg,\x20err\x20:=\x20Hello(\"Gladys\")\x0a\x20\x20\x20\x20if\x20!want.MatchString(msg)\x20||\x20err\x20!=\x20nil\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20t.Fatalf(`Hello(\"Gladys\")\x20=\x20%q,\x20%v,\x20want\x20match\x20for\x20%#q,\x20nil`,\x20msg,\x20err,\x20want)\x0a\x20\x20\x20\x20}\x0a}\x0a\x0a//\x20TestHelloEmpty\x20calls\x20greetings.Hello\x20with\x20an\x20empty\x20string,\x20\x0a//\x20checking\x20for\x20an\x20error.\x0afunc\x20TestHelloEmpty(t\x20*testing.T)\x20{\x0a\x20\x20\x20\x20msg,\x20err\x20:=\x20Hello(\"\")\x0a\x20\x20\x20\x20if\x20msg\x20!=\x20\"\"\x20||\x20err\x20==\x20nil\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20t.Fatalf(`Hello(\"\")\x20=\x20%q,\x20%v,\x20want\x20\"\",\x20error`,\x20msg,\x20err)\x0a\x20\x20\x20\x20}\x0a}\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20If\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Implement\x20test\x20functions\x20in\x20the\x20same\x20package\x20as\x20the\x20code\x20you're\x20testing.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Create\x20two\x20test\x20functions\x20to\x20test\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>greetings.Hello</code>\x20function.\x20Test\x20function\x20names\x20have\x20the\x20form\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Test<em>Name</em></code\x0a\x20\x20\x20\x20\x20\x20\x20\x20>,\x20where\x20<em>Name</em>\x20is\x20specific\x20to\x20the\x20test.\x20Also,\x20test\x20functions\x0a\x20\x20\x20\x20\x20\x20\x20\x20take\x20a\x20pointer\x20to\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/testing/\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>testing</code>\x20package's</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>testing.T</code>\x20as\x20a\x20parameter.\x20You\x20use\x20this\x20parameter's\x20methods\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20reporting\x20and\x20logging\x20from\x20your\x20test.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Implement\x20two\x20tests:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>TestHelloName</code>\x20calls\x20the\x20<code>Hello</code>\x20function,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20passing\x20a\x20<code>name</code>\x20value\x20with\x20which\x20the\x20function\x20should\x20be\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20able\x20to\x20return\x20a\x20valid\x20response\x20message.\x20If\x20the\x20call\x20returns\x20an\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error\x20or\x20an\x20unexpected\x20response\x20message\x20(one\x20that\x20doesn't\x20include\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20name\x20you\x20passed\x20in),\x20you\x20use\x20the\x20<code>t</code>\x20parameter's\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>Fatalf</code>\x20method\x20to\x20print\x20a\x20message\x20to\x20the\x20console\x20and\x20end\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20execution.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>TestHelloEmpty</code>\x20calls\x20the\x20<code>Hello</code>\x20function\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20with\x20an\x20empty\x20string.\x20This\x20test\x20is\x20designed\x20to\x20confirm\x20that\x20your\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error\x20handling\x20works.\x20If\x20the\x20call\x20returns\x20a\x20non-empty\x20string\x20or\x20no\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error,\x20you\x20use\x20the\x20<code>t</code>\x20parameter's\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/testing/#T.Fatalf\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>Fatalf</code>\x20method</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20to\x20print\x20a\x20message\x20to\x20the\x20console\x20and\x20end\x20execution.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line\x20in\x20the\x20greetings\x20directory,\x20run\x20the\x0a\x20\x20\x20\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Test_packages\"\x0a\x20\x20\x20\x20\x20\x20><code>go\x20test</code>\x20command</a\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20to\x20execute\x20the\x20test.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x20<code>go\x20test</code>\x20command\x20executes\x20test\x20functions\x20(whose\x20names\x0a\x20\x20\x20\x20\x20\x20begin\x20with\x20<code>Test</code>)\x20in\x20test\x20files\x20(whose\x20names\x20end\x20with\x0a\x20\x20\x20\x20\x20\x20_test.go).\x20You\x20can\x20add\x20the\x20<code>-v</code>\x20flag\x20to\x20get\x20verbose\x20output\x20that\x0a\x20\x20\x20\x20\x20\x20lists\x20all\x20of\x20the\x20tests\x20and\x20their\x20results.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x20tests\x20should\x20pass.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20test\x0aPASS\x0aok\x20\x20\x20\x20\x20\x20example.com/greetings\x20\x20\x200.364s\x0a\x0a$\x20go\x20test\x20-v\x0a===\x20RUN\x20\x20\x20TestHelloName\x0a---\x20PASS:\x20TestHelloName\x20(0.00s)\x0a===\x20RUN\x20\x20\x20TestHelloEmpty\x0a---\x20PASS:\x20TestHelloEmpty\x20(0.00s)\x0aPASS\x0aok\x20\x20\x20\x20\x20\x20example.com/greetings\x20\x20\x200.372s\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Break\x20the\x20<code>greetings.Hello</code>\x20function\x20to\x20view\x20a\x20failing\x20test.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x20<code>TestHelloName</code>\x20test\x20function\x20checks\x20the\x20return\x20value\x20for\x0a\x20\x20\x20\x20\x20\x20the\x20name\x20you\x20specified\x20as\x20a\x20<code>Hello</code>\x20function\x20parameter.\x20To\x20view\x0a\x20\x20\x20\x20\x20\x20a\x20failing\x20test\x20result,\x20change\x20the\x20<code>greetings.Hello</code>\x20function\x20so\x0a\x20\x20\x20\x20\x20\x20that\x20it\x20no\x20longer\x20includes\x20the\x20name.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20greetings/greetings.go,\x20paste\x20the\x20following\x20code\x20in\x20place\x20of\x20the\x0a\x20\x20\x20\x20\x20\x20<code>Hello</code>\x20function.\x20Note\x20that\x20the\x20highlighted\x20lines\x20change\x20the\x0a\x20\x20\x20\x20\x20\x20value\x20that\x20the\x20function\x20returns,\x20as\x20if\x20the\x20<code>name</code>\x20argument\x20had\x0a\x20\x20\x20\x20\x20\x20been\x20accidentally\x20removed.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a//\x20Hello\x20returns\x20a\x20greeting\x20for\x20the\x20named\x20person.\x0afunc\x20Hello(name\x20string)\x20(string,\x20error)\x20{\x0a\x20\x20\x20\x20//\x20If\x20no\x20name\x20was\x20given,\x20return\x20an\x20error\x20with\x20a\x20message.\x0a\x20\x20\x20\x20if\x20name\x20==\x20\"\"\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20name,\x20errors.New(\"empty\x20name\")\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Create\x20a\x20message\x20using\x20a\x20random\x20format.\x0a\x20\x20\x20\x20<ins>//\x20message\x20:=\x20fmt.Sprintf(randomFormat(),\x20name)\x0a\x20\x20\x20\x20message\x20:=\x20fmt.Sprint(randomFormat())</ins>\x0a\x20\x20\x20\x20return\x20message,\x20nil\x0a}\x0a</pre>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line\x20in\x20the\x20greetings\x20directory,\x20run\x20<code>go\x20test</code>\x20to\x0a\x20\x20\x20\x20execute\x20the\x20test.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20This\x20time,\x20run\x20<code>go\x20test</code>\x20without\x20the\x20<code>-v</code>\x20flag.\x20The\x0a\x20\x20\x20\x20\x20\x20output\x20will\x20include\x20results\x20for\x20only\x20the\x20tests\x20that\x20failed,\x20which\x20can\x20be\x0a\x20\x20\x20\x20\x20\x20useful\x20when\x20you\x20have\x20a\x20lot\x20of\x20tests.\x20The\x20<code>TestHelloName</code>\x20test\x0a\x20\x20\x20\x20\x20\x20should\x20fail\x20--\x20<code>TestHelloEmpty</code>\x20still\x20passes.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20test\x0a---\x20FAIL:\x20TestHelloName\x20(0.00s)\x0a\x20\x20\x20\x20greetings_test.go:15:\x20Hello(\"Gladys\")\x20=\x20\"Hail,\x20%v!\x20Well\x20met!\",\x20&lt;nil>,\x20want\x20match\x20for\x20`\\bGladys\\b`,\x20nil\x0aFAIL\x0aexit\x20status\x201\x0aFAIL\x20\x20\x20\x20example.com/greetings\x20\x20\x200.182s\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20This\x20topic\x20introduced\x20Go's\x20built-in\x20support\x20for\x20unit\x20testing.\x20In\x20the\x0a\x20\x20tutorial's\x20<a\x20href=\"compile-install.html\">next\x20topic</a>,\x20you'll\x20see\x20how\x20to\x0a\x20\x20compile\x20and\x20install\x20your\x20code\x20to\x20run\x20it\x20locally.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"greetings-multiple-people.html\"\x0a\x20\x20\x20\x20>&lt;\x20Return\x20greetings\x20for\x20multiple\x20people</a\x0a\x20\x20>\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"compile-install.html\"\x0a\x20\x20\x20\x20>Compile\x20and\x20install\x20the\x20application\x20&gt;</a\x0a\x20\x20>\x0a</p>\x0a",
+
+	"doc/tutorial/call-module-code.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Call\x20your\x20code\x20from\x20another\x20module\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/call-module-code\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20In\x20the\x20<a\x20href=\"create-module.html\">previous\x20section</a>,\x20you\x20created\x20a\x0a\x20\x20<code>greetings</code>\x20module.\x20In\x20this\x20section,\x20you'll\x20write\x20code\x20to\x20make\x0a\x20\x20calls\x20to\x20the\x20<code>Hello</code>\x20function\x20in\x20the\x20module\x20you\x20just\x20wrote.\x20You'll\x0a\x20\x20write\x20code\x20you\x20can\x20execute\x20as\x20an\x20application,\x20and\x20which\x20calls\x20code\x20in\x20the\x0a\x20\x20<code>greetings</code>\x20module.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Create\x20a\x20<code>hello</code>\x20directory\x20for\x20your\x20Go\x20module\x20source\x20code.\x20This\x0a\x20\x20\x20\x20is\x20where\x20you'll\x20write\x20your\x20caller.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20For\x20example,\x20if\x20your\x20current\x20directory\x20in\x20the\x20command\x20prompt\x20is\x20the\x0a\x20\x20\x20\x20\x20\x20greetings\x20directory,\x20you\x20could\x20use\x20the\x20following\x20commands:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0acd\x20..\x0amkdir\x20hello\x0acd\x20hello\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20text\x20editor\x20(in\x20the\x20hello\x20directory),\x20create\x20a\x20file\x20in\x20which\x20to\x0a\x20\x20\x20\x20write\x20your\x20code\x20and\x20call\x20it\x20hello.go.\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Write\x20code\x20to\x20call\x20the\x20<code>Hello</code>\x20function,\x20then\x20print\x20the\x0a\x20\x20\x20\x20function's\x20return\x20value.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20To\x20do\x20that,\x20paste\x20the\x20following\x20code\x20into\x20hello.go.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"fmt\"\x0a\x0a\x20\x20\x20\x20\"example.com/greetings\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x20\x20\x20\x20//\x20Get\x20a\x20greeting\x20message\x20and\x20print\x20it.\x0a\x20\x20\x20\x20message\x20:=\x20greetings.Hello(\"Gladys\")\x0a\x20\x20\x20\x20fmt.Println(greeting)\x0a}\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Declare\x20a\x20<code>main</code>\x20package.\x20In\x20Go,\x20code\x20executed\x20as\x20an\x0a\x20\x20\x20\x20\x20\x20\x20\x20application\x20must\x20go\x20in\x20a\x20<code>main</code>\x20package.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Import\x20two\x20packages:\x20<code>example.com/greetings</code>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>fmt</code>.\x20This\x20gives\x20your\x20code\x20access\x20to\x20functions\x20in\x20those\x0a\x20\x20\x20\x20\x20\x20\x20\x20packages.\x20Importing\x20<code>example.com/greetings</code>\x20(the\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20contained\x20in\x20the\x20module\x20you\x20created\x20earlier)\x20gives\x20you\x20access\x20to\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Hello</code>\x20function.\x20You\x20also\x20import\x20<code>fmt</code>,\x20with\x0a\x20\x20\x20\x20\x20\x20\x20\x20functions\x20for\x20handling\x20input\x20and\x20output\x20text\x20(such\x20as\x20printing\x20text\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20console).\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Get\x20a\x20greeting\x20by\x20calling\x20the\x20<code>greetings</code>\x20package\xe2\x80\x99s\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Hello</code>\x20function.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Create\x20a\x20new\x20module\x20for\x20this\x20hello\x20package.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20From\x20the\x20command\x20line\x20at\x20the\x20hello\x20directory,\x20run\x20the\x0a\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20init</code>\x20command,\x20giving\x20it\x20the\x20name\x20of\x20the\x20module\x20your\x0a\x20\x20\x20\x20\x20\x20code\x20will\x20be\x20in\x20(here,\x20just\x20use\x20\"hello\").\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20mod\x20init\x20hello\x0ago:\x20creating\x20new\x20go.mod:\x20module\x20hello\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Edit\x20the\x20<code>hello</code>\x20module\x20to\x20use\x20the\x20unpublished\x20greetings\x20module.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20For\x20production\x20use,\x20you\xe2\x80\x99d\x20publish\x20your\x20modules\x20on\x20a\x20server,\x20either\x20inside\x0a\x20\x20\x20\x20\x20\x20your\x20company\x20or\x20on\x20the\x20internet,\x20and\x20the\x20Go\x20command\x20will\x20download\x20them\x0a\x20\x20\x20\x20\x20\x20from\x20there.\x20For\x20now,\x20you\x20need\x20to\x20adapt\x20the\x20caller's\x20module\x20so\x20it\x20can\x20find\x0a\x20\x20\x20\x20\x20\x20the\x20greetings\x20code\x20on\x20your\x20local\x20file\x20system.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20To\x20do\x20that,\x20make\x20a\x20small\x20change\x20to\x20<code>hello</code>\x20module\xe2\x80\x99s\x20go.mod\x0a\x20\x20\x20\x20\x20\x20file.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20hello\x20directory,\x20open\x20the\x20go.mod\x20file,\x20change\x20it\x20so\x20that\x20it\x20looks\x0a\x20\x20\x20\x20\x20\x20\x20\x20like\x20the\x20following,\x20and\x20save\x20the\x20file.\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0amodule\x20hello\x0a\x0ago\x201.14\x0a\x0a<ins>replace\x20example.com/greetings\x20=>\x20../greetings</ins>\x0a</pre>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Here,\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/ref/mod#tmp_15\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>replace</code>\x20directive</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tells\x20Go\x20to\x20replace\x20the\x20module\x20path\x20(the\x20URL\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>example.com/greetings</code>)\x20with\x20a\x20path\x20you\x20specify.\x20In\x20this\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20case,\x20that's\x20a\x20greetings\x20directory\x20next\x20to\x20the\x20hello\x20directory.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20hello\x20directory,\x20run\x20<code>go\x20build</code>\x20to\x20make\x20Go\x20locate\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20module\x20and\x20add\x20it\x20as\x20a\x20dependency\x20to\x20the\x20go.mod\x20file.\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20go\x20build\x0ago:\x20found\x20example.com/greetings\x20in\x20example.com/greetings\x20v0.0.0-00010101000000-000000000000\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Look\x20at\x20go.mod\x20again\x20to\x20see\x20the\x20changes\x20made\x20by\x20<code>go\x20build</code>,\x0a\x20\x20\x20\x20\x20\x20\x20\x20including\x20the\x20<code>require</code>\x20directive\x20Go\x20added.\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0amodule\x20hello\x0a\x0ago\x201.14\x0a\x0areplace\x20example.com/greetings\x20=>\x20../greetings\x0a\x0a<ins>require\x20example.com/greetings\x20v0.0.0-00010101000000-000000000000</ins>\x0a</pre>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20To\x20build\x20the\x20module,\x20Go\x20found\x20the\x20local\x20code\x20in\x20the\x20../greetings\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20directory,\x20then\x20added\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/ref/mod#tmp_13\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>require</code>\x20directive</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20to\x20specify\x20that\x20<code>hello</code>\x20is\x20dependent\x20on\x20(requires)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>example.com/greetings</code>.\x20You\x20created\x20this\x20dependency\x20when\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20you\x20imported\x20the\x20<code>greetings</code>\x20package\x20(contained\x20in\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20greetings\x20module)\x20in\x20hello.go.\x20The\x20<code>replace</code>\x20directive\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tells\x20Go\x20where\x20to\x20find\x20the\x20<code>greetings</code>\x20module,\x20because\x20it\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20isn't\x20published\x20yet.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20To\x20reference\x20a\x20published\x20module,\x20a\x20go.mod\x20file\x20would\x20omit\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>replace</code>\x20directive\x20and\x20use\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>require</code>\x20directive\x20with\x20a\x20tagged\x20version\x20number\x20at\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20end.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>require\x20example.com/greetings\x20v1.1.0</pre>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ol>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20the\x20<code>hello</code>\x20directory,\x20run\x20the\x20<code>hello</code>\x20executable\x0a\x20\x20\x20\x20(created\x20by\x20<code>go\x20build</code>)\x20to\x20confirm\x20that\x20the\x20code\x20works.\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20On\x20Linux\x20or\x20Mac:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20./hello\x0aHi,\x20Gladys.\x20Welcome!\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20On\x20Windows:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0a$\x20hello.exe\x0aHi,\x20Gladys.\x20Welcome!\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20Congrats!\x20You've\x20written\x20two\x20functioning\x20modules.\x20In\x20the\x20tutorial's\x0a\x20\x20<a\x20href=\"handle-errors.html\">next\x20topic</a>,\x20you'll\x20add\x20some\x20error\x20handling.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"create-module.html\"\x0a\x20\x20\x20\x20>&lt;\x20Create\x20a\x20Go\x20module</a\x0a\x20\x20>\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"handle-errors.html\"\x0a\x20\x20\x20\x20>Return\x20and\x20handle\x20an\x20error\x20&gt;</a\x0a\x20\x20>\x0a</p>\x0a",
+
+	"doc/tutorial/compile-install.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Compile\x20and\x20install\x20the\x20application\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/compile-install\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20In\x20the\x20last\x20section,\x20you'll\x20learn\x20a\x20new\x20<code>go</code>\x20command.\x20While\x20the\x0a\x20\x20<code>go\x20run</code>\x20command\x20is\x20a\x20useful\x20shortcut\x20for\x20compiling\x20and\x20running\x20a\x0a\x20\x20single-file\x20program,\x20it\x20doesn't\x20generate\x20a\x20binary\x20executable\x20you\x20can\x20easily\x0a\x20\x20run\x20again.\x20If\x20you\x20want\x20one\x20of\x20those,\x20a\x20good\x20choice\x20is\x20to\x20run\x20the\x0a\x20\x20<a\x0a\x20\x20\x20\x20href=\"https://golang.org/cmd/go/#hdr-Compile_and_install_packages_and_dependencies\"\x0a\x20\x20\x20\x20><code>go\x20install</code>\x20command</a\x0a\x20\x20>,\x20which\x20compiles\x20your\x20code\x20and\x20installs\x20the\x20resulting\x20binary\x20executable\x20where\x0a\x20\x20you\x20can\x20run\x20it.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line,\x20change\x20to\x20the\x20directory\x20that\x20contains\x20hello/hello.go.\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Discover\x20the\x20Go\x20install\x20path,\x20where\x20the\x20<code>go</code>\x20command\x20will\x20install\x0a\x20\x20\x20\x20the\x20current\x20package.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20You\x20can\x20discover\x20the\x20install\x20path\x20by\x20running\x20the\x0a\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-List_packages_or_modules\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20><code>go\x20list</code>\x20command</a\x0a\x20\x20\x20\x20\x20\x20>,\x20as\x20in\x20the\x20following\x20example:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0ago\x20list\x20-f\x20'{{.Target}}'\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20For\x20example,\x20the\x20command's\x20output\x20might\x20say\x0a\x20\x20\x20\x20\x20\x20<code>/home/gopher/bin/hello</code>,\x20meaning\x20that\x20binaries\x20are\x20installed\x0a\x20\x20\x20\x20\x20\x20to\x20/home/gopher/bin.\x20This\x20is\x20the\x20install\x20directory\x20you'll\x20need\x20in\x20the\x20next\x0a\x20\x20\x20\x20\x20\x20step.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Add\x20the\x20Go\x20install\x20directory\x20to\x20your\x20system's\x20shell\x20path.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20That\x20way,\x20you'll\x20be\x20able\x20to\x20run\x20your\x20program's\x20executable\x20without\x0a\x20\x20\x20\x20\x20\x20specifying\x20where\x20the\x20executable\x20is.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20On\x20Linux\x20or\x20Mac,\x20run\x20the\x20following\x20command:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0aexport\x20PATH=$PATH:/path/to/your/install/directory\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20On\x20Windows,\x20run\x20the\x20following\x20command:\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0aset\x20PATH=%PATH%;C:\\path\\to\\your\\install\\directory\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20As\x20an\x20alternative,\x20if\x20you\x20already\x20have\x20a\x20directory\x20like\x0a\x20\x20\x20\x20\x20\x20<code>$HOME/bin</code>\x20in\x20your\x20shell\x20path\x20and\x20you'd\x20like\x20to\x20install\x20your\x0a\x20\x20\x20\x20\x20\x20Go\x20programs\x20there,\x20you\x20can\x20change\x20the\x20install\x20target\x20by\x20setting\x20the\x20GOBIN\x0a\x20\x20\x20\x20\x20\x20variable\x20using\x20the\x0a\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Print_Go_environment_information\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20><code>go\x20env</code>\x20command</a\x0a\x20\x20\x20\x20\x20\x20>:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0ago\x20env\x20-w\x20GOBIN=/path/to/your/bin\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20or\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0ago\x20env\x20-w\x20GOBIN=C:\\path\\to\\your\\bin\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Once\x20you've\x20updated\x20the\x20shell\x20path,\x20run\x20the\x20<code>go\x20install</code>\x20command\x0a\x20\x20\x20\x20to\x20compile\x20and\x20install\x20the\x20package.\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20install\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Run\x20your\x20application\x20by\x20simply\x20typing\x20its\x20name.\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20hello\x0amap[Darrin:Hail,\x20Darrin!\x20Well\x20met!\x20Gladys:Great\x20to\x20see\x20you,\x20Gladys!\x20Samantha:Hail,\x20Samantha!\x20Well\x20met!]\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20That\x20wraps\x20up\x20this\x20Go\x20tutorial!\x20For\x20a\x20next\x20step\x20that\x20introduces\x20many\x20more\x20of\x0a\x20\x20Go\x20features,\x20check\x20out\x20the\x0a\x20\x20<a\x20href=\"https://tour.golang.org/welcome/1\">Tour\x20of\x20Go</a>.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"add-a-test.html\">&lt;\x20Add\x20a\x20test</a>\x0a</p>\x0a",
+
+	"doc/tutorial/create-module.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Tutorial:\x20Create\x20a\x20Go\x20module\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/create-module\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20This\x20is\x20the\x20first\x20part\x20of\x20a\x20tutorial\x20that\x20introduces\x20a\x20few\x20fundamental\x0a\x20\x20features\x20of\x20the\x20Go\x20language.\x20If\x20you're\x20just\x20getting\x20started\x20with\x20Go,\x20be\x20sure\x0a\x20\x20to\x20take\x20a\x20look\x20at\x20the\x0a\x20\x20<a\x20href=\"getting-started.html\">getting\x20started</a>\x20tutorial,\x20which\x20introduces\x0a\x20\x20the\x20<code>go</code>\x20command,\x20Go\x20modules,\x20and\x20very\x20simple\x20Go\x20code.\x0a</p>\x0a\x0a<p>\x0a\x20\x20In\x20this\x20tutorial\x20you'll\x20create\x20two\x20modules.\x20The\x20first\x20is\x20a\x20library\x20which\x20is\x0a\x20\x20intended\x20to\x20be\x20imported\x20by\x20other\x20libraries\x20or\x20applications.\x20The\x20second\x20is\x20a\x0a\x20\x20caller\x20application\x20which\x20will\x20use\x20the\x20first.\x0a</p>\x0a\x0a<p>\x0a\x20\x20This\x20tutorial's\x20sequence\x20includes\x20six\x20brief\x20topics\x20that\x20each\x20illustrate\x20a\x0a\x20\x20different\x20part\x20of\x20the\x20language.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Create\x20a\x20module\x20--\x20Write\x20a\x20small\x20module\x20with\x20functions\x20you\x20can\x20call\x20from\x0a\x20\x20\x20\x20another\x20module.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"call-module-code.html\">Call\x20your\x20code\x20from\x20another\x20module</a>\x20--\x0a\x20\x20\x20\x20Add\x20simple\x20error\x20handling.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"handle-errors.html\">Return\x20and\x20handle\x20an\x20error</a>\x20--\x20Add\x20simple\x0a\x20\x20\x20\x20error\x20handling.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"random-greeting.html\">Return\x20a\x20random\x20greeting</a>\x20--\x20Handle\x20data\x0a\x20\x20\x20\x20in\x20slices\x20(Go's\x20dynamically-sized\x20arrays).\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"greetings-multiple-people.html\"\x0a\x20\x20\x20\x20\x20\x20>Return\x20greetings\x20for\x20multiple\x20people</a\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20--\x20Store\x20key/value\x20pairs\x20in\x20a\x20map.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"add-a-test.html\">Add\x20a\x20test</a>\x20--\x20Use\x20Go's\x20built-in\x20unit\x20testing\x0a\x20\x20\x20\x20features\x20to\x20test\x20your\x20code.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<a\x20href=\"compile-install.html\">Compile\x20and\x20install\x20the\x20application</a>\x20--\x0a\x20\x20\x20\x20Compile\x20and\x20install\x20your\x20code\x20locally.\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20For\x20other\x20tutorials,\x20see\x0a\x20\x20<a\x20href=\"index.html\">Tutorials</a>.\x0a</aside>\x0a\x0a<h2\x20id=\"prerequisites\">Prerequisites</h2>\x0a\x0a<ul>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>Some\x20programming\x20experience.</strong>\x20The\x20code\x20here\x20is\x20pretty\x0a\x20\x20\x20\x20simple,\x20but\x20it\x20helps\x20to\x20know\x20something\x20about\x20functions,\x20loops,\x20and\x20arrays.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>A\x20tool\x20to\x20edit\x20your\x20code.</strong>\x20Any\x20text\x20editor\x20you\x20have\x20will\x0a\x20\x20\x20\x20work\x20fine.\x20Most\x20text\x20editors\x20have\x20good\x20support\x20for\x20Go.\x20The\x20most\x20popular\x20are\x0a\x20\x20\x20\x20VSCode\x20(free),\x20GoLand\x20(paid),\x20and\x20Vim\x20(free).\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>A\x20command\x20terminal.</strong>\x20Go\x20works\x20well\x20using\x20any\x20terminal\x20on\x0a\x20\x20\x20\x20Linux\x20and\x20Mac,\x20and\x20on\x20PowerShell\x20or\x20cmd\x20in\x20Windows.\x0a\x20\x20</li>\x0a</ul>\x0a\x0a<h2\x20id=\"start\">Start\x20a\x20module\x20that\x20others\x20can\x20use</h2>\x0a\x0a<p>\x0a\x20\x20Start\x20by\x20creating\x20a\x0a\x20\x20<a\x20href=\"https://golang.org/doc/code.html#Organization\">Go\x20module</a>.\x20In\x20a\x0a\x20\x20module,\x20you\x20collect\x20one\x20or\x20more\x20related\x20packages\x20for\x20a\x20discrete\x20and\x20useful\x20set\x0a\x20\x20of\x20functions.\x20For\x20example,\x20you\x20might\x20create\x20a\x20module\x20with\x20packages\x20that\x20have\x0a\x20\x20functions\x20for\x20doing\x20financial\x20analysis\x20so\x20that\x20others\x20writing\x20financial\x0a\x20\x20applications\x20can\x20use\x20your\x20work.\x0a</p>\x0a\x0a<p>\x0a\x20\x20Go\x20code\x20is\x20grouped\x20into\x20packages,\x20and\x20packages\x20are\x20grouped\x20into\x20modules.\x20Your\x0a\x20\x20package's\x20module\x20specifies\x20the\x20context\x20Go\x20needs\x20to\x20run\x20the\x20code,\x20including\x20the\x0a\x20\x20Go\x20version\x20the\x20code\x20is\x20written\x20for\x20and\x20the\x20set\x20of\x20other\x20modules\x20it\x20requires.\x0a</p>\x0a\x0a<p>\x0a\x20\x20As\x20you\x20add\x20or\x20improve\x20functionality\x20in\x20your\x20module,\x20you\x20publish\x20new\x20versions\x0a\x20\x20of\x20the\x20module.\x20Developers\x20writing\x20code\x20that\x20calls\x20functions\x20in\x20your\x20module\x20can\x0a\x20\x20import\x20the\x20module's\x20updated\x20packages\x20and\x20test\x20with\x20the\x20new\x20version\x20before\x0a\x20\x20putting\x20it\x20into\x20production\x20use.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Open\x20a\x20command\x20prompt\x20and\x20<code>cd</code>\x20to\x20your\x20home\x20directory.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20On\x20Linux\x20or\x20Mac:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0acd\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20On\x20Windows:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0acd\x20%HOMEPATH%\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Create\x20a\x20<code>greetings</code>\x20directory\x20for\x20your\x20Go\x20module\x20source\x20code.\x0a\x20\x20\x20\x20This\x20is\x20where\x20you'll\x20write\x20your\x20module\x20code.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20For\x20example,\x20from\x20your\x20home\x20directory\x20use\x20the\x20following\x20commands:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0amkdir\x20greetings\x0acd\x20greetings\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Start\x20your\x20module\x20using\x20the\x0a\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20href=\"https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory\"\x0a\x20\x20\x20\x20\x20\x20><code>go\x20mod\x20init</code>\x20command</a\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20to\x20create\x20a\x20go.mod\x20file.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Run\x20the\x20<code>go\x20mod\x20init</code>\x20command,\x20giving\x20it\x20the\x20path\x20of\x20the\x20module\x0a\x20\x20\x20\x20\x20\x20your\x20code\x20will\x20be\x20in.\x20Here,\x20use\x20<code>example.com/greetings</code>\x20for\x20the\x0a\x20\x20\x20\x20\x20\x20module\x20path\x20--\x20in\x20production\x20code,\x20this\x20would\x20be\x20the\x20URL\x20from\x20which\x20your\x0a\x20\x20\x20\x20\x20\x20module\x20can\x20be\x20downloaded.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20mod\x20init\x20example.com/greetings\x0ago:\x20creating\x20new\x20go.mod:\x20module\x20example.com/greetings\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x20<code>go\x20mod\x20init</code>\x20command\x20creates\x20a\x20go.mod\x20file\x20that\x20identifies\x0a\x20\x20\x20\x20\x20\x20your\x20code\x20as\x20a\x20module\x20that\x20might\x20be\x20used\x20from\x20other\x20code.\x20The\x20file\x20you\x0a\x20\x20\x20\x20\x20\x20just\x20created\x20includes\x20only\x20the\x20name\x20of\x20your\x20module\x20and\x20the\x20Go\x20version\x20your\x0a\x20\x20\x20\x20\x20\x20code\x20supports.\x20But\x20as\x20you\x20add\x20dependencies\x20--\x20meaning\x20packages\x20from\x20other\x0a\x20\x20\x20\x20\x20\x20modules\x20--\x20the\x20go.mod\x20file\x20will\x20list\x20the\x20specific\x20module\x20versions\x20to\x20use.\x0a\x20\x20\x20\x20\x20\x20This\x20keeps\x20builds\x20reproducible\x20and\x20gives\x20you\x20direct\x20control\x20over\x20which\x0a\x20\x20\x20\x20\x20\x20module\x20versions\x20to\x20use.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20text\x20editor,\x20create\x20a\x20file\x20in\x20which\x20to\x20write\x20your\x20code\x20and\x20call\x20it\x0a\x20\x20\x20\x20greetings.go.\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Paste\x20the\x20following\x20code\x20into\x20your\x20greetings.go\x20file\x20and\x20save\x20the\x20file.\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20greetings\x0a\x0aimport\x20\"fmt\"\x0a\x0a//\x20Hello\x20returns\x20a\x20greeting\x20for\x20the\x20named\x20person.\x0afunc\x20Hello(name\x20string)\x20string\x20{\x0a//\x20Return\x20a\x20greeting\x20that\x20embeds\x20the\x20name\x20in\x20a\x20message.\x0a\x20\x20\x20\x20message\x20:=\x20fmt.Sprintf(\"Hi,\x20%v.\x20Welcome!\",\x20name)\x0a\x20\x20\x20\x20return\x20message\x0a}\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20This\x20is\x20the\x20first\x20code\x20for\x20your\x20module.\x20It\x20returns\x20a\x20greeting\x20to\x20any\x0a\x20\x20\x20\x20\x20\x20caller\x20that\x20asks\x20for\x20one.\x20You'll\x20write\x20code\x20that\x20calls\x20this\x20function\x20in\x0a\x20\x20\x20\x20\x20\x20the\x20next\x20step.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Declare\x20a\x20<code>greetings</code>\x20package\x20to\x20collect\x20related\x20functions.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Implement\x20a\x20<code>Hello</code>\x20function\x20to\x20return\x20the\x20greeting.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20This\x20function\x20takes\x20a\x20<code>name</code>\x20parameter\x20whose\x20type\x20is\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>string</code>,\x20and\x20returns\x20a\x20<code>string</code>.\x20In\x20Go,\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20function\x20whose\x20name\x20starts\x20with\x20a\x20capital\x20letter\x20can\x20be\x20called\x20by\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20function\x20not\x20in\x20the\x20same\x20package.\x20This\x20is\x20known\x20in\x20Go\x20as\x20an\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://tour.golang.org/basics/3\"><em>exported</em>\x20name</a>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<img\x20src=\"images/function-syntax.png\"\x20width=\"300px\"\x20/>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Declare\x20a\x20<code>message</code>\x20variable\x20to\x20hold\x20your\x20greeting.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20Go,\x20the\x20<code>:=</code>\x20operator\x20is\x20a\x20shortcut\x20for\x20declaring\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20initializing\x20a\x20variable\x20in\x20one\x20line\x20(Go\x20uses\x20the\x20value\x20on\x20the\x20right\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20determine\x20the\x20variable's\x20type).\x20Taking\x20the\x20long\x20way,\x20you\x20might\x20have\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20written\x20this\x20as:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0avar\x20message\x20string\x0amessage\x20=\x20fmt.Sprintf(\"Hi,\x20%v.\x20Welcome!\",\x20name)\x0a</pre\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20the\x20<code>fmt</code>\x20package's\x20<code>Sprintf</code>\x20function\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20create\x20a\x20greeting\x20message.\x20The\x20first\x20argument\x20is\x20a\x20format\x20string,\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Sprintf</code>\x20substitutes\x20the\x20<code>name</code>\x20parameter's\x20value\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20the\x20<code>%v</code>\x20format\x20verb.\x20Inserting\x20the\x20value\x20of\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>name</code>\x20parameter\x20completes\x20the\x20greeting\x20text.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>Return\x20the\x20formatted\x20greeting\x20text\x20to\x20the\x20caller.</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20In\x20the\x20<a\x20href=\"call-module-code.html\">next\x20step</a>,\x20you'll\x20call\x20this\x0a\x20\x20function\x20from\x20another\x20module.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"call-module-code.html\"\x0a\x20\x20\x20\x20>Call\x20your\x20code\x20from\x20another\x20module\x20&gt;</a\x0a\x20\x20>\x0a</p>\x0a",
+
+	"doc/tutorial/getting-started.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Tutorial:\x20Get\x20started\x20with\x20Go\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/getting-started\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20In\x20this\x20tutorial,\x20you'll\x20get\x20a\x20brief\x20introduction\x20to\x20Go\x20programming.\x20Along\x20the\x0a\x20\x20way,\x20you\x20will:\x0a</p>\x0a\x0a<ul>\x0a\x20\x20<li>Install\x20Go\x20(if\x20you\x20haven't\x20already).</li>\x0a\x20\x20<li>Write\x20some\x20simple\x20\"Hello,\x20world\"\x20code.</li>\x0a\x20\x20<li>Use\x20the\x20<code>go</code>\x20command\x20to\x20run\x20your\x20code.</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Use\x20the\x20Go\x20package\x20discovery\x20tool\x20to\x20find\x20packages\x20you\x20can\x20use\x20in\x20your\x20own\x0a\x20\x20\x20\x20code.\x0a\x20\x20</li>\x0a\x20\x20<li>Call\x20functions\x20of\x20an\x20external\x20module.</li>\x0a</ul>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20For\x20other\x20tutorials,\x20see\x0a\x20\x20<a\x20href=\"index.html\">Tutorials</a>.\x0a</aside>\x0a\x0a<h2\x20id=\"prerequisites\">Prerequisites</h2>\x0a\x0a<ul>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>Some\x20programming\x20experience.</strong>\x20The\x20code\x20here\x20is\x20pretty\x0a\x20\x20\x20\x20simple,\x20but\x20it\x20helps\x20to\x20know\x20something\x20about\x20functions.\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>A\x20tool\x20to\x20edit\x20your\x20code.</strong>\x20Any\x20text\x20editor\x20you\x20have\x20will\x0a\x20\x20\x20\x20work\x20fine.\x20Most\x20text\x20editors\x20have\x20good\x20support\x20for\x20Go.\x20The\x20most\x20popular\x20are\x0a\x20\x20\x20\x20VSCode\x20(free),\x20GoLand\x20(paid),\x20and\x20Vim\x20(free).\x0a\x20\x20</li>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20<strong>A\x20command\x20terminal.</strong>\x20Go\x20works\x20well\x20using\x20any\x20terminal\x20on\x0a\x20\x20\x20\x20Linux\x20and\x20Mac,\x20and\x20on\x20PowerShell\x20or\x20cmd\x20in\x20Windows.\x0a\x20\x20</li>\x0a</ul>\x0a\x0a<h2\x20id=\"install\">Install\x20Go</h2>\x0a\x0a<p>Just\x20use\x20the\x20<a\x20href=\"/doc/install\">Download\x20and\x20install</a>\x20steps.</p>\x0a\x0a<h2\x20id=\"code\">Write\x20some\x20code</h2>\x0a\x0a<p>\x0a\x20\x20Get\x20started\x20with\x20Hello,\x20World.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Open\x20a\x20command\x20prompt\x20and\x20cd\x20to\x20your\x20home\x20directory.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20On\x20Linux\x20or\x20Mac:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0acd\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20On\x20Windows:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0acd\x20%HOMEPATH%\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Create\x20a\x20hello\x20directory\x20for\x20your\x20first\x20Go\x20source\x20code.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20For\x20example,\x20use\x20the\x20following\x20commands:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0amkdir\x20hello\x0acd\x20hello\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20text\x20editor,\x20create\x20a\x20file\x20hello.go\x20in\x20which\x20to\x20write\x20your\x20code.\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Paste\x20the\x20following\x20code\x20into\x20your\x20hello.go\x20file\x20and\x20save\x20the\x20file.\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x20\x20\x20\x20fmt.Println(\"Hello,\x20World!\")\x0a}\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20This\x20is\x20your\x20Go\x20code.\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Declare\x20a\x20<code>main</code>\x20package\x20(a\x20package\x20is\x20a\x20way\x20to\x20group\x0a\x20\x20\x20\x20\x20\x20\x20\x20functions).\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Import\x20the\x20popular\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/fmt/\"><code>fmt</code>\x20package</a>,\x0a\x20\x20\x20\x20\x20\x20\x20\x20which\x20contains\x20functions\x20for\x20formatting\x20text,\x20including\x20printing\x20to\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.\x20This\x20package\x20is\x20one\x20of\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/\">standard\x20library</a>\x20packages\x20you\x20got\x0a\x20\x20\x20\x20\x20\x20\x20\x20when\x20you\x20installed\x20Go.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Implement\x20a\x20<code>main</code>\x20function\x20to\x20print\x20a\x20message\x20to\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.\x20A\x20<code>main</code>\x20function\x20executes\x20by\x20default\x20when\x20you\x20run\x0a\x20\x20\x20\x20\x20\x20\x20\x20code\x20in\x20the\x20file.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Run\x20your\x20code\x20to\x20see\x20the\x20greeting.\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20run\x20hello.go\x0aHello,\x20World!\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x0a\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Compile_and_run_Go_program\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20><code>go\x20run</code>\x20command</a\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20is\x20one\x20of\x20many\x20<code>go</code>\x20commands\x20you'll\x20use\x20to\x20get\x20things\x20done\x20with\x0a\x20\x20\x20\x20\x20\x20Go.\x20Use\x20the\x20following\x20command\x20to\x20get\x20a\x20list\x20of\x20the\x20others:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20help\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<h2\x20id=\"call\">Call\x20code\x20in\x20an\x20external\x20package</h2>\x0a\x0a<p>\x0a\x20\x20When\x20you\x20need\x20your\x20code\x20to\x20do\x20something\x20that\x20might\x20have\x20been\x20implemented\x20by\x0a\x20\x20someone\x20else,\x20you\x20can\x20look\x20for\x20a\x20package\x20that\x20has\x20functions\x20you\x20can\x20use\x20in\x0a\x20\x20your\x20code.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Make\x20your\x20printed\x20message\x20a\x20little\x20more\x20interesting\x20with\x20a\x20function\x20from\x20an\x0a\x20\x20\x20\x20external\x20module.\x0a\x0a\x20\x20\x20\x20<ol>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Visit\x20pkg.go.dev\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://pkg.go.dev/search?q=quote\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>search\x20for\x20a\x20\"quote\"\x20package</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Locate\x20and\x20click\x20the\x20<code>rsc.io/quote</code>\x20package\x20in\x20search\x20results\x0a\x20\x20\x20\x20\x20\x20\x20\x20(if\x20you\x20see\x20<code>rsc.io/quote/v3</code>,\x20ignore\x20it\x20for\x20now).\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20On\x20the\x20<strong>Doc</strong>\x20tab,\x20under\x20<strong>Index</strong>,\x20note\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20list\x20of\x20functions\x20you\x20can\x20call\x20from\x20your\x20code.\x20You'll\x20use\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Go</code>\x20function.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20At\x20the\x20top\x20of\x20this\x20page,\x20note\x20that\x20package\x20<code>quote</code>\x20is\x0a\x20\x20\x20\x20\x20\x20\x20\x20included\x20in\x20the\x20<code>rsc.io/quote</code>\x20module.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ol>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20You\x20can\x20use\x20the\x20pkg.go.dev\x20site\x20to\x20find\x20published\x20modules\x20whose\x20packages\x0a\x20\x20\x20\x20\x20\x20have\x20functions\x20you\x20can\x20use\x20in\x20your\x20own\x20code.\x20Packages\x20are\x20published\x20in\x0a\x20\x20\x20\x20\x20\x20modules\x20--\x20like\x20<code>rsc.io/quote</code>\x20--\x20where\x20others\x20can\x20use\x20them.\x0a\x20\x20\x20\x20\x20\x20Modules\x20are\x20improved\x20with\x20new\x20versions\x20over\x20time,\x20and\x20you\x20can\x20upgrade\x20your\x0a\x20\x20\x20\x20\x20\x20code\x20to\x20use\x20the\x20improved\x20versions.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20Go\x20code,\x20import\x20the\x20<code>rsc.io/quote</code>\x20package\x20and\x20add\x20a\x20call\x0a\x20\x20\x20\x20to\x20its\x20<code>Go</code>\x20function.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20After\x20adding\x20the\x20highlighted\x20lines,\x20your\x20code\x20should\x20include\x20the\x0a\x20\x20\x20\x20\x20\x20following:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0a<ins>import\x20\"rsc.io/quote\"</ins>\x0a\x0afunc\x20main()\x20{\x0a\x20\x20\x20\x20<ins>fmt.Println(quote.Go())</ins>\x0a}\x0a</pre>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Put\x20your\x20own\x20code\x20in\x20a\x20module\x20for\x20tracking\x20dependencies.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20When\x20your\x20code\x20imports\x20packages\x20from\x20another\x20module,\x20a\x20go.mod\x20file\x20lists\x0a\x20\x20\x20\x20\x20\x20the\x20specific\x20modules\x20and\x20versions\x20providing\x20those\x20packages.\x20That\x20file\x0a\x20\x20\x20\x20\x20\x20stays\x20with\x20your\x20code,\x20including\x20in\x20your\x20source\x20code\x20repository.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20To\x20create\x20a\x20go.mod\x20file,\x20run\x20the\x0a\x20\x20\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20\x20\x20href=\"https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20><code>go\x20mod\x20init</code>\x20command</a\x0a\x20\x20\x20\x20\x20\x20>,\x20giving\x20it\x20the\x20name\x20of\x20the\x20module\x20your\x20code\x20will\x20be\x20in\x20(here,\x20just\x20use\x0a\x20\x20\x20\x20\x20\x20\"hello\"):\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20mod\x20init\x20hello\x0ago:\x20creating\x20new\x20go.mod:\x20module\x20hello\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20Run\x20your\x20code\x20to\x20see\x20the\x20message\x20generated\x20by\x20the\x20function\x20you're\x20calling.\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20run\x20hello.go\x0ago:\x20finding\x20module\x20for\x20package\x20rsc.io/quote\x0ago:\x20found\x20rsc.io/quote\x20in\x20rsc.io/quote\x20v1.5.2\x0aDon't\x20communicate\x20by\x20sharing\x20memory,\x20share\x20memory\x20by\x20communicating.\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Notice\x20that\x20your\x20code\x20calls\x20the\x20<code>Go</code>\x20function,\x20printing\x20a\x0a\x20\x20\x20\x20\x20\x20clever\x20message\x20about\x20communication.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20But\x20before\x20it\x20ran\x20the\x20code,\x20<code>go\x20run</code>\x20located\x20and\x20downloaded\x20the\x0a\x20\x20\x20\x20\x20\x20<code>rsc.io/quote</code>\x20module\x20that\x20contains\x20the\x20package\x20you\x20imported.\x0a\x20\x20\x20\x20\x20\x20By\x20default,\x20it\x20downloaded\x20the\x20latest\x20version\x20--\x20v1.5.2.\x20Go\x20build\x20commands\x0a\x20\x20\x20\x20\x20\x20are\x20designed\x20to\x20locate\x20the\x20modules\x20required\x20for\x20packages\x20you\x20import.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<h2\x20id=\"write-more\">Write\x20more\x20code</h2>\x0a\x0a<p>\x0a\x20\x20With\x20this\x20quick\x20introduction,\x20you\x20got\x20Go\x20installed\x20and\x20learned\x20some\x20of\x20the\x0a\x20\x20basics.\x20To\x20write\x20some\x20more\x20code\x20with\x20another\x20tutorial,\x20take\x20a\x20look\x20at\x0a\x20\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</p>\x0a",
+
+	"doc/tutorial/greetings-multiple-people.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Return\x20greetings\x20for\x20multiple\x20people\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/greetings-multiple-people\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20In\x20the\x20last\x20changes\x20you'll\x20make\x20to\x20your\x20module's\x20code,\x20you'll\x20add\x20support\x20for\x0a\x20\x20getting\x20greetings\x20for\x20multiple\x20people\x20in\x20one\x20request.\x20In\x20other\x20words,\x20you'll\x0a\x20\x20handle\x20a\x20multiple-value\x20input\x20and\x20pair\x20values\x20with\x20a\x20multiple-value\x20output.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<p>\x0a\x20\x20To\x20do\x20this,\x20you'll\x20need\x20to\x20pass\x20a\x20set\x20of\x20names\x20to\x20a\x20function\x20that\x20can\x20return\x20a\x0a\x20\x20greeting\x20for\x20each\x20of\x20them.\x20Changing\x20the\x20<code>Hello</code>\x20function's\x0a\x20\x20parameter\x20from\x20a\x20single\x20name\x20to\x20a\x20set\x20of\x20names\x20would\x20change\x20the\x20function\x0a\x20\x20signature.\x20If\x20you\x20had\x20already\x20published\x20the\x20<code>greetings</code>\x20module\x20and\x0a\x20\x20users\x20had\x20already\x20written\x20code\x20calling\x20<code>Hello</code>,\x20that\x20change\x20would\x0a\x20\x20break\x20their\x20programs.\x20In\x20this\x20situation,\x20a\x20better\x20choice\x20is\x20to\x20give\x20new\x0a\x20\x20functionality\x20a\x20new\x20name.\x0a</p>\x0a\x0a<p>\x0a\x20\x20In\x20the\x20last\x20code\x20you'll\x20add\x20with\x20this\x20tutorial,\x20update\x20the\x20code\x20as\x20if\x20you've\x0a\x20\x20already\x20published\x20a\x20version\x20of\x20the\x20<code>greetings</code>\x20module.\x20Instead\x20of\x0a\x20\x20changing\x20the\x20<code>Hello</code>\x20function,\x20add\x20a\x20new\x20function\x0a\x20\x20<code>Hellos</code>\x20that\x20takes\x20a\x20set\x20of\x20names.\x20Then,\x20for\x20the\x20sake\x20of\x0a\x20\x20simplicity,\x20have\x20the\x20new\x20function\x20call\x20the\x20existing\x20one.\x20Keeping\x20both\x0a\x20\x20functions\x20in\x20the\x20package\x20leaves\x20the\x20original\x20for\x20existing\x20callers\x20(or\x20future\x0a\x20\x20callers\x20who\x20only\x20need\x20one\x20greeting)\x20and\x20adds\x20a\x20new\x20one\x20for\x20callers\x20that\x20want\x0a\x20\x20the\x20expanded\x20functionality.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20greetings/greetings.go,\x20change\x20your\x20code\x20so\x20it\x20looks\x20like\x20the\x20following.\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20greetings\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"errors\"\x0a\x20\x20\x20\x20\"fmt\"\x0a\x20\x20\x20\x20\"math/rand\"\x0a\x20\x20\x20\x20\"time\"\x0a)\x0a\x0a//\x20Hello\x20returns\x20a\x20greeting\x20for\x20the\x20named\x20person.\x0afunc\x20Hello(name\x20string)\x20(string,\x20error)\x20{\x0a\x20\x20\x20\x20//\x20If\x20no\x20name\x20was\x20given,\x20return\x20an\x20error\x20with\x20a\x20message.\x0a\x20\x20\x20\x20if\x20name\x20==\x20\"\"\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20name,\x20errors.New(\"empty\x20name\")\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Create\x20a\x20message\x20using\x20a\x20random\x20format.\x0a\x20\x20\x20\x20message\x20:=\x20fmt.Sprintf(randomFormat(),\x20name)\x0a\x20\x20\x20\x20return\x20message,\x20nil\x0a}\x0a\x0a<ins>//\x20Hellos\x20returns\x20a\x20map\x20that\x20associates\x20each\x20of\x20the\x20named\x20people\x0a//\x20with\x20a\x20greeting\x20message.\x0afunc\x20Hellos(names\x20[]string)\x20(map[string]string,\x20error)\x20{\x0a\x20\x20\x20\x20//\x20A\x20map\x20to\x20associate\x20names\x20with\x20messages.\x0a\x20\x20\x20\x20messages\x20:=\x20make(map[string]string)\x0a\x20\x20\x20\x20//\x20Loop\x20through\x20the\x20received\x20slice\x20of\x20names,\x20calling\x0a\x20\x20\x20\x20//\x20the\x20Hello\x20function\x20to\x20get\x20a\x20message\x20for\x20each\x20name.\x0a\x20\x20\x20\x20for\x20_,\x20name\x20:=\x20range\x20names\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20message,\x20err\x20:=\x20Hello(name)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20err\x20!=\x20nil\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20nil,\x20err\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20In\x20the\x20map,\x20associate\x20the\x20retrieved\x20message\x20with\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20the\x20name.\x0a\x20\x20\x20\x20\x20\x20\x20\x20messages[name]\x20=\x20message\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20messages,\x20nil\x0a}</ins>\x0a\x0a//\x20Init\x20sets\x20initial\x20values\x20for\x20variables\x20used\x20in\x20the\x20function.\x0afunc\x20init()\x20{\x0a\x20\x20\x20\x20rand.Seed(time.Now().UnixNano())\x0a}\x0a\x0a//\x20randomFormat\x20returns\x20one\x20of\x20a\x20set\x20of\x20greeting\x20messages.\x20The\x20returned\x0a//\x20message\x20is\x20selected\x20at\x20random.\x0afunc\x20randomFormat()\x20string\x20{\x0a\x20\x20\x20\x20//\x20A\x20slice\x20of\x20message\x20formats.\x0a\x20\x20\x20\x20formats\x20:=\x20[]string{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Hi,\x20%v.\x20Welcome!\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Great\x20to\x20see\x20you,\x20%v!\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Hail,\x20%v!\x20Well\x20met!\",\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Return\x20one\x20of\x20the\x20message\x20formats\x20selected\x20at\x20random.\x0a\x20\x20\x20\x20return\x20formats[rand.Intn(len(formats))]\x0a}\x0a</pre>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20a\x20<code>Hellos</code>\x20function\x20whose\x20parameter\x20is\x20a\x20slice\x20of\x20names\x0a\x20\x20\x20\x20\x20\x20\x20\x20rather\x20than\x20a\x20single\x20name.\x20Also,\x20you\x20change\x20one\x20of\x20its\x20return\x20types\x20from\x0a\x20\x20\x20\x20\x20\x20\x20\x20a\x20<code>string</code>\x20to\x20a\x20<code>map</code>\x20so\x20you\x20can\x20return\x20names\x0a\x20\x20\x20\x20\x20\x20\x20\x20mapped\x20to\x20greeting\x20messages.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Have\x20the\x20new\x20Hellos\x20function\x20call\x20the\x20existing\x20Hello\x20function.\x20This\x0a\x20\x20\x20\x20\x20\x20\x20\x20leaves\x20both\x20functions\x20in\x20place.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Create\x20a\x20<code>messages</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://blog.golang.org/maps\">map</a>\x20to\x20associate\x20each\x20of\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20received\x20names\x20(as\x20a\x20key)\x20with\x20a\x20generated\x20message\x20(as\x20a\x20value).\x20In\x20Go,\x0a\x20\x20\x20\x20\x20\x20\x20\x20you\x20initialize\x20a\x20map\x20with\x20the\x20following\x20syntax:\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>make(map[<em>key-type</em>]<em>value-type</em>)</code>.\x20You\x20have\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20<code>Hello</code>\x20function\x20return\x20this\x20map\x20to\x20the\x20caller.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Loop\x20through\x20the\x20names\x20your\x20function\x20received,\x20checking\x20that\x20each\x20has\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20non-empty\x20value,\x20then\x20associate\x20a\x20message\x20with\x20each.\x20In\x20this\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>for</code>\x20loop,\x20<code>range</code>\x20returns\x20two\x20values:\x20the\x20index\x0a\x20\x20\x20\x20\x20\x20\x20\x20of\x20the\x20current\x20item\x20in\x20the\x20loop\x20and\x20a\x20copy\x20of\x20the\x20item's\x20value.\x20You\x0a\x20\x20\x20\x20\x20\x20\x20\x20don't\x20need\x20the\x20index,\x20so\x20you\x20use\x20the\x20Go\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/doc/effective_go.html#blank\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>blank\x20identifier\x20(an\x20underscore)</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20to\x20ignore\x20it.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20hello/hello.go\x20calling\x20code,\x20pass\x20a\x20slice\x20of\x20names,\x20then\x20print\x20the\x0a\x20\x20\x20\x20contents\x20of\x20the\x20names/messages\x20map\x20you\x20get\x20back.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20hello.go,\x20change\x20your\x20code\x20so\x20it\x20looks\x20like\x20the\x20following.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"fmt\"\x0a\x20\x20\x20\x20\"log\"\x0a\x0a\x20\x20\x20\x20\"example.com/greetings\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x20\x20\x20\x20//\x20Set\x20properties\x20of\x20the\x20predefined\x20Logger,\x20including\x0a\x20\x20\x20\x20//\x20the\x20log\x20entry\x20prefix\x20and\x20a\x20flag\x20to\x20disable\x20printing\x0a\x20\x20\x20\x20//\x20the\x20time,\x20source\x20file,\x20and\x20line\x20number.\x0a\x20\x20\x20\x20log.SetPrefix(\"greetings:\x20\")\x0a\x20\x20\x20\x20log.SetFlags(0)\x0a\x0a\x20\x20\x20\x20<ins>//\x20A\x20slice\x20of\x20names.\x0a\x20\x20\x20\x20names\x20:=\x20[]string{\"Gladys\",\x20\"Samantha\",\x20\"Darrin\"}</ins>\x0a\x0a\x20\x20\x20\x20//\x20Request\x20greeting\x20messages\x20for\x20the\x20names.\x0a\x20\x20\x20\x20messages,\x20err\x20:=\x20greetings.Hellos(names)\x0a\x20\x20\x20\x20if\x20err\x20!=\x20nil\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Fatal(err)\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20If\x20no\x20error\x20was\x20returned,\x20print\x20the\x20returned\x20map\x20of\x0a\x20\x20\x20\x20//\x20messages\x20to\x20the\x20console.\x0a\x20\x20\x20\x20fmt.Println(messages)\x0a}\x0a</pre>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20With\x20these\x20changes,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Create\x20a\x20<code>names</code>\x20variable\x20as\x20a\x20slice\x20type\x20holding\x20three\x0a\x20\x20\x20\x20\x20\x20\x20\x20names.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Pass\x20the\x20<code>names</code>\x20variable\x20as\x20the\x20argument\x20to\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>Hello</code>\x20function.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line,\x20change\x20to\x20the\x20directory\x20that\x20contains\x20hello/hello.go,\x0a\x20\x20\x20\x20then\x20run\x20hello.go\x20to\x20confirm\x20that\x20the\x20code\x20works.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20The\x20output\x20should\x20be\x20a\x20string\x20representation\x20of\x20the\x20map\x20associating\x20names\x0a\x20\x20\x20\x20\x20\x20with\x20messages,\x20something\x20like\x20the\x20following:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20run\x20hello.go\x0amap[Darrin:Hail,\x20Darrin!\x20Well\x20met!\x20Gladys:Hi,\x20Gladys.\x20Welcome!\x20Samantha:Hail,\x20Samantha!\x20Well\x20met!]\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20This\x20topic\x20introduced\x20maps\x20for\x20representing\x20name/value\x20pairs.\x20It\x20also\x0a\x20\x20introduced\x20the\x20idea\x20of\x0a\x20\x20<a\x20href=\"https://blog.golang.org/module-compatibility\"\x0a\x20\x20\x20\x20>preserving\x20backward\x20compatibility</a\x0a\x20\x20>\x0a\x20\x20by\x20implementing\x20a\x20new\x20function\x20for\x20new\x20or\x20changed\x20functionality\x20in\x20a\x20module.\x0a\x20\x20In\x20the\x20tutorial's\x20<a\x20href=\"add-a-test.html\">next\x20topic</a>,\x20you'll\x20use\x0a\x20\x20built-in\x20features\x20to\x20create\x20a\x20unit\x20test\x20for\x20your\x20code.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"random-greeting.html\"\x0a\x20\x20\x20\x20>&lt;\x20Return\x20a\x20random\x20greeting</a\x0a\x20\x20>\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"add-a-test.html\">Add\x20a\x20test\x20&gt;</a>\x0a</p>\x0a",
+
+	"doc/tutorial/handle-errors.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Return\x20and\x20handle\x20an\x20error\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/handle-errors\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20Handling\x20errors\x20is\x20an\x20essential\x20feature\x20of\x20solid\x20code.\x20In\x20this\x20section,\x20you'll\x0a\x20\x20add\x20a\x20bit\x20of\x20code\x20to\x20return\x20an\x20error\x20from\x20the\x20greetings\x20module,\x20then\x20handle\x20it\x0a\x20\x20in\x20the\x20caller.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20greetings/greetings.go,\x20add\x20the\x20code\x20highlighted\x20below.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20There's\x20no\x20sense\x20sending\x20a\x20greeting\x20back\x20if\x20you\x20don't\x20know\x20who\x20to\x20greet.\x0a\x20\x20\x20\x20\x20\x20Return\x20an\x20error\x20to\x20the\x20caller\x20if\x20the\x20name\x20is\x20empty.\x20Copy\x20the\x20following\x0a\x20\x20\x20\x20\x20\x20code\x20into\x20greetings.go\x20and\x20save\x20the\x20file.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20greetings\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20<ins>\"errors\"</ins>\x0a\x20\x20\x20\x20\"fmt\"\x0a)\x0a\x0a//\x20Hello\x20returns\x20a\x20greeting\x20for\x20the\x20named\x20person.\x0afunc\x20Hello(name\x20string)\x20(string,\x20error)\x20{\x0a\x20\x20\x20\x20<ins>//\x20If\x20no\x20name\x20was\x20given,\x20return\x20an\x20error\x20with\x20a\x20message.\x0a\x20\x20\x20\x20if\x20name\x20==\x20\"\"\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20\"\",\x20errors.New(\"empty\x20name\")\x0a\x20\x20\x20\x20}</ins>\x0a\x0a\x20\x20\x20\x20//\x20If\x20a\x20name\x20was\x20received,\x20return\x20a\x20value\x20that\x20embeds\x20the\x20name\x20\x0a\x20\x20\x20\x20//\x20in\x20a\x20greeting\x20message.\x0a\x20\x20\x20\x20message\x20:=\x20fmt.Sprintf(\"Hi,\x20%v.\x20Welcome!\",\x20name)\x0a\x20\x20\x20\x20return\x20message,\x20nil\x0a}\x0a</pre>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Change\x20the\x20function\x20so\x20that\x20it\x20returns\x20two\x20values:\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>string</code>\x20and\x20an\x20<code>error</code>.\x20Your\x20caller\x20will\x20check\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20second\x20value\x20to\x20see\x20if\x20an\x20error\x20occurred.\x20(Any\x20Go\x20function\x20can\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/doc/effective_go.html#multiple-returns\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>return\x20multiple\x20values</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>.)\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Import\x20the\x20Go\x20standard\x20library\x20<code>errors</code>\x20package\x20so\x20you\x20can\x0a\x20\x20\x20\x20\x20\x20\x20\x20use\x20its\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/errors/#example_New\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>errors.New</code>\x20function</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20an\x20<code>if</code>\x20statement\x20to\x20check\x20for\x20an\x20invalid\x20request\x20(an\x0a\x20\x20\x20\x20\x20\x20\x20\x20empty\x20string\x20where\x20the\x20name\x20should\x20be)\x20and\x20return\x20an\x20error\x20if\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20request\x20is\x20invalid.\x20The\x20<code>errors.New</code>\x20function\x20returns\x20an\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>error</code>\x20with\x20your\x20message\x20inside.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20<code>nil</code>\x20(meaning\x20no\x20error)\x20as\x20a\x20second\x20value\x20in\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20successful\x20return.\x20That\x20way,\x20the\x20caller\x20can\x20see\x20that\x20the\x20function\x0a\x20\x20\x20\x20\x20\x20\x20\x20succeeded.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20your\x20hello/hello.go\x20file,\x20handle\x20the\x20error\x20now\x20returned\x20by\x20the\x0a\x20\x20\x20\x20<code>Hello</code>\x20function,\x20along\x20with\x20the\x20non-error\x20value.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Paste\x20the\x20following\x20code\x20into\x20hello.go.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"fmt\"\x0a\x20\x20\x20\x20<ins>\"log\"</ins>\x0a\x0a\x20\x20\x20\x20\"example.com/greetings\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x20\x20\x20\x20<ins>//\x20Set\x20properties\x20of\x20the\x20predefined\x20Logger,\x20including\x0a\x20\x20\x20\x20//\x20the\x20log\x20entry\x20prefix\x20and\x20a\x20flag\x20to\x20disable\x20printing\x0a\x20\x20\x20\x20//\x20the\x20time,\x20source\x20file,\x20and\x20line\x20number.\x0a\x20\x20\x20\x20log.SetPrefix(\"greetings:\x20\")\x0a\x20\x20\x20\x20log.SetFlags(0)</ins>\x0a\x0a\x20\x20\x20\x20//\x20Request\x20a\x20greeting\x20message.\x0a\x20\x20\x20\x20message,\x20err\x20:=\x20greetings.Hello(\"\")\x0a\x20\x20\x20\x20<ins>//\x20If\x20an\x20error\x20was\x20returned,\x20print\x20it\x20to\x20the\x20console\x20and\x0a\x20\x20\x20\x20//\x20exit\x20the\x20program.\x0a\x20\x20\x20\x20if\x20err\x20!=\x20nil\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20log.Fatal(err)\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20If\x20no\x20error\x20was\x20returned,\x20print\x20the\x20returned\x20message\x0a\x20\x20\x20\x20//\x20to\x20the\x20console.</ins>\x0a\x20\x20\x20\x20fmt.Println(message)\x0a}\x0a</pre>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Configure\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/log/\"><code>log</code>\x20package</a>\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20print\x20the\x20command\x20name\x20(\"greetings:\x20\")\x20at\x20the\x20start\x20of\x20its\x20log\x20messages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20without\x20a\x20time\x20stamp\x20or\x20source\x20file\x20information.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Assign\x20both\x20of\x20the\x20<code>Hello</code>\x20return\x20values,\x20including\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>error</code>,\x20to\x20variables.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Change\x20the\x20<code>Hello</code>\x20argument\x20from\x20Gladys\xe2\x80\x99s\x20name\x20to\x20an\x20empty\x0a\x20\x20\x20\x20\x20\x20\x20\x20string,\x20so\x20you\x20can\x20try\x20out\x20your\x20error-handling\x20code.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Look\x20for\x20a\x20non-nil\x20<code>error</code>\x20value.\x20There's\x20no\x20sense\x20continuing\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20this\x20case.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20the\x20functions\x20in\x20the\x20standard\x20library's\x20<code>log\x20package</code>\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20output\x20error\x20information.\x20If\x20you\x20get\x20an\x20error,\x20you\x20use\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>log</code>\x20package's\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://pkg.go.dev/log?tab=doc#Fatal\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>Fatal</code>\x20function</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20to\x20print\x20the\x20error\x20and\x20stop\x20the\x20program.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20</ul>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line\x20in\x20the\x20<code>hello</code>\x20directory,\x20run\x20hello.go\x20to\x0a\x20\x20\x20\x20confirm\x20that\x20the\x20code\x20works.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Now\x20that\x20you're\x20passing\x20in\x20an\x20empty\x20name,\x20you'll\x20get\x20an\x20error.\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20run\x20hello.go\x0agreetings:\x20empty\x20name\x0aexit\x20status\x201\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20That's\x20essentially\x20how\x20error\x20handling\x20in\x20Go\x20works:\x20Return\x20an\x20error\x20as\x20a\x20value\x0a\x20\x20so\x20the\x20caller\x20can\x20check\x20for\x20it.\x20It's\x20pretty\x20simple.\x20In\x20the\x20tutorial's\x0a\x20\x20<a\x20href=\"random-greeting.html\">next\x20topic</a>,\x20you'll\x20use\x20a\x20Go\x20slice\x20to\x20return\x0a\x20\x20a\x20randomly-selected\x20greeting.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"call-module-code.html\"\x0a\x20\x20\x20\x20>&lt;\x20Call\x20your\x20code\x20from\x20another\x20module</a\x0a\x20\x20>\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"random-greeting.html\"\x0a\x20\x20\x20\x20>Return\x20a\x20random\x20greeting\x20&gt;</a\x0a\x20\x20>\x0a</p>\x0a",
+
+	"doc/tutorial/images/function-syntax.png": "\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x02M\x00\x00\x00\xa4\x08\x02\x00\x00\x00\x05L\x8dl\x00\x00,EIDATx\xda\xec\xdaI(\xb5m\x18\x07\xf0\xcby\xbfw\xee\x9dzg\"\x94\x8c\x19\x12%\x89\x95!%\x16vX\xd8\x92\x94\xb2\xc0J\xd8X\x08e\x08%\x1b\x1b\x0bE\x89H\xc8\x94\x99\xccS\xc8\xcc\xc2<{\xbe\x7fGtrz}\xce\x17\xc7y\x1f\xff\xdf\xe2$O'\x9e{\xba\xae\xfb\xbe/3EQ\x84\x88\x88H\xa54BDD\xa4^\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\x8csDD\xa4f\xff\xc8\xffrzzZXX8000??\xff\xf5\xebWggg\x17\x17\x17\x7f\x7f\xff_\xbf~\xc9\xf3\xd0\xd1\xd11<<\xac\xd1h\xa2\xa2\xa2\xde\xbd{'\xa0\xa3\xa2\xa2\xe2\xf0\xf0\x10-\x13\x19\x19)\x0f\xa1\xbb\xbb\x1b\xad-:^\xbcx\x11\x1d\x1d\xfd\xe6\xcd\x1b\xf9\xb3\x8b\x8b\x8b\x92\x92\x12\x01\x1dnnn>>>b\\\x83\x83\x83\xb9\xb9\xb9eee\x1a\x0dS+u:88HKK[YYIJJ\xf2\xf6\xf6\x16\x93QZZ\x8a\xc9\x98\x90\x90\x20\xf4Wu\xdcCR\x0c\xb7\xbf\xbf\x8f\xc0&z\xb0\xa4*\xcfFbb\xa2h\xb5\xb4\xb4(z\xae\xe2\xbd\xb9\xb9\xb9\xf2@\x92\x93\x93EOOO\x8fr'Lo\xd1\x13\x1a\x1a\xaa\x18Wkk\xeb\xa7O\x9fD\xa4\xbc\xbc\\!\xa3@\x02:11\xb1\xb9\xb9\xa9\x18KAA\x81hyzz*&\x03-p\x95\x0bb)WL\xde\xee\xee\xee\x84\xd6\xf5/\x9eo\xc7=,\x8d\x18\x0eY\xf9\xe8\xe8\xe8M\xd3`\x1b\xf7\xe3\xc7\x0f\xe4\xe9X@\x85\x1e\xc7\xcb\x97/\xdf^\x13C\xbc\xd5!O\xa1\xb6\xb66((hgg\xc7\xc3\xc3#<<\\\xe8\xf1\xad\xad\xad\xd9\xda\xda:88\xe4\xe5\xe5\xc9\xf3\xf6\xed\xdb\xb7\xf8\xf8x\x11\xc9\xc8\xc8\x88\x8b\x8b\xc3\x92'&\x0c\xe9\xac\x83\xd6\xe5\xe5\xa5\xd0\xd3\x9e[\xd6\xd4\xd4\x88Vsss@@\x80h\xed\xed\xed}\xf8\xf0A\xe8qdh\x89VVVVjj\xea=\x83\x9c\xee\x96\xee\xd5\xabWgggbD\xe3\xe3\xe38\xb9=>>\xb6\xb7\xb7\xaf\xaf\xaf\xc7\xaeN\xe8\xf1\x9d\x9f\x9f\x1b\x7fA\x8f\x89\x89\x99\x9a\x9a\x9a\x9d\x9dMII\x11S\x92\x9d\x9d\x8d4\x0b\xa7M\xd8\xb8\x20\xfc\xe3tNL\x95\xfe\xf4|\xce\x1d\xf7\xc4q\x0e'\xb9\xf8\xb4\xb1\xb1\xb9\x09r\xc0\x20G\xfa\xab-\xa6\x10\x82\xdc\xc7\x8f\x1f\x1b\x1a\x1a\xbe\x7f\xff.\xa4^\xef\xdf\xbf\xcf\xc9\xc9\x11\x93TTT477\xd7\xd4\xd4\x84\x041$$\xc4\xc9\xc9I\xe8o\xe8\xb8\xa7\xac\xb7\\__\xc7'\xce*\xc5\x88\x16\x17\x17q\x13\xb6\xba\xba*\x86XZZ\xc2\xa6\x13\xf7X\xf8:\x8a2\xc4\xf4\x20\x8d\xc2{moo\x8b\xa9B\xb8B\xc5M__\x1f\xb6\xecb\x88\xcc\xcc\xcc\xde\xde^\x11IOO\xb7\xb2\xb2z\xec\xeeF\xfa\xd5\xd6\xd6\x86\xbf\x88K\x8e{\xe6\xce(&\xc2\xa7n\xd9N{{\xfb\xd5\xf0\xbe\x1b\xae\xa8\xf1\xdd\x91\x91\x11#\x0c\xaa\x93\x93\x13\xac\xd1\xb8\xe3\xc40\xc6\xab\x89\xb1`\x0f\xd4\xd5\xd5\xd5\xdf\xdf\x8f\x01`j\xb3\x1b\xf3\x1a\xff\xdb\xad\x01\xb9\xb5\xb5\x85NA^%zp\xab\x82P\x87\x8b:4&r\xaf\xab7Re\xc7\xe1\xc0szz\x1a\x8b\xde\xc6\xc6\x86\x11^\xb0\xb3\xb3shh\x08?\xc8=\x1c\x1d\x1da8MNN\xde\x9a\x86\xb8\x8f\\^^6\x89:\x14__\xdf\xdf\xd7\xcc\xcc\xccD\xeb\xb7\x0e\xdc\xbe(z\xae\x1e\xc5\xc6\xc6*z\xaa\xab\xab\xf1\x08\x90\xe9\xdfz\x94\x9f\x9f\x8f\xdf[XX\xcc\xcc\xcc`(\xe3x\xdd\xda\xdaZ\xae\xa1\x04\x06-\xab\xdc\xa9\xb1\xb1\xd1\xcf\xcf\xef\xd6)\xd9\xe7\xcf\x9fq\x86\xb6\xb0\xb0`\x0au(X\x94#\"\"\xbe|\xf9\"\xd7p\xa2\x82\x8bO\xe5\x1e\x10?t\xeaP\x0c\x80K>\x83\xeaP\xd05^^^\xaf_\xbf\x16-\xf4\xbb\x9d\x9d\x1d\x82\x16\x16w\xe5\xbf`\xd1\xc11\xa9\x88\xb8\xba\xbabYQt<`w\xa3\xee\xb7\xaa\xaa*00\x109\xa9\xe8pww\xc7\x0cT@\x07b\xd8o-tYqq\xf1\xcf\x9f?\xaf\xc60\x86\"\x9eVVVZZZ\x8a\x16JC\x95?@\xf1\x9e\xa3\xa3\xe3M\xd5(Jm\xc3\xc2\xc2\xb0@+\x8f\xa0\xae\xae.88\x18\xcd.:0\xb4p\x8e266\xa6\xe8Y_\xff\x97\xbd{\x0b\xb5\xad\xbc\xee\x00>N+4mm\x0a\xa7\xd0\xd2\"X\xd0J_N\x1eD\xd0Z\x11\xbcA+\x8aT\xc5kA\xc5\xcbQ\xa8\x88\xa2U\x09\xde\"A\x09*>(\x01!\x9e\x88\x17\xbc\xa0\xc6\x07\xc5D\x10I\x0c\x09B\x12B|\xc8\xe5\xc5\x80\x04\x12\x88\x0a\x81$/\xc9\xcc\x8f3\xc8\xc7t}k\xcd\xbd\xf7a\xceu\xd9\xe7\xfbs8\xac\xbd\xf6Z{^\xc6\xf7\x8d\xeb\x7f\x8c\xf9\xcb\xbc\xc0\xf4A\xebMz\xe9\xa5\x97\x0e\x1c+?\xf3\xf6\xdbo\xd3G\xa4@|\xc5\xdf?\xfd\xf4\xd3U+\xba\x0a\xe7\x9cs\xce?W\xc0\xc4\x9eH\xdc\x16\xd2C\x0f=d\xd7\x14\xca1\xb5s\xf1\xc5\x17\xe3\x0f\xef\xdd\xbb7\xdfD\xc0\xe9\x16\xe0\xbe\xfb\xee\x8b\x83x\xea\xa9\xa7\xba\x825\x10\x9c\xb2\\\xde:\x85\x86\xf2a?\x16\xf0\xde\xba\x058\xf3\xcc3}\x2075\xd9\xf5\x19\x82v\xebUW]e\x8f\x8c\"8b\xf2\x195\xce\xbc@\xd7R\xc8\xdeG\x1cq\x04\x9a\x0f\x8b\xd5-\x80\xab>\xed\xb4\xd3\xec\x9aR4u\x02\xe0\x0c}\xd7;W^ye7%\xa2\xdb\x1e\x8e;\xee\xb8-KA]\x858\x08\x0a\xbd\xab@\xad\xc4A\xbc\xf0\xc2\x0b3\xbfz\xe0\x81\x07\xe2\x20\x0e\x1c8@\xa7D\x05\x16\xeb\x93O>\xe9\xe6\x81\x13z\xed\xb5\xd7F\x85\"\x0f\x91\xd3\xca\xed\x1c3\xbc(\x1a\xbe\xe2\x8a+\xac\xcb\x95\xdb9\x96\xec\xae\xbb\xeeZ\xd4\x03p\xc6\x19gP\xa9\xdd\x20\x0a\x03\xe2\xc9'\x9f\xec*\x8c\"n\x1a-m\xd5\\8\xf9w\xdey\xa7\xeb\x81\x93\xeb\xfd\xdcT\xfdK;\xea\xa8\xa3\xfc\x8aZ\xef\xaf\x13vz\xe6p\xe8\xd7B\x81\x98\x07\xa7\xc1m\xefF\xc5c\x8f=6pi\x1f\x7f\xfcqWa\xcbx\x88\xd7\xd2-\xc0\xab\xaf\xbeZ\xe4\xc5\xaaE\x85\xe7\x9f\x7f\xbe\xab0\xb7A\xe5\xfe\xfb\xef\x9fB\xdc\"\x15\x9a1\x061l\xe7\xc8\x94i\x8c\x08:\xba\xab\xb0B\xc1\xed\xdf\xbf?\x06\xf1\xfa\xeb\xafw\x0b\xa0M(M\x1a\xc2WY\xc3\x05\xeep\x07c\x08.\xfd]\x9c\xb2{\xee\xb9g\xaef\xb8\xf7\xde{\xbbyx\xf7\xddw\xeb\x13\xab\xf5^7%\xb6[\x9f\xbb\xf5\xd6[?\xfa\xe8\xa3r=\x92\x03\xc7\x1csL\xdf\xa2\xa4Y\x1e\x17\x9c\x91\x14\xd5\xe5\x97_N\xb7~\xf8\xe1\x877\xdex#.\x99m\xf0\xf8\xe3\x8f\xcf\xad\x9a\xeafK\x9a\x0cI\xdcp\xc3\x0d\x164\x0b-\xcb\xa1\xf9\x0c\x14\x8a\xd2\xef[!(\xa3\xf3\xce;\x8f\xd2L\x93s\xfd\xf5\xd7\xf3m\x85\x1a.\x87{\xcb\xd3\x14\x8b\xa4\x11]!$y,\xfa\x8c\xe1n\xba\xe9&\x8b[p\xac\x87\x8f\x89\xa5,\xd49.\xbb\xec2\xd6:\x16\x83\x16K)\xb8\xc6\x89\xc4-\xfcrz4\x97\x8a\x8b[z\xfc\xf1\xc7[\x84\xa4|\xf7\xddw\xcb\x83Q\x8b7\xdf|\xb3t\xeb\x8c[\x9d\xed\x0d\\\x90'\x9ex\xe2\xce;\xef\x94{t\x20\xce\xa6(\x81\xcb\xf5\xf0\xc3\x0f\xdb\x96\xe2\x06\x9ae\xc6\xaa\xf1X\xb5E\xa6\"v\x08\x19\x0e\xc9\xa8G\x1ey\x84o\xcb\xea_r\xc9%\x8a\xf9B\x9f\x18\x03\xce\xc1\xc9g,\xe5\xb6\xe8j:\xe1\x84\x138\x1f\xce\xf6\xfd\xf7\xdf\x97&r\x0es\xb9\x85\x8f>\xfa\xa8\xbd\xc9\xdbKs\xc2b\x09v\xfb\xb1]l\x05rg*\xbc8\xfa\xe8\xa3}W\x86\x96\x13\xe0\x1e\x9e\x7f\xfe\xf9Q\x81P\x0a\xf5Z\xeaI\xac6\xdd\xee&/\xaa\xdc\x0b\xd55\xc6\xd86\x91\xba\xf4G\xf2l}7u\xf7@\x19X?\xab4\x0f\xef\x87o\xea[\x18\x06Qa%\x82\x13\x09\xe4\xc9HN\x08\xdd\x92k\xd6\xb7%\x18\x98[\xd6\x92,W.2\x8br\xea\xa9\xa7\xbaE\xef\xbd\xf7\x9e?%\xfc\x0a\x18Op\xd8d`\xa3\x91\xda\xb9\xe7\x9ek\x91\x90\x8bDTDX{\xb7\xddv\xdbL3\xb1\xd5H';1K\x88\x81\xd4\xc5\xe8nX\x9c6N.H;.\xb3Yk\x91\xb7\xec\x83\xca\xcb-\xd4U\x187\x9e\x83\x8b.\xba\x08c\xb0\xfc\xea\x8d7\xde\xc8\xf71\xd4\xbb\x0a/\xbd\xf4R\x1c\x04-\xa6T\xb3\x9c\xfe9\xf8\xbb\x0a\x84\xba(\x9e\xbb\xfa\xea\xab\xcbR\xebz\xb0\x132\x0f@\xe1\x0a:W\x18\xcfQ\xdf\x19n2!\xc4\xd4\xf5\x20\xb7^*m\xf4{\xb7\x00%\x05\x7f\xf2\xc9'w\x15\xc6\x127\x88\xa2\xec\xd2:}g\x89\x96\xc2O\x1d\xcf\xb9.*\xd2;\xccy9\xf4\x9bo\xbeY\x96P\xed\xdb*\xa3\xd2\x20\x19\xbaq\x9b\xfaAF1\x87\x8c_7\x12\xae\xb9\xe6\x9a8\x88\xcc\xea\xef\x14\xce0\x0eBP\xdem\x0f\xe2\xb9\x01\xd7>\xa3\x90ap)\xcaw\xa7\x107[\x98\x9ca\xfeDy\x13\x8b\xb2\xdaMC(\x84\x0b\xa7\xd1\xf5\xb0&\x82+\xca\xa1.\x0d\x0c\xc7s\x89c\x8f=\xb6\x1f\xce\xf2Q\x18\x98\xb1\x04'\x9e+\x017\x1f\xb7\xeb\x819/\xe3\x20f\xbeE\x0f\x17\xb7\xa6\xbfk$Q\xb2]\x8a\xc7\xdfuk\xd9?\xb74\xf0\x0edKJ\xce:\xa3\xe6\xf4\x17\x94\xd9j\xba\x04\x9f._K\x1d\x9cr\xca)\xb1,\xfc\xa6\xc2\"V\xf7\x07\x1f|\x90\x81\x8e\xf11Y-(\xf0\xce\xed\xb7\xdf\xee\x05\x9d\xf2\xdcs\xcf\xc5\xea\xe0\xeee\x11\xfb\x82\x0b.\x10\xa6D\x0f\x82\xe3\x07\x1f|\xb0\xa8\xf5X\x00\x9a(_(\xceM$\xee\x04\xf7\x9c3\x11\xd0\x03#]\xf4\x05\xfb\x14\x15\xe4!N<\xf1\xc4\xac\x06\x15\x85\xebX\xfdw\x84\xad3\x9c\x1a*#Kw\xb9EK\xcd\x92\xea\xcc\x8a\x91(dD\x0eH\x15\x81-\x0f\xbc{\xc1\xebL.q\xb5\xbb\x1bR\x1dS\xebrt\xfdH(S\x91E\x9f\x0e\xa3\xc8w\x86\x0d\xb1\x0b\x04\xe7\xd2D\x93\xfdb\xa7\x98\x92!\x89Q!\xf9\xc4GL\x9f\xa3\xa0\xc4\xfa\xb5\xe0\x8a\x11\xbd\xf0\xc2\x0b\xfb\xbb\xc6\x8fIB\x91%\x8a\x80\xf5\xe3[.\x0d\xee\x85;2\x93\xe0V\xfa*\xeb\xa9\x0femI\x8f\xd4}V\x7f,\x0bT\xe4\xcd\x15r\xbb\xd6@\\\xcc\x0ePy\xb6:\xd3+\xffVm\xc2\x15\x203'p\xcb-\xb7\xcc\xbd\xde\x0c\xe9d\x08k\xde\xda\xccrgr&\x12\xf70J\x9eg.\x8f\xab\xd0\xca\xe5\xb1K\x19c\xa6=f\x86B\xe6b\xd3\xfd\xc4:\x09\xe8A&<\xad\xa6(\x1cb\x0cHv\x95\xbaEV\xfebYpD\xdc\x90X\xb3\xdd\x0d\xe9L\xd8>3\xa9\xc8\x1d\x0d@\xb0\x20K\xa0\x1f\xd0\xc3F\x0bN\xb0\xf5\xf2\xcb/g\xb9zR\xf0\\\xf5\xc2\x06\xf4\x90\xbef\x11\\-\xb5Zp\xc5Y,\xb7h\xed\xfa\xe7V\x8b#\x8f<2\xe6\x01\xa5'_\xa8\xb5\xc4\x12!\x03.!\x1e\xd0\x83t\xdf\xdc\x99[(\xbf%>\xc0\xd4\xa8y\xb7\xbdxhe\xe01d\xc1\xd5\xa6\x8d\x0a\xdcgj\x9d\x9a`\xe4\x84\xa7R%si\xe2E\xad\x8c+\xee\xe1\xc2'\xff@\xd2R(\xa6\xdeY\xef\xae\x1a\xb5\xab\xc1\x92\x15\x97\xb3\x16\x1c\xf7\x93*\x99\x1b\xd0\x17\xc1\x8d2;\xd4\xe4RA\x95\x92\x15\x1e\xb6yC\x94\x82l3`\xf1\xe5\x19N\x87\xac\xe7\xad\x04\xc3\xe2\x16C\x20\xbbbc*tI~\x94l\xb3\xec\x9c\x17\x88\x97\xdb\xb7s\x8bB\xc6\xcd\x15\x1c\xd73\xcdO\x85\xd5K-_<\xfb\xec\xb3hD\xc5\xb6\xa9D\x16jt\x04\x1c\xc6\xf1\\\x8dT@\xc3vNZ#\xd6\x15L\xc8@\xb6\x93\xe5\xe8u\xe2\xaf\x0cN2\x13\x14\x99\x11\xaa\xa1\xf8\\>9\x9c\xbd\x11\xd7\x8e.\xee:DFW\x13\x07p*\xb98\x12\xad\xc2\x11~F\x8c\x07\xb6\x932]$5\x08\x18Up\xb2^\xaa\xfd\xaa\x9b^\x03\xbd\xa9\x11B(\xe9\xce+\xe6\xafs\xb7\xe5t\xe2\xc6z\xc8\xf2\x84\\\xc8[o\xbd\xc5\x9bQS\x146\xa5w\x82C\x1b\x83\x98Y\x90uC[\x13\xdc\x14R\xa3F\xb8\x20\xc9\xd7\x95\x1f\xe2\x01+%(iK~fe\xe4\xcf\xc4\xc0\x16\xcf\xedpd\xce:O\xc4\xb7\x20\x0a\x7fU\x148\xe4u\xae\x08Y%\x1e\xbe\x8d\xec\xdfp\xb4dqWU\xae\xf1Q\x8f@\x93\xbdA\x03vt\x91\xb1Z\xc5\xe8R#\x17!E,\xc6\x88Ua\xc9UQ)f\xa0|\xd4k\xaf\xbdFAd\xcc\xaa\x7f\x91/\x8cS\xe3d\xe2p\x02k\xe1\xdaU\x855_\x0b:g\xaa\xa7\xdb\x8c\xe7X\x9a\x99%Z\xd0\x047\x11\xf4\xa7\x0am\xe5~T\xb2\xa1\xbc\xaf\x94\xf8g\"X\xb3s\xdb\x86\x12K\x99\xa9\x18\xeb\x8a\x92[\xa0\x8e\xf9\xa7\xb1~\xa0\xd3\x9d\x1b\xce1W\x14\xe9knHg\xc9\x16~\xd7p\xc07\xe9P\x06A\x1b#\x97\xe9G\x13\x00\x94EM\x15g\x9esk\x8dh\xe7(\xa6l\xears\x96,5\x0a\x02\xa4\xb8\xf9\xbfzN\x90\x98\x14\x0e\xa5.\xb0\xd7t>\xc4a\x06\xa3)Q\xd8K\xca\x91\xdc\xf7\xed\xdbg|e&\xc7\x861\xb3\x20%\xfa\x9a\xe0\x96\x03\xb7\x1a\xad\x09\x13\xb5\xdf\x00\xa3\xcc\x8f\xd1V\xca\xe1\xb1\x0b\xf2\x96\x98\xa31=\x0a\xb9@N#\xd6\x15\x85\x1f\xc1\xdd\x8bu\x05\xeb\x95\xf11\xf2ET`\xfc\x92\"\xc5\x04j\xfa\x19\xb6s\xdc\xd8\x98\x0c\xcf<\xf3L\xbe\xe0&c\xa8j\x82f\xe4&\x15\x9c\x04\xe6\xaa(B'\x9dt\x92q\x15(Brt\xb9~d\xf0\xe2p\x02#\xa1`\xcc\xc8\x91\x05\x89\x1b\x16E\xb1(\x831r;\x9d\xcd[\x96h\x13\xdc\x12\xa0\xb9\xe5\xba\xeb\xae\xa3.\x14\x14\xa8\x14:\xc1\xc3\x92\x90\x93\xfbFn\xb3\xed\x9c+\xa9\x95]\xe6\xbb\x8c\xa8)\x01\xc4X\xa1R\xd2\xe7ha5\xcfXK`+qB\xb3k\x90\xa3\x17k\x89\xd2\x0c\xa0\x973*\xc8\xc6\x88\xe72\x80^TZW[N\x16\\N$\x89i@\xd0YqQ\xb0\x99a\x85d\x93\xd6\x88\x10)\xe6\x8b\xd5\xb6\xf0\xe3_d\xca\x8e\x8a\xa7\xf1\xb7Uj\xdd-\xa0%\xa5j8a\xa8(\xea:\xf6{v4\xee\x08E\xed\xf4\xe9BMp\xd3\x01\xe9\xd4\x83V(|\xed\xe4\x18:4\xc3\xdcgqov\xdeR\xc4*\x03\x86\x1fE\xb4\xc5\x81\"i\xbd\xf42\xd7\xe3\xf2J\xd5fTk\x92\x12-\x85eX\x86\x02X\xac\x19\x94\xa9)J3\xfa\\\xb5\x0c\x86\xd1-\xf6m\xac\x19\xcc,\xd0%\xa6P\xff\xe2\x8b/\x9a\x88(S\xd7'R\x9a!R\xdc\xb4X\x00m\xdaZjx\x1bh\xfd<Y\x91\xd6D,/\xe5\x16\xbcV\x11\xfcYg\x9d\x95o\x9a\xda\x83\xdb\xa6\x83\xbe\xd8\xbc\x18\x03\x12\xa4O?\xfd\xb4{\x82\xe0g\x99\xb9\x09\xe9\x9f-\x19.'\x03JG\xaf\x1b\x07k2\xb7ne*f\x9d+\xd6\xdb\x84;\xaf\xb2\x95\x01\x99B\x97\xe4\x8d\xbc\x82L\x20\x98\xb8\xe1\x1a\xd5\xdb\xb0?\x94|\xb6|\x1ab\xb6\x03\x96\xd6\xa3X'\xc1!e\x94!\x0czUc\xf3A\xcf\x97\xecK\x8e\x83!//\x12:\xfc\\\xa6\x91#\xa2\xbd\x0d\xb6s\x9a:\xd99:\xdd\xacU\x0f\x7f\xe2\xe3##\xa9\xe4{3&\x80A_\x94\x117_\\\xec\xde\xe1z\x9c}\xf6\xd9<)\x01\xa5F}@\xfb\xc6\xd1Z\xed\xb6G\xbbB=R\xfd\x92x\x11%pv\x0c'\xc3?\xe6\xabr\x08LE\xa1\xa9\xb7\x19\x8f\xfa;\x929\xb9y\xc44\x19\xcen\x09G\xc9\xf9U\x20\xf1\xa8\xdd\xb0\x1e\x1fe\xb0\xac\x94:U\xc2\\Q+\x08\xc1T\xa7\x8a\x97\xf7s\xd6\x06\xd3\xa5$6<\xd5\xc9UdRq\";\x97Y,/\x0c\x0aw8\xf1%\x83G\x91\x91~@\xe9\x9f\x1b\xc9Aq\x1f\xf8(i\xf3\xcc\xc5\xe7Q\x11\x1f\xfdKd)8\xdc?\xeb-\xc6\x80\x85j1\xbb\xc3l\xb6\xb5A\x10\x12t\xd8\x0d\x04\xc7\xd3\xcf\xe6\xb3\x81\xbe1\xea\x83\xd7\xac\x9d\x94\x1f\x80\xe9Nj\xf4\x8b\xf5&\x16\xb7T0\x00c\xd3`m\xb3mV;\xb7\x06\xebd\xd1\xb3\x88m\xae>/\xa9\xeeY\xce\x05\x83\x94\x9b\xb3\x87*\xacXpJ\xe3\xf9\x82+,Q\xc1\xc5TP\x94\x141\xa6\x87\xfeT\x8c\x8cM\x83\xb4myX),*9\x19\x85#\x10\xda\xd4\xb9_2\x0c\xf6\xd5\xdc\xd6}C2\xf3\xb5\xa0a\xd1d\x20\x16k\xd1\x9c\x1b\xf3\xd0\xbay\x10p\xc8\xd7\x0fk\xf9\x95\xcfq\xb6\xdf\xd4\x18\x86\xab\xe5[\xcc\xfd\xaa\xc0\x08ms\xeeW\x1f\x86\x9dw\xf3\x80\xaf83\xdd\xb1\x9f#\xe2:\xd8\xcf\xdd\x20\xb8\xd8\xae1un\xf5\x8c\x88q\xc4\xcd3\xa02\xe6\xda$\x138\xcb3$\xeb\xb9_\xd8\x01\xf9N\xf1\xb7\xe8\xc7|\x87m(>S=,\xdf\xc0\x9a\x01\xc73G\xb9\x8f\x02l\x8b~\xf7\xf4L\x9f\x1f\x8b\xce~w\x83X\x14m\x1b\xff8<\xf7\x8bw\xd2\xed\x10\xf5\xf8\xa8)\xc4\xad\x85\x91B\xdc\x92EU\x9eSQ\x83\xca\xca\xfb\xa9J4\xf3\xab5\x11\x1c~\xf2\xa2\xd13\x0aZ\xc3s\x9c\xbb\x01\x8c7\xf7\xcb,\x8b\x81\xc5\xc3\x9cw\x15\xe4?b+p\x0b6x\xee\x97J\x0fR\x1c\xbb\xd8\x0f\xccM]\xb2\xc4\x0b\xf3p\xa7\x11\xeb\xf0\xd8h\xe9J\xb3\xd7L\xbd\xe3L\xd5lx\x0b}9\xc1\xdc\xf0I\x9a8l\xa7\xe9&\xa9#0n\xa6\xe0i\xf8yN>3p\xacQ\xce\xd0!\x90\xc4\xdc\xc62\x157\xa7^\xb1+Fj\x11\x9f}\xb5\xa5\xc61l\xd7=\x97\xa66\x09z\x8a;\xc9\x8e\x8a\xde\xfa\xa9*\xa7G\xc4L\xbe\xff]B\xe6\xbb\xea\xfb6\xe0\xcb3\xe7\xce|\xee\x11]\x0b\x86\x98\xf9R4\x8b\xcf\xd4\xe4\x1dZ,F\x82m\"\xce\xe6\xd1g1\xbb0\x17\xf8O\xb4\x06U\xce\x85\x8aA\xdcq\xc7\x1d\"\xb9\xbaJ\xc4?\xb3\xed\xa7^\xf6S\xfc\x05\xa7\x9d\xba\x82\xc4\xd1\xd3\xe5\xc1\x84\xa7\xd2\xc8\x12\x06f\x01[\x0c\xf9\x19\xd1OT\xc8\x8a\xb8\xe2\\\x926\xeb\xde\xe45\x11\x9c\xf1.\x924>3\x13\x9d+\x1f\xe4\xcc\x9d\x8d\x13\x1c\x89\xd8,i\xf59\x9dF\xa8\x13\x84z\x0dO\x94z\xd1\xf9Z\xcaxn\xd7\x844\xf2\xa9\x17=\xe8\xb1\x15E\x190*\x8c\x13z/\xad\xb0aP$\x87\x9d\x1bh\xa1\xf0\xf19\x83\x96Q\xac\x13\xdc|\xb1\x8e\x94\x97\x00\x8eE1k\x83&r\xb6\xb1N\x90\xa8\x94{Q`\xa0\xdf\xa9\xf2\x1dm\x06u,\xb6!\x1f_\x90\x9d\xbc\xa3C\xba\x9fC*\xbe\xa4\xe9$\x12K\xdc95\x85\xd8\xd2\x12P:\x1c\xa9\xa9COQg\x95\xf5\xb2q$Ep_\xe9>\xfa\xddQv4V\x03cH\xaeOG\x04\xb7O\x8e\x9a\x17\x18\x9b\x09:\xc4\xc9\xbb\x10}rTd)@\x16\xbc\xf2\xca+\xc8)i\xe0\x85\x8c\xf5}@<\x11\xacSAVK\x86&\x05\xeb&8\xb9Y_\xd7O\xad\x02mi\xa9`q\xe0b3\xa1.#\xb5@\xe7\x8bt\x15\x17\xe6\xc6B\x14\xa0\x0f\xb8j\x0e\xe8\x1a\xe5-\x1b\x1a\xb6\x09\x81)\xdb\x93\x8e\x9e\x9e\xb6\xae\xa1\xe1\x90\x20\xbb\x10\x07\xa12\xda\xcd\x83\x90\xae<\x10\xaa~\xa6q\xd6\xbdX\x0bF\xaekX\"\xa4\xa0s\x98\xdc\"\xfd\x90\xb1\x87\xe2\xdc\x06\xe7-\x1b\x0es\x08w\xa4\x91\x11\xe1$pp\x91p/\xa3\xa1a\xe7\xc0-Z4)8\xd9\x89hSIW1Lr&\x10\xa4d\xc5F\xaa'\xd8\xa7J\x06\xd1\xb0,d\xc51\xa5\x20\xc6\xad\xc7\xf9b\xbd\xe6\x84\x1a\xcf\xb3\xdc\xe0\xfe\xb9\x86\x06uu4H\x8f\\\xb1\xd0\xa3\xa1\xe1\x90P\xc8e\xe6h\xe0Q+\xf0\x88\xd2$\xab%\x09\x186\xa04U\x80\xf4\xc3\xc8\xff\xcfT\x8c\x14~L\xb4Q\xb73\x95-\x1a\x96\x08\xd9H\x95\xf2\x8c\xc2I\xd0\x03\xbf\xe4r\xb1\xdf=\x03\x16{Y\x90\x8df\x99\xb4\xfc\xecV\xda\xec\xfa\\C\x03\x1a\x0b\x06\x87\xb5\x1e\x0d\x0d\x87\x04\xdc\x93|P\xd4\"\x02\x1a\x1a\xad\x07\xb4\xce}H\x08\x13H\xabF\xc3\xd2\xa1&\xaaoj\xd1\x14!r\xe1\xb8ht\x11\x887;\xd7\xd0\xd0\xd0\x10\xc2\x02\x11\x9b\xf4#BJ\xbe\x83\x04\x84\xb9mv\xa2\x968D\x8fhX?H5#\xa1h\x9b\xe6p\xa8_$\xe1\x197\x87\xfd\xc3}-\x04\xaef\xe7\x1a\x1a\x1a\x1a\xa2_uCQF\xd6\xc7\xe0\x8f\x86\x0d\x81\x04\xb2\xa4\xa5d&\xf6{\x9fu\xdf\xec\\CCCCCC\xe3\xa14444444;\xd7\xd0\xd0\xd0\xd0p\x18\xa2\xd9\xb9\x86\x86\x86\x86\x86\xdd\x8cf\xe7\x1a\x1a\x1a\x1a\x1av3\x9a\x9dkhhhh\xd8\xcdhv\xae\xa1\xa1\xa1\xa1a7\xa3\xd9\xb9\x86\x86\x86\x86\x86\xdd\x8c#\xa2\xe1\x90\xf0\xc2\xd7\xe3\x0bOD\xd7\x19]\x13\x7f\xb1\xa7\xfco\xa4[\xbe\xa8\xde\xff\xd4\x8f\xf5\xe7\xcb\xfbC?\xc2_z\xbd\xe0c{\xeaoys\xbb\x7f\xbc\xfa\xfc\xdc\xbf\xf6\xe9\x1f?\xf7o\xf1\x99\xbf\x8a\x86\x86\x86\x86uF\xb3s\x87\x88\xef\xfe(~\xfa\xf38\xccq\xd2\xbe\xf8\xd6\x81hhhhXg\xb4y(\x87\x08\xb7\xed\x07?\x89\xdf\xfd>\xfe\xd8\x99g\xe3G\xff\xfb\xe7\xc7\xde\xff\xde\x8f\xea\xfd\xc1\x1f\xbb\xc5\x1f\xeb>\xfd\xe3/\x7f\x1d\xdf\xfea\xfc\xc7\xe7b\xefg#\xbf\xf8\x87?ny,\x1f\x1b8\x87r\x88\xfe\xe7\x87N\xf5\x7f\xcf\x8e\xbb\xf7G\xc3D\xf8\xed\xef\xe3\xaa{\xe2\x17\xbf\x8a\x12j\xef\xc9\x17%\x13P\xbd(\xbf\xad_\xec\x09\xffW/\xb6\xf7w\xf2\xb8\xe0\x81\xde\xf9\xdb_}\x14\xdf\xf8N\xfc\xf7\x7f\xc6\xbf\xfc\xe3T\xc7\x0d/\x0e\xe9z\xff\xe9\x1f\xe2o>\x13+\xc1W\xbe\x16\x07\xbe\xd6\xcb\x8e\xf87\x8a\x08vx+\xa2:\x1cy\xbd\xf5\xdd\xf8\xaf\x93\xc9k\xaa\xe3\xee9T\xd1\xff\xed_\x13Y\xb3s\x0d\xf3\xf0\xf9\xc7\xe2K_\x8d\xff\xbf2\xbe\xf8\x7f\xd1\xb0+\xf1\xe3\x0fb\xdf\x85\xd1\xb0S\xec\xfd\xfb\xf8\xd9k\xf1\xd9#c\xf98c\x7f|\xf3{\xd1\xb0S|\xf9\xf3q\xcd\xff\xb4\xbceC\x85|\x9a[{\xa6\xdb.\xc6\xbf\xffk|\xffO\xec\xddM(}y\x1c\xc7\xf1\xaf\xa7\xf9#\x0cB\x18\x0f\xcd\xf8\xd7\x18\x0f\x0dR\x1e\x9a\xb2\xb3`\xc1B)\xd9H\x16VJ\xca\x94\xac\xcd\x82\xc5da\xa7\xb00\xa5\xa6\x94\x0d\x1b\xa5&\x842\xeab\x14#F\x9e\x8d\xa7<\x9b3\xdf\xb9w:\xe9\xde\x7f\xf7_\xfc\xf3w\x7f\xf7\xfdJ\xfa9\xf7\\\xe7\xde\xf3\xfb\xde\xf39\xdfs\x92_\xe4\xcf\xbf\xec\xab\x02n\x03\xbb\xdbv\x1fX\xce\xb1\xfb\xc0s\xb5\x8f\xac\xefm\xbbs\x0eY\xde\x90\xef\xbe\x96\xef\xbf\x15]\xa2\x1e\xff\xf9T\xdb}\xe9\xfb\xfd\xe6+y\xf7\x85|\x16\xbf\xf6\xc8o\x8br\xff\xf0\xc1\xb7\xf6\x8c)\xf3\xd8\x03\xcf\x9d\xfay\x878\x9c\xf3\x95\xa7\xf3e\xb9O\x99\xf7\xedZ/.9\xef\xeb\x87\xbd\x93\xa48\xee\xcf\x01\xfe*\xf7\xbd\xe8\xd7\x1b\xf4\xe3\xcf\xa29W\xf1\x83\xfc\xd4\"\xb0}\x19!\x15o\xf2\x9f\xb9\xea|9\xfcx\xbe\xf8\xbb\x02\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89\x00\x80\xc9\xc89_\x95\xf3\xfe\xff\xef\xc0S\x94\x1f\x98/7\x01\x96e\x09|\xd3\xdf\xe7\x12\x13%\x80\x1b\xca\x0f\xcc\x179\x07\x00\xf0\x17\\\xb7\x04\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98\x8c\x9c\x03\x00\x98,X\xf0\x02\x1b\x1b\x1b\xed\xed\xed\xe2U\x7f\x7f\x7fdd\xa4\xbc\xba\x87\x87\x87\xc3\xc3\xc3\xa4\xa4$q\x1a\x18\x18\x18\x1b\x1b+))imm\x15\xf8\x88\xa9\xa9\xa9\xde\xde^\xb7\x85!!!\x11\x11\x11:\xb3\xb5\xb5\xb5YYYb\x9c\xad\xad\xad\xb4\xb44\xf1'333===\xa2<\xe6:&&&99\xb9\xa2\xa2\"??\x9f\xfd\xf9L\x16^`rrR>F\xc3\xc6zuz|\xcc\xce\xce\xee\xe8\xe8\xb0\x97466\x8aHMM\x8d\x05\xdf188(^\x95\x97\x97___[\xa6\xb8\xbc\xbclkk\x0b\x0e\x0e\xbe\xbf\xbf\xb7\xfc\xc9\xc8\xc8\x88x\xa5\xfb\xa4\xaf\xaf\x8f\xfd\xf9<\xf4s\x9fFCCCBB\x82|Hxx\xb8\xbc\xba\xce\xceN\x87\xc3Q]]m/\x89\x8a\x8a\xd2W\x18\x17\x17'\xf0A---\xa1\xa1\xa1\xe2\xf4\xf8\xf8xzz:::\xaa\xa7P\x13\x13\x13MMMCCCb\x84\xb9\xb9\xb9\xee\xeen\xf1c]]]\xd1\xd1\xd1\xf6\x8f\xe7\xe7\xe7kkk\xc3\xc3\xc3WWW\xcd\xcd\xcd\xda\xc7\xd7\xd7\xd7\xb3?\xe9\xe7^\x95\xdd\xcf-..ZoIYY\x99\x88\xfc\xd7\xcf\xc1\x97\xd9\xfd\xdc\xf1\xf1\xb1\xdbC\xbb\xbb\xbbEEE\xe2tttd\x19\xc1\xfe@\xf9[\xffa\xf7s;;;\x96\x07\xbd?\x12\x1b\x1b+\"UUU\xecO\xfa\xb97\xea\xee\xeenss3(((##C\x9c\xec\xc3\xd3\xc9\xc9\x89V\xb0\xb6Y\xae;jZ\xd0aaa\xa9\xa9\xa9:\xfe\xddI/\xac\x17\x14\x14\xe8:\xe2\xe1\xf6\xf6vvvVO\xf7\xd2\xd3\xd3\x0b\x0b\x0b\xf5:\xbe\x88\xdc\xdc\xdc\xe8\xe5x=\xfb\xd3\xb1\x1e\x0a\xf5Q\xd7\xef\xdf\xdf\xdf?;;\xd3;\x85\xae;v\xb6\xf5\xf5\xf5\xe5\xe5\xe5\x83\x83\x83\xcc\xcc\xcc\xdc\xdc\\m\xfb\xe4\x09\xd7\xb3RRR\xb4+\xd5u\xa6\xa7\xa7/..\xf4>\x81\xae\xacoG\xf0\xf9$&&j\x93WWW\xe7\xba\xbbSYYi\x9f\xb9j\x01\xac\xae\xaej\xc9i\x0b\x98\x93\x93\x93\x97\x97\xf7t\xb2\xf6\xf6\xf6\xb4K\xd0\xe6>00p||\\\xcbC\xcf\x8a\xf4\xd2\x968\xe9\x95\xae?\x9ct\xa0\xa5R\\\\\x1c\x1f\x1f/Nv\x89j1hI\xe8x~~~eeEkO\xb7\x12\x10\x10\xe0\xea5\x17\x16\x16\x96\x96\x96\xb4nKKK\xb5\xff\x90'\\\x07\\\xad7]A\xeb\\_\x98~\"\xf4\x89\xf6!~{{[\x9c\xb4n\xffe\xef\\Bmj\xc38\xfe\x8e\x18(\x06\x06\x06&\xc8%%'\xc5\xc8%\xf7K\xa1\x1c\x91\x93kR$\xa4DRnQ\xae\xe1\x13B\xc4@B\x91\xd49\x94K\xca\xad(\x14e@!'\xc5\xc4H\x9f\x91\xf5\xfd\xfa\xfe}O\xeb\xec\xf7k\xedm\x9ds\xf6\xb1\x96\xe778\xed\xfd\xee\xb5\xf6\xdeg\xadg?\xf7\xf7}\xf9J\x83\x06\x0d\xe2\xd5\xec\x13\xed\xd5\xf7\xef\xdf\xeb'\xa6\x1f\xce\xc4\x89\x13\xf9\x92\xa1\x14\xf4\xef\xdf\x9f\x1b}\xec\xd8\xb1{\xf7\xeeq\x85\xf97s_O\x8e\xaf\xaa\x8b2\xaegQ\x15B\xe2t~<G\x0aQ\x87\xb5\xb6\xb6&)6l\xd8\xa0\x12\x8b\x9e\"\x7f<E5P]\x93a\xb3Z\xf4\xe1\xc3\x87+\xd2\xee\xe4$\x91\xectZ\x92:6/=z\xf4(\xb4e\xe3\xc6\x8dq}\x0e\xde\xbd{7s\xe6\xcc\x90\xa2[\xb7n\xa4M\xd0_v\xcc\xb2e\xcb\x94K\x91>5F\x8d\x1a\x85\xbeK\x9c\xae\x8b\xe7\xe0\xf5\xeb\xd7z\xf5\xec\xd9\xb3\x1aiiiA\x97\x85\xb6\xa0\xfe\xd2\xf2\xa9[\x89\x8d\xc4R\xea\x00,\x19\xee\x11j\x8e\xcc\x98i+\x93\xbdm\xdb\xb6I$LD{\xf5\xeau\xf3\xe6\xcd\xb4K\x84\xa7\x85S\x85\xb9\x95\x96\x14hC\xfc\xb0$Ess\xb3>\xd4\xc0\x8e\"\x87zu\xca\x94)\xa1-\xdf\xbf\x7f\xafz\xa2@\x8f3H\xc6/\xdd\x17F\xca.)\x08\xd9\xf1\x1c\xcc\x9f?\x9fW\xf9\xc9c\xe7\xdas=\xab\xea\xa2\xec\xebYP\x85\xe0v\xae\xaev\x0e\xf7*\x96\xad\xc9\x93'\xa7\x95\x88\xa4\x19u3i\xd2\xa4i\xd3\xa6\xf5\xe8\xd1C\x83\xb7n\xdd\xd2a\xb8Z3f\xcc`\x04\x7f\x9c\x07K\x97.5\xe5r\xfa\xf4i\xfc\xeb9s\xe6\xf4\xee\xdd\x9b\xa7C\x86\x0c\xe1\xf1\x95+Wb;Gi\x87&.F\xf8\xa0\xe9\xd3\xa7S\xe3\xc1%\xe7)\x20\xc1\x15v\xcetYcc#\x8e\x9b\xfd\xa2\x12\xa7K\xed\xdc\x89\x13'\xf4*n5O\x89\xae\xe4\xcb\x13\xb5\xa3\xb0\x9a\x9a\x9aL0h\xcb\xfc\xf9\xf3g\xda\xce\xa5!\x16d|\xf6\xec\xd9z\xca-^\xb2d\x09\xf7\x17\x01\xd3\xc8\xa5K\x97LD\xcd%Br\x88\xd8\x06\x0c\x18\xa0\x11\xfa\x9e\xf8\\\"H:\x03G\x8f\x1e\xads\xc9\x10\xd8\xe7\xd2x\xac#\x09\xf5V\xacX\xb1`\xc1\x02\x15\xa28\x8b\xb7\xe5\x80\x1d;v\x8c\x193\x86\x11%\xe8\xe8&E\xd4k9\xd1\xf42\xe8\x0aXu*)\x08\xd9v\xee\xce\x9d;\xd2\x03\xf4K'\"\xef\xf5\xac\xaa\x8b\xb2\xafgA\x15\x82\xdb\xb9\x8e\xb1s\x98\x8a\x05\x11k\xd6\xac\xc9g\xe7\xf0\x94\xcdp\x92\x80RB\x121\xd5\xc8\xe6\xcd\x9b\xa5hn\xdf\xbe\xad\x11\xf2\xa2\xe46\x19$\xe1\x89Z\x89\xebs\xb1\x9d\xe3\x81bG\xfe\x05\x8d\xe0'\xd2\x9a\xc5\x20\x90\xce\xaa\xb0s\xfc\x90\xf8\x14\x0d\xae^\xbdZ\x83\xd8\xd4\xc4\xe9\x0a;G^\xfa\xcc\x993\x9a\xaf\xd2\xb7o_\x9e2\xa8\x0e\x05\xa4\x85\x83\xe3{\xfa\xe2\xc5\x8b\x0a;\xc7\x03RO\xa4\xa4H|\xa1\xd7\xa4\xd1\xb6o\xdfn\x9f\xf2\xf9\xf3g\xd4\xab\xb4d\xec\x8a\x91\x9fd\x04y#4dD\x1fm\"\xb1o\xdf>\x0d\xf2&<\xfd\xf6\xed\x9b\x8c.)\x04\xb2\x11VvR\xf6l\xde\xbcy\xff[O\xaa\xfdD\xd3\xcb\xe4\xd3\xee\xde\xbd\xcbY\xc4:Iq\x90\x9d\xd3\xf5\xff\xeb?\xc8\xd0\xac_\xbf\x9e\x7f\xdc\x1c\x8e\xfb\xf7\xef'\x90\xffzV\xd7E\x19\xd7\xb3\xb8\x0a\xc1\xed\\'\xce+\xc0\xcf\xcag\xe7v\xed\xda\x95\xa4X\xb8pa\xda\x95\xa3\x1c\xc2\xd3U\xabV%)\x90E<k\xc2;\xd2GU\xed\x1cI*\xfcn\xb5e&)HO\xc9;\x9b5k\x96\xd99\xa5/\xc8\xc2\xdbao\xdf\xbe\x0df\x0e\x9d\xba\xd89r\x80\xfd\xffC\x0a\xce\xb8z\xf5\xaa\x0e\xde\xb4i\x13\x91\x99r\x98qn\x93\xd2\x8e\xd99\xe9\xaf\xf4=}\xf0\xe0\x01f\x12\xf9\xb1Ta\xda\x1f\x1a7n\x9c\x89\xa8\xa9\xe3\xf8W\x20\xb9\xb5\xac\xb8\x06\x1f?~\xcc\xd3#G\x8e\xc8:VL\xb39t\xe8\x90\x0eCnc\xbd\\\xeb\x89\xa6\x97%\xd2\x05\x04;W\xb5\x1c{\xe3\xc6\x8dD\xe4\xb8\x9ey\xed\x9c]\xcfB+\x04\xefC\xe9\x18\xc8\xf3X\xb9\xdeP\x1c\x96\x03\x92\xdd!E\xbf~\xfd\xd4\xcc\xa2F\x00i.\xcd\x190\xa8\x12\xd3QR{\xb71\xa6N\x1e\xbd\x0d*\x87I\xd4\xb8s\xe7N\x82\xc8\x90\x02\xe3G\xe4\x97\xb6\xdf\xf8\xfe\x8a#\x83S\x17\xa8\xa6\x84\x08<\x1e\xbc~\x92\x87zj!\x14a\xdc\xc7\x8f\x1fQU\x04jD\x006\x18R\x0c\x1c80}O\xc7\xfc\x8b\x1e3i\x01\xcd\xc5\xe9\xc8\x09\x05\xb6\xf8\\P\x96[\x0c\x1f>\\\x0f\xd2\x13\x99\xc9\x8a\x9b\x86\xe5\xaf$\x8a\xaa3I\x88\x8a\xb6\x14k\x94\xb0R\x93\xf1\xcb'\xea;\x14\x99\x09\x13&t\xef\xde\x9d\x0b\x8e\xa12\x1f\x05w\x87\xfa\x1c\xe3y/K~\xecz\x16Z!\xb8\x9d\xeb\x18Xd\xa4\xa1\xa1!t\x10d\xa2\xe2\x19x\x82F8L\x94R\x94\xedW\x9ad\xd8\x03D6\x95\x04\x88\xda\xba\xe2\xef\xa3\x94\xa9f\x9e\x06\xa7^Py5\xb7\x89X\x1c\xcd\xc2\x9d\xb2N\x10\xe3\xfa\xf5\xebx\xfa\x18'\x09I\x06\xd8\xb9\x20R}\x98$\xca(\xc5I<\xb2\x91\x9c\x08\x93\x13U\x85\x85\x1a8\x0d\x0c\xa7\x8aOr\xadb\x88\xff\x88\x1a\x83\xc8}\xa2\xfe\xaf\"s\xe1\xc2\x05\\\x04\x0b\xc1qg\x89\x9c\xc8^R\xfd\xa2\xc3(\xd7e\xc9O|=\x0b\xaa\x10\xdc\xce\xd5\x15\\\x9e\x8a\xf6\xa7\x10#\x1d\x11c^\xb9=\xc8\x8b\x0c\xa7\xa2\xc3x\xae\x824\x17\xa4\xbe\x8f\xcbI\x173w\xee\\\xb5\xe0f\x80\x95\xb2j\x1c\xba\x12O\x9c\x80\x8f9v4\x86\x84\x08\xebo\xb2\x09$\xc4s\xa4\x04\xd4c\x89\xd3F\x946~\xfcx\x1a8\xb1|!\"\x9e0\xa0\x9e\x85l\xc9G?\xd2\xb9\x10\x20\x02%\xde\xde\x13\xed\xff*\x0b$i\xc8U\xd2\x8fF+,]B\xb4\xb3\xd2\xe9\x9a\xe3\xb2\xe4\xd3E\xf1\xf5,\xaeB(\xd8\xd7-(VF\xae\x88\xeb\xa5V~\x09\xea\xcc\xb6f\x1d\xcdl\xe9)z\xf4\xa7\x90;\xa5\xa0RU\xc4u\x80\xe26\x0bCmD\x8d\xe6\xc1)\x144#\x20\x00\xaa\xa5\xd1\x89gr\xf2\xfc\xf9\xf3Z\x1c#\xa2@\xa4\x11\xc7\xfc\xe4\xc9\x934j\xaa|\x0b\xd4\x8d\xec\xdc\xdcH\xe4\x88N\xa82\x1e=z4nvG\x99\xe6;\xb1LV\x0dbp5(\xbb\xee\xdd\xbb\x97D\xe5\xf2\xe5\xcb\xa9\xc5\xe6\xbe,\xd5uQy\xf1\xfd\x0a\xea\x81ya*\xce\x9b8\xbez\xf5*\xfc\"H\xb02\x96\x17/^\x0c)X\x19\x889v[\xb6l\xe1m\xe5Y[\xb2>\x86\x8e\x15\xe5\xfaO\x9d:\x15R\xb0R\"+H\xa9\xe7%8\x85\xe2\xe9\xd3\xa7\x8a\xce)\xaf\xca\xc8\x89\xa8>\xf7\xff0\xedR\xf7\x9d\x15\xec\xcc\xc8\x911\xa3\xa9\xb2C\xec\x9c\xd6\x9bf\xe6\x03\xed\x9d\x15\xab\x9c\x13\x1a\xf2\x03\xa1\x11\xc6\xe4\xd6D\xb7\xd6\x13K\x0d7T\x15\xd0k\xd7\xaea\xe7r_\xcf\xea\xba\xa8\xbc\xb8\x9d\xab\x074\xc8I\xbcp\xcd\xe8\xd0\xe5\x01\x89\x08z\x7f\xa9\x88\x84_\x87y\xdf\xfc\xbd|\xf926\xc9\x8av\xfb\xf7\xef\x97\x97\xc7\xa4`5b\xc9\x97G\x82\xe3\xe4$FN\xbb\x16\xd0\x9b~\xee\xdc9\x93u\x9a\xa9\xa8~\xe3\xf1\xad\\\xb928\x85\xc2\x9a0Y\xf7\xd2\x06\xd1\x8c\xcc\xf3\xb5\xfb\x9b}\xba\x8c%\x02`\x01\"=\xeb\xcc\x0a\xd0\xb9\xed_\x00\x96\xb6\x08\xec%\xcd\xc3\xd6\xcb\x87\x8eF\x0e\xd5\xbfG7\x8d\xe4\xd6\xec.\x01G\xad'\x96\x1a\x82l~\xa7\xaa#\xac]\xbb\x96.\xa1\xfc\xd73[\x17\x95\x17\xb7s\xf5\x80\x82\x07r\xc9\x03\x96\xe7a\xbd%\xba\x95H\x0c\xb2\xa2D\xbe\x86L\x16\xad\xa0!\x13\x11\xa7\xc9s\xe8\xd0\xa1\xcc\x9c\xe3\x0d\xe9\xac\xe3\xf7\xa06tk\x13`z)\xce\x9df\x14\xa4\xd1\x94\x03\xce\xc2\xcb#\x192x\xf0`*\x01\xb460\xa3\x1c#w\xfe\xfcy\xda\x8b\x83S(\x98\xa6\x8d\x8b\xa3\x0c$w\x9f\xf5\x01\xb8\xa1T\xf5\x90=\x04\xc3:\x17bl.\x9d\x02z\xce\xe5\xee\x8f\x1d;\x96\xa6\x12\xd6\xe5A'*I\xae\xc2mn\x98\xea\xc7\x06C\xd4u\xe8k':!pD\xfc\xf8\xc2,\"\xc5\xd7c.\x04z\\\x8dQ\x0aAX\xcb\x03o\x8c,z\xd5\x13\x7f\xeb\xe5\xa6:\x08~\xefX8\xcd\x16\xc0>\xb5\xe7zf\xe9\xa2\xf2\xe2v\xaeN\x1c8p\x808\x0c\xf7\x8a\xe8\x8a\xf0\x0b\xf3C\xcb\x00nZ\x859\xb4\x07\xd9;t\x90\x94\xe0t\xdaI\xc8\xda3\xffWk;\x91\xaf\xa7)\xcb\xa671b-\xc8\xf1G\x90\xff$%\xb5n\xdd:\xde\x04\x0d\xc8<\x1b|vf\xdd\x91\x0e]\xbcxq\x9b\xe3\x9d\xae\x83{]c\xe5\x1f\xbdF\xf4&\x07\x85I\x054^\xa2\x13\x99N\x87\x1ed\xc5\x1c\xb5b\xc6\xeflP\xd6\xa5\xd2C\x1c\x80\xd7\xcf\\\xcc\x87\x0f\x1f\xd2\xf6B\xad\x8e\xd6v\xc5v\x0c\xc6\"j\x1f\x8d2\xadxOF\x18\xd7\xa0}\x04\x8d\xa0\xa8l\xbc+Z*\xf8\x15(SJg\xbc\xf9U}\xfa\xf4!\xfdn\xb95\x8e\xc9>\xb14\x0eY\xd5\x1b\xbd{\xf7n\x8c\x96r0\xa4+s_\xcfZtQL\xd1\x15\x02\x93\x1e\x92\xe0\xd4\x0b\x04\x8b\xc0\x0b\xc7\x8a\x04\xa3\x15\x84s\xc3R\x14T\x8f\xb5\xacj<WFm\xc7\xfc\x06h\xbd\xc3\xc5\xcbx\x13\xbc<*1\x84\x86\x14f\x82SpH@q\xdf\xb9\xe3\xac\xfa\xa6\xfb^;\x04m\x08\x03V\x8d\x1a\xb0$\xaa3`\xf5\x16\xd4\xab\xda\x05\xe3\xdd\xacl)j\xf4/1e\xd6\x89N\xce\xeb\x19\xeb\xa2\x92\x07<n\xe7\x1c\xc7q\x9c2Sr3\xee8\x8e\xe3\xfc\xe1\xb8\x9ds\x1c\xc7q\xca\x8c\xdb9\xc7q\x1c\xa7\xcc\xb8\x9ds\x1c\xc7q\xca\x8c\xdb9\xc7q\x1c\xa7\xcc\xb8\x9ds\x1c\xc7q\xca\x8c\xdb9\xc7q\x1c\xa7\xcc\xb8\x9ds\x9c?\x1d&\x11\x07\xa7\x200\xbf\x9b\x95n\x82\xe3v\xceq\x9cllqg\x96\x80b\x7f\x03\xb4gp~{X\xf0\x8f\xf5\xfc\x8e\x1f?\x1e\x1c\xb7s\x8e\xe3\xd4\xc2\xb3g\xcf\x0e\x1e<\xe8F\xae(l\xdd\xba\x95\x05K\x83\xe3v\xceq\x1c\xc7q|?\xf1.\xe0\xcb\x97/Zs\x99-\x02\xbe~\xfd\xfa\xe4\xc9\x13VO\x1e1b\x04[che\xf7x\xe9U\xb6\x1a\xf8\xf0\xe1\x03\xcb+\x0f\x1b6\x8c|\x85\x1d\x86\x03\xcez\xbb\xbc\x0f\xef\xc6c\xd6/\x7f\xf3\xe6\xcd\xc8\x91#9\x8cu\xe2\xb51&\xdb\x11\xb0\xf5\x06\x9b\xb3\xb0\x13\x15K\xb8\x86\x14\xdaw\x91U\\9\x80e\xcbyg2W\x9c\x18\x9c?\x09\x96{\xfe\xf4\xe9\x93\x1e\xb3\x87\x19+\xe5#i?~\xfc@ZX\xfb;\x88\xd4~\xd3\x08\x15K\xe6#\x84\xc8\x1eG\"Z\x080K\xe6S.b_'\x16\x11\xd6\x91.i\x9d\x01\xf7\x05\x85\xc0\x92\xcd\xda\x9d\x87\xfb\xc5\x86\x12\x7f\xffK\xc7\xde/\xd4\xd4\xcb\x97/[[[Y\x07\xbc\xa1\xa1\x81\x0d\x80B\x09H\x9cz\xc1.\xa6!\x84={\xf6\xb0\xd7W\xc5\xe6R\x08b\x92\xa2\xa5\xa5\x85E\xc4C[\xd0\x11\xc8\x9f\x0e\xc0\xf8ik`6\x8e\xea\xd9\xb3\xa7\x1d\x83X#\xc4l\xd2\xa1m3\x05\xb6\x10\xe1NR477W\xacF\xcf\x86>\xec/\x9c8\x7f\x12\xecI\x16\xda\xc2\x8e\x86\xfcEi\xa2\"\x93\x14\xc8'\xc6I\xf5!dO[\xf5\xb2\x85}z?\x04t\"\xbb\xf9p\xb0KZg\xc0F\xa9\xf1~\xcbl\x1e\xd9\x81\xf7\x8b\x1d\\\x17-Z\x14Rp\x16\xdb\xfa\xb0\xa5IRp\xdc\xce\xd5\x0f\xd993H\x8d\x8d\x8dDr\xf6\xe3\xb7\xc3\x08\xce$\xa3xRS\xa7Nmj\xfa\xa7\xbd\xf3y\xa9j\x8b\xe2\xf8~\xbcf\x8d\x8b\xd7\xa0GE\x04\x0dj\"\x14QDP\xd0\x0f\x82\x1aD\xf5\x86A\x11\x8a\xa0\xce\x14A\x14\x11TP\xe4\x0d\x1d\xa9\xe8H\x04\xd1\x89\x8a\x03\x9d8p\x208t\xe8\xc4\x89:\xf1\x1f8\xef\x83_Z\x1c\xba>{O\xee\xbd\xdcs\xee\xf7\x03]\xeeYyo\xd0^\xee\xb5\xf6\xfa\xb1\xd7_\x18\xad\x18\x96/\x9d\x93\xee\x02\x8a\x8b\xbf\xc6\x89\xed\xd6\xad[1o\x93\x0f\xe2\xbe\xbdy\xf3\xe6\xf1\xe3\xc7\x9a\xb8q\xef\xde\xbdPV&\xeb#\x01\xfc\xbb\xaf_\xbf~\xfe\xfc\x99\xa9c\xfa\xe7\xf8\xda\xcc4\x0d\xfd\xfd\xfdO\x9e<I\xa7\xbc{\xf7\xee\xd3\xa7O\x8c0\xd4#3\xcc\xb2\x1c\x03\x03\x03\x08o\xde\xbc\x89\x16\x85\xee\xa1Z\x1c\xd1P\xa1\xae\xae.\x0e\x07\x9av\xc69\x80\x9f\xb7\xa6U\x1d\x026\xcc\xce\xd5`\x1dNZ\xbcg*2\x83p\xab\xb5^\x9c\x0b\xf9Z\x0d\x0e|\xfd\xfau[[\x1b\xfe7\x8f\x1ab\x9e\x15\x1c\xdb\xb9\xa0~v\x0eUc\x9a\xa5\x84\xe8\x93\x84\xe8\xb1$r\xa9\x18\xef{||,\x09\xce\x1a\x83\x10\x11\x02SU\xf3v\x0e\xc5%>\x89\x04\x85\xee\xe8\xe8@\xa2\xcf\xc6\xb7\x8d\x8c\x8cHxpp\xc0#\x93\xf2e5\xdf\xbe}\xcb\x98\xb1\xf0\xfe\x88&!d|~f\x9a\x09\xe6\xebFtQ\x92\xdb\xb7o\xf3\xc8h\xd6L\xe4\x84\xd8\xc5\xd0=\x99\xab\xed\xedm$\xc0\xd0;\xed\x92\x8c\xea\xe5\xd1\x9aV#\xf8\xefM)\xf5\xf6\xf6fP\xd5\xf5b\x8e\xab\xc6\xa8\xe6M\xe6\xe0\xe0\xa0\xe6\xe8\xee\xee\xeefE\xc6v\xae~\xc8\xce\xe1\xd2\x12%\x0f!\xb3\xbc\x11\xc2\xea\xea\xaa$\xcc\xc5g\x0c4\x93\xef\xb3\x1c\x1a\xeb\x0cx\xdc\xd2\xdd\x98\x1b^\xb9g\xa1\x9d!$F$\xe1\xd6\xd6\x16\x8f\x13\x13\x13\xb2\x8e\x87\x87\x87Y\x8e\xf1\xf1q\xe4\x0a\xfdg\xa6i\xa8\xb4s\xecw\xda\x13I\x05E\xc4Ln>V*t/v\xdb`~~^?\x86z[\xd3\xea`\xe7\xaa\xbb^\xecK\x8a\x85f9\xd0\x0a\x9d\x20\xbf\x7f\xff\x9e\x15\x19\xd7\xa1\xd4\x1bb\x95\xaa\x0a\x89\x90\x0e\xaa\xc6Jp\xc2\x93$N`\x1c\xe3\xf6\xf7\xf7I8\x93\xc6\xdf\xd8\xd8\x08a\xcaA\xe1I\xbc\xbf\x7f\xff\xbe\xdeP\xdb\x12\xc2HP\xa3\xb2\xbcR\xd8\xc2+\x19l\xbc6\xc9\xe3o\xa3\x1e\x81\x84J2\xcd\x0a)\xba\xbe\xbe>\xf6\xbe\xa5\xa5%\"\x99Hfffx}\xfa\xf4)q\xb0\x94\x83\x88z\xca\x81s\xa6|?\xbe?\x01skZ*\xcezq\xfe#9\xa7\x81\xf2\xa4\xf1R\x0e\xd6\x88\xc0\x12\x8b\x95\x8a\x8c\xed\\\xbd\x892\xa7H\xb0Q\xe7\xa6_\xfe`qq\x11w\x98\xe2\x11\x8a\xac\xd2\xb9\xdc\xb8q#\xdeG5\xa6\\0\xc1\x97\xa7\x1c\x1c\x1fUh\xa7Z\x98J8\xff\xf1\x1b\x92L\xb3r\xfd\xfa\xf5\x17/^\xac\xad\xad\xcd\xce\xce\xb2o\xb2\xf1\x91\x07BN4\xe2\x1c\xdd\xd3\xd1\x0d\xc5cO\xa4\xb4\x12;gMK\xc5Y/\xac\x9d\x84\x7f\x9fr\xe6b\xa5\"c;W_dx\xceell\x8cl\\\x9c\xc68\x9c\xd10\xf0\xf0\xe1C\xeaJR\x05q4\xccsN\xdd6\x0a-[K\x15L:\x0b\xea<\x93in\xbe|\xf9\xc2\xbe\xb9\xb2\xb2rtt\xb4\xb9\xb9I\xa6\xed\xf2\xe5\xcb\x1f>|\xf8\xa5\x9a\xe1\x96\xa9\x0c\xd8\x9a&\x8a\xb2^a\xe7\xa8\x15\xbar\xe5J\xaa\x80/LE\xc6v\xae\xb1\x20c\xdf\xdd\xdd\xad\xb0\x03\xe5jJ\xda\xc3\xce\xceN.nyq\xd8\\\xc8\xf0\xd1i\x80\xd7Vy\x05T\xd1\xb5\xd9T\x85\xf7\xef\xdf\x93\xad!\x90E(l}}\x1d\x09\x9bf\xa5GEP\xfd\xee\xdd\xbb\xf1H\x1e\x0e\x15\xe2MKK\x8b5\xed\x07\xc5X/\xb9&\xaagy\xf5\xeaU\xca\xc1\x01\x91@\xd1\xa5K\xc5\xb6\x14\xbe\x0f\xa5\xb1\xa0\x20J\x970Q\x19,#'*\xf2s\x17\x84\xce\x04^i]\x20(\x9fr`S\xf9\xc5@\xddi\xb8I\xa6i\x08\x1f?\x1f9\xa7)E\xb9\x1c\"`4hj\xfbK\x15\x10(\xfbI\x85T\x10q\xe7\xce\x1dkZM\xd7K\x8bU\xc5\xf5\"\x09G&\x95G\xca\xdfR\x0e\x9a\x0dh\xb3\xe3\xfbi;I\x85&3\xf5B\x11sb\xe8!\x11\xd4\xf2\"_^^\xe6}l\x0a\x9d\x9d\x9d<\x8a\x85\x85\x05\xf9SR\xe5\xa8\xa1\x8an\x04\xa1L2\xd0'\x1e\xc2(o!\xa0\xc1\xe3\xc9\xc9\x09:\xad6\xbb\xbd\xbd=$@\xfb9\xfb\x8e\x8ab\xb0\xb2\x99i\x1a\xc8\x01G\x03\x16\x9e{\xc8\xf1\xb7\xf2y\x9dh\xbe\x94\xeeE,+\x8a\x849\xbaI\x85\xda\xdb\xdby\xb4\xa6\xd5\x08:\xdbRJ$\xe4\x08\xfc`\xed\xaa\xb8^\xa3\xa3\xa3<\xea\"\x0bu\x9dS\xc0\xd9\xda\xda*\xe1\xe4\xe4dVdl\xe7~\xd0\x18v\x8e_~\xee=\x89^r\"\x12\xe4\x99\x954\xd6]\x06CCC\x17\xb6sQO\x8c\xd5\xd4e\x07\xf4\xa7\xab\x8d\x06\xf8~6\xbb\xcc4\x13\xf4Q\xe9\x88\x10\x97E!\x14\xd8'\x09)\xe7\x0ba\xe8^\xb4\x1e\xb7\x9c\xa2\x1a(.X\xd1\xe6kM\xab\x112<Qi\x89\xa4Z\xeb\xc5F\x11\x8d\xe1\xec940p\xad\xa0\x1e_\xbe|\xc9\xdffE\xc6v\xae~|\xfb\xf6\xed|;\x17\xbd\xb4\xf8k\xf9\xba\x15*\x80\x11\xea\xe3\xe8\"?C\x19[\xd4A\xf1(\xa8-f\xcfR\xb0(\xdf\x01#\x9d\xa6\xab&\x84\xb4\x96\xf3=\xba*E<z\xf4\x08C\x98\x99\xe6\x83\xca\xdeH\xcfp\xe1\\\xc8\xd5\xdf\x12\xc6\xafr\xdf\xe4\x83\xd1\xb5r\xed\xda5n?\xc0\xd3\xd2\xcfX\xd3j\xe7\x97\x84\x1f\xfc\xe0\xc1\x03$U\\/\x0e\xf4\xccC\xd0=\x82Q\xe6F\xb9\x00i\xbc\xac\xe0\xfc\xc6\x9fd\x1a\x0f\x14\x1ac\x86\xe7\x8b\x17\xcck\xaa\x01\xc4%\x08(\xa9(\xee\xea\xd5\xab\xc94+\xba4\x9cM-\xdf\x91\xd2\xd3\xd33<<\x8c_\x1f\xb9\xe1(g\x202\xa6X\x02\xcd\xa0\xf4\x0f\x10Cc\xf3\xc5\xc7\xb2\xa6\xd5\x07v\x06\xfcW\x8c\x16;C-\xd6\x0be`\xff\xc1\xfb\xe1\x83\x9c\xc5S\xf1)v\x15M\x89\xf9\xe3\x94TK\x88K\xd0\xb4\x90L\xd3\xc3\x96G\x90\xfc\xa7\xba\xdf\xa9\xa9)\xddQ\xf7\xcb\x0a^kZ\x9dQ\x0fn\xed\xd6\xeb\xcfSR\x89\xb0\x9d3\xc6\xa4\x80\xf0\x17IbJ\x9f\xf0\xe891|\xfc\xf81\x99\x06\xc6\xebe;g\x8c\xf9\x7fLOO\x13\xe0\xd2\x95\xbesssD\xc6\x92i`\xbc^\xff\x85\xdf\xb9\xd3:\x19c\xcc)\x8c\x02&\x08\xf6\xec\xd93\x0a\xcd\x9f?\x7f~\xe6\x85>\x14,PN\xc2\x05=\x94\x01'\xf3/x\xbd\x1a\x07\xd7\xa1\x18c\x8c)3\xbe\x0f\xc5\x18cL\x99\xb1\x9d3\xc6\x18Sfl\xe7\x8c1\xc6\x94\x19\xdb9c\x8c1e\xc6v\xce\x18cL\x99\xb1\x9d3\xc6\x18Sfl\xe7\x8c1\xc6\x94\x19\xdb9c\x8c1e\xc6v\xce\x18cL\x99\xb1\x9d3\xc6\x18Sfl\xe7\x8c1\xc6\x94\x99\x7f\x00\xdd\x859\xcb\x8e\x12h\xdf\x00\x00\x00\x00IEND\xaeB`\x82",
+
+	"doc/tutorial/index.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Tutorials\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/\"\x0a}-->\x0a\x0a<p>If\x20you're\x20new\x20to\x20a\x20part\x20of\x20Go,\x20take\x20a\x20look\x20at\x20the\x20tutorials\x20linked\x20below.</p>\x0a\x0a<p>\x0a\x20\x20If\x20you\x20haven't\x20installed\x20Go\x20yet,\x20see\x0a\x20\x20<a\x20href=\"/doc/install\">Download\x20and\x20install</a>.\x0a</p>\x0a\x0a<table\x20id=\"tutorials-list\"\x20class=\"DocTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr\x20class=\"DocTable-head\">\x0a\x20\x20\x20\x20\x20\x20<th\x20class=\"DocTable-cell\"\x20width=\"20%\">Tutorial</th>\x0a\x20\x20\x20\x20\x20\x20<th\x20class=\"DocTable-cell\">Description</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr\x20class=\"DocTable-row\">\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"getting-started.html\">Getting\x20started</a>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">Say\x20Hello,\x20World\x20with\x20Go.</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr\x20class=\"DocTable-row\">\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"create-module.html\">Create\x20a\x20module</a>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20A\x20multi-part\x20tutorial\x20that\x20introduces\x20common\x20programming\x20language\x0a\x20\x20\x20\x20\x20\x20\x20\x20features\x20from\x20the\x20Go\x20perspective.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr\x20class=\"DocTable-row\">\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://tour.golang.org/welcome/1\">A\x20Tour\x20of\x20Go</a>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20<td\x20class=\"DocTable-cell\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20An\x20interactive\x20introduction\x20to\x20Go:\x20basic\x20syntax\x20and\x20data\x20structures;\x20methods\x20and\x20interfaces;\x20and\x20Go's\x20concurrency\x20primitives.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</tbody>\x0a</table>\x0a",
+
+	"doc/tutorial/random-greeting.html": "<!--{\x0a\x20\x20\x20\x20\"Title\":\x20\"Return\x20a\x20random\x20greeting\",\x0a\x20\x20\x20\x20\"Path\":\x20\x20\"/doc/tutorial/random-greeting\"\x0a}-->\x0a\x0a<p>\x0a\x20\x20In\x20this\x20section,\x20you'll\x20change\x20your\x20code\x20so\x20that\x20instead\x20of\x20returning\x20a\x20single\x0a\x20\x20greeting\x20every\x20time,\x20it\x20returns\x20one\x20of\x20several\x20predefined\x20greeting\x20messages.\x0a</p>\x0a\x0a<aside\x20class=\"Note\">\x0a\x20\x20<strong>Note:</strong>\x20This\x20topic\x20is\x20part\x20of\x20a\x20multi-part\x20tutorial\x20that\x20begins\x0a\x20\x20with\x20<a\x20href=\"create-module.html\">Create\x20a\x20Go\x20module</a>.\x0a</aside>\x0a\x0a<p>\x0a\x20\x20To\x20do\x20this,\x20you'll\x20use\x20a\x20Go\x20slice.\x20A\x0a\x20\x20<a\x20href=\"https://blog.golang.org/slices-intro\"><em>slice</em></a>\x20is\x20like\x20an\x0a\x20\x20array,\x20except\x20that\x20it's\x20dynamically\x20sized\x20as\x20you\x20add\x20and\x20remove\x20items.\x20It's\x0a\x20\x20one\x20of\x20the\x20most\x20useful\x20types\x20in\x20Go.\x20You'll\x20add\x20a\x20small\x20slice\x20to\x20contain\x20three\x0a\x20\x20greeting\x20messages,\x20then\x20have\x20your\x20code\x20return\x20one\x20of\x20the\x20messages\x20randomly.\x0a</p>\x0a\x0a<ol>\x0a\x20\x20<li>\x0a\x20\x20\x20\x20In\x20greetings/greetings.go,\x20change\x20your\x20code\x20so\x20it\x20looks\x20like\x20the\x20following.\x0a\x0a\x20\x20\x20\x20<pre>\x0apackage\x20greetings\x0a\x0aimport\x20(\x0a\x20\x20\x20\x20\"errors\"\x0a\x20\x20\x20\x20\"fmt\"\x0a\x20\x20\x20\x20<ins>\"math/rand\"\x0a\x20\x20\x20\x20\"time\"</ins>\x0a)\x0a\x0a//\x20Hello\x20returns\x20a\x20greeting\x20for\x20the\x20named\x20person.\x0afunc\x20Hello(name\x20string)\x20(string,\x20error)\x20{\x0a\x20\x20\x20\x20//\x20If\x20no\x20name\x20was\x20given,\x20return\x20an\x20error\x20with\x20a\x20message.\x0a\x20\x20\x20\x20if\x20name\x20==\x20\"\"\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20name,\x20errors.New(\"empty\x20name\")\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//\x20Create\x20a\x20message\x20using\x20a\x20random\x20format.\x0a\x20\x20\x20\x20message\x20:=\x20fmt.Sprintf(<ins>randomFormat()</ins>,\x20name)\x0a\x20\x20\x20\x20return\x20message,\x20nil\x0a}\x0a\x0a<ins>//\x20init\x20sets\x20initial\x20values\x20for\x20variables\x20used\x20in\x20the\x20function.\x0afunc\x20init()\x20{\x0a\x20\x20\x20\x20rand.Seed(time.Now().UnixNano())\x0a}\x0a\x0a//\x20randomFormat\x20returns\x20one\x20of\x20a\x20set\x20of\x20greeting\x20messages.\x20The\x20returned\x0a//\x20message\x20is\x20selected\x20at\x20random.\x0afunc\x20randomFormat()\x20string\x20{\x0a\x20\x20\x20\x20//\x20A\x20slice\x20of\x20message\x20formats.\x0a\x20\x20\x20\x20formats\x20:=\x20[]string{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Hi,\x20%v.\x20Welcome!\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Great\x20to\x20see\x20you,\x20%v!\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"Hail,\x20%v!\x20Well\x20met!\",\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Return\x20a\x20randomly\x20selected\x20message\x20format\x20by\x20specifying\x0a\x20\x20\x20\x20//\x20a\x20random\x20index\x20for\x20the\x20slice\x20of\x20formats.\x0a\x20\x20\x20\x20return\x20formats[rand.Intn(len(formats))]\x0a}</ins>\x0a</pre>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20In\x20this\x20code,\x20you:\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20a\x20<code>randomFormat</code>\x20function\x20that\x20returns\x20a\x20randomly\x0a\x20\x20\x20\x20\x20\x20\x20\x20selected\x20format\x20for\x20a\x20greeting\x20message.\x20Note\x20that\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>randomFormat</code>\x20starts\x20with\x20a\x20lowercase\x20letter,\x20making\x20it\x0a\x20\x20\x20\x20\x20\x20\x20\x20accessible\x20only\x20to\x20code\x20in\x20its\x20own\x20package\x20(in\x20other\x20words,\x20it's\x20not\x0a\x20\x20\x20\x20\x20\x20\x20\x20exported).\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20In\x20<code>randomFormat</code>,\x20declare\x20a\x20<code>formats</code>\x20slice\x20with\x0a\x20\x20\x20\x20\x20\x20\x20\x20three\x20message\x20formats.\x20When\x20declaring\x20a\x20slice,\x20you\x20omit\x20its\x20size\x20in\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20brackets,\x20like\x20this:\x20<code>[]string</code>.\x20This\x20tells\x20Go\x20that\x20the\x20array\x0a\x20\x20\x20\x20\x20\x20\x20\x20underlying\x20a\x20slice\x20can\x20be\x20dynamically\x20sized.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Use\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/pkg/math/rand/\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>math/rand</code>\x20package</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20to\x20generate\x20a\x20random\x20number\x20for\x20selecting\x20an\x20item\x20from\x20the\x20slice.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20an\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://golang.org/doc/effective_go.html#init\"\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20><code>init</code>\x20function</a\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20to\x20seed\x20the\x20<code>rand</code>\x20package\x20with\x20the\x20current\x20time.\x20Go\x20executes\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>init</code>\x20functions\x20automatically\x20at\x20program\x20startup,\x20after\x0a\x20\x20\x20\x20\x20\x20\x20\x20global\x20variables\x20have\x20been\x20initialized.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20In\x20<code>Hello</code>,\x20call\x20the\x20<code>randomFormat</code>\x20function\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20get\x20a\x20format\x20for\x20the\x20message\x20you'll\x20return,\x20then\x20use\x20the\x20format\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>name</code>\x20value\x20together\x20to\x20create\x20the\x20message.\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20<li>Return\x20the\x20message\x20(or\x20an\x20error)\x20as\x20you\x20did\x20before.</li>\x0a\x20\x20\x20\x20</ul>\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Your\x20hello.go\x20needn't\x20change.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</li>\x0a\x0a\x20\x20<li>\x0a\x20\x20\x20\x20At\x20the\x20command\x20line,\x20change\x20to\x20the\x20hello\x20directory,\x20then\x20run\x20hello.go\x20to\x0a\x20\x20\x20\x20confirm\x20that\x20the\x20code\x20works.\x20Run\x20it\x20multiple\x20times,\x20noticing\x20that\x20the\x0a\x20\x20\x20\x20greeting\x20changes.\x0a\x0a\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20Oh\x20--\x20don't\x20forget\x20to\x20add\x20Gladys's\x20name\x20(or\x20a\x20different\x20name,\x20if\x20you\x20like)\x0a\x20\x20\x20\x20\x20\x20as\x20an\x20argument\x20to\x20the\x20<code>Hello</code>\x20function\x20call\x20in\x20hello.go:\x0a\x20\x20\x20\x20\x20\x20<code>greetings.Hello(\"Gladys\")</code>\x0a\x20\x20\x20\x20</p>\x0a\x0a\x20\x20\x20\x20<pre>\x0a$\x20go\x20build\x0a$\x20./hello\x0aGreat\x20to\x20see\x20you,\x20Gladys!\x0a\x0a$\x20./hello\x0aHi,\x20Gladys.\x20Welcome!\x0a\x0a$\x20./hello\x0aHail,\x20Gladys!\x20Well\x20met!\x0a</pre\x0a\x20\x20\x20\x20>\x0a\x20\x20</li>\x0a</ol>\x0a\x0a<p>\x0a\x20\x20That's\x20an\x20introduction\x20to\x20a\x20Go\x20slice.\x20To\x20get\x20even\x20more\x20use\x20out\x20of\x20this\x20type,\x0a\x20\x20you'll\x20use\x20a\x20slice\x20to\x20greet\x20multiple\x20people.\x20That's\x20in\x20the\x20tutorial's\x0a\x20\x20<a\x20href=\"greetings-multiple-people.html\">next\x20topic</a>.\x0a</p>\x0a\x0a<p\x20class=\"Navigation\">\x0a\x20\x20<a\x20class=\"Navigation-prev\"\x20href=\"handle-errors.html\"\x0a\x20\x20\x20\x20>&lt;\x20Return\x20and\x20handle\x20an\x20error</a\x0a\x20\x20>\x0a\x20\x20<a\x20class=\"Navigation-next\"\x20href=\"greetings-multiple-people.html\"\x0a\x20\x20\x20\x20>Return\x20greetings\x20for\x20multiple\x20people\x20&gt;</a\x0a\x20\x20>\x0a</p>\x0a",
+
 	"error.html": "<!--\x0a\x09Copyright\x202009\x20The\x20Go\x20Authors.\x20All\x20rights\x20reserved.\x0a\x09Use\x20of\x20this\x20source\x20code\x20is\x20governed\x20by\x20a\x20BSD-style\x0a\x09license\x20that\x20can\x20be\x20found\x20in\x20the\x20LICENSE\x20file.\x0a-->\x0a\x0a<p>\x0a<span\x20class=\"alert\"\x20style=\"font-size:120%\">{{html\x20.}}</span>\x0a</p>\x0a",
 
 	"example.html": "<div\x20id=\"example_{{.Name}}\"\x20class=\"toggle\">\x0a\x20\x20<div\x20class=\"collapsed\">\x0a\x20\x20\x20\x20<p\x20class=\"exampleHeading\x20toggleButton\">\xe2\x96\xb9\x20<span\x20class=\"text\">Example{{example_suffix\x20.Name}}</span></p>\x0a\x20\x20</div>\x0a\x20\x20<div\x20class=\"expanded\">\x0a\x20\x20\x20\x20<p\x20class=\"exampleHeading\x20toggleButton\">\xe2\x96\xbe\x20<span\x20class=\"text\">Example{{example_suffix\x20.Name}}</span></p>\x0a\x20\x20\x20\x20{{with\x20.Doc}}<p>{{html\x20.}}</p>{{end}}\x0a\x20\x20\x20\x20{{$output\x20:=\x20.Output}}\x0a\x20\x20\x20\x20{{with\x20.Play}}\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\"play\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\"input\"><textarea\x20class=\"code\"\x20spellcheck=\"false\">{{html\x20.}}</textarea></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\"output\"><pre>{{html\x20$output}}</pre></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\"buttons\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\"Button\x20Button--primary\x20run\"\x20title=\"Run\x20this\x20code\x20[shift-enter]\">Run</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\"Button\x20fmt\"\x20title=\"Format\x20this\x20code\">Format</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{if\x20not\x20$.GoogleCN}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\"Button\x20share\"\x20title=\"Share\x20this\x20code\">Share</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{end}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20{{else}}\x0a\x20\x20\x20\x20\x20\x20<p>Code:</p>\x0a\x20\x20\x20\x20\x20\x20<pre\x20class=\"code\">{{.Code}}</pre>\x0a\x20\x20\x20\x20\x20\x20{{with\x20.Output}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>Output:</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\"output\">{{html\x20.}}</pre>\x0a\x20\x20\x20\x20\x20\x20{{end}}\x0a\x20\x20\x20\x20{{end}}\x0a\x20\x20</div>\x0a</div>\x0a",
@@ -119,7 +147,7 @@
 
 	"searchtxt.html": "<!--\x0a\x09Copyright\x202009\x20The\x20Go\x20Authors.\x20All\x20rights\x20reserved.\x0a\x09Use\x20of\x20this\x20source\x20code\x20is\x20governed\x20by\x20a\x20BSD-style\x0a\x09license\x20that\x20can\x20be\x20found\x20in\x20the\x20LICENSE\x20file.\x0a-->\x0a{{$query_url\x20:=\x20urlquery\x20.Query}}\x0a{{with\x20.Textual}}\x0a\x09{{if\x20$.Complete}}\x0a\x09\x09<h2\x20id=\"Textual\">{{html\x20$.Found}}\x20textual\x20occurrences</h2>\x0a\x09{{else}}\x0a\x09\x09<h2\x20id=\"Textual\">More\x20than\x20{{html\x20$.Found}}\x20textual\x20occurrences</h2>\x0a\x09\x09<p>\x0a\x09\x09<span\x20class=\"alert\"\x20style=\"font-size:120%\">Not\x20all\x20files\x20or\x20lines\x20containing\x20\"{{html\x20$.Query}}\"\x20are\x20shown.</span>\x0a\x09\x09</p>\x0a\x09{{end}}\x0a\x09<p>\x0a\x09<table\x20class=\"layout\">\x0a\x09{{range\x20.}}\x0a\x09\x09{{$file\x20:=\x20.Filename}}\x0a\x09\x09<tr>\x0a\x09\x09<td\x20align=\"left\"\x20valign=\"top\">\x0a\x09\x09<a\x20href=\"{{queryLink\x20$file\x20$query_url\x200}}\">{{$file}}</a>:\x0a\x09\x09</td>\x0a\x09\x09<td\x20align=\"left\"\x20width=\"4\"></td>\x0a\x09\x09<th\x20align=\"left\"\x20valign=\"top\">{{len\x20.Lines}}</th>\x0a\x09\x09<td\x20align=\"left\"\x20width=\"4\"></td>\x0a\x09\x09<td\x20align=\"left\">\x0a\x09\x09{{range\x20.Lines}}\x0a\x09\x09\x09<a\x20href=\"{{queryLink\x20$file\x20$query_url\x20.}}\">{{html\x20.}}</a>\x0a\x09\x09{{end}}\x0a\x09\x09{{if\x20not\x20$.Complete}}\x0a\x09\x09\x09...\x0a\x09\x09{{end}}\x0a\x09\x09</td>\x0a\x09\x09</tr>\x0a\x09{{end}}\x0a\x09{{if\x20not\x20$.Complete}}\x0a\x09\x09<tr><td\x20align=\"left\">...</td></tr>\x0a\x09{{end}}\x0a\x09</table>\x0a\x09</p>\x0a{{end}}\x0a",
 
-	"style.css": "body\x20{\x0a\x20\x20margin:\x200;\x0a\x20\x20font-family:\x20Roboto,\x20Arial,\x20sans-serif;\x0a\x20\x20background-color:\x20#fff;\x0a\x20\x20line-height:\x201.3;\x0a\x20\x20text-align:\x20center;\x0a\x20\x20color:\x20#3e4042;\x0a}\x0atextarea\x20{\x0a\x20\x20/*\x20Inherit\x20text\x20color\x20from\x20body\x20avoiding\x20illegible\x20text\x20in\x20the\x20case\x20where\x20the\x0a\x20\x20\x20*\x20user\x20has\x20inverted\x20the\x20browsers\x20custom\x20text\x20and\x20background\x20colors.\x20*/\x0a\x20\x20color:\x20inherit;\x0a}\x0apre,\x0acode\x20{\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0apre\x20{\x0a\x20\x20line-height:\x201.4;\x0a\x20\x20overflow-x:\x20auto;\x0a}\x0apre\x20.comment\x20{\x0a\x20\x20color:\x20#006600;\x0a}\x0apre\x20.highlight,\x0apre\x20.highlight-comment,\x0apre\x20.selection-highlight,\x0apre\x20.selection-highlight-comment\x20{\x0a\x20\x20background:\x20#ffff00;\x0a}\x0apre\x20.selection,\x0apre\x20.selection-comment\x20{\x0a\x20\x20background:\x20#ff9632;\x0a}\x0apre\x20.ln\x20{\x0a\x20\x20color:\x20#999;\x0a\x20\x20background:\x20#efefef;\x0a}\x0a.ln\x20{\x0a\x20\x20user-select:\x20none;\x0a\x0a\x20\x20/*\x20Ensure\x208\x20characters\x20in\x20the\x20document\x20-\x20which\x20due\x20to\x20floating\x0a\x20\x20\x20*\x20point\x20rendering\x20issues,\x20might\x20have\x20a\x20width\x20of\x20less\x20than\x201\x20each\x20-\x20are\x208\x0a\x20\x20\x20*\x20characters\x20wide,\x20so\x20a\x20tab\x20in\x20the\x209th\x20position\x20indents\x20properly.\x20See\x0a\x20\x20\x20*\x20https://github.com/webcompat/web-bugs/issues/17530#issuecomment-402675091\x0a\x20\x20\x20*\x20for\x20more\x20information.\x20*/\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20width:\x208ch;\x0a}\x0a\x0a.search-nav\x20{\x0a\x20\x20margin-left:\x201.25rem;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20column-gap:\x201.25rem;\x0a\x20\x20column-fill:\x20auto;\x0a\x20\x20column-width:\x2014rem;\x0a}\x0a\x0a.search-nav\x20.indent\x20{\x0a\x20\x20margin-left:\x201.25rem;\x0a}\x0a\x0aa,\x0a.exampleHeading\x20.text,\x0a.expandAll\x20{\x0a\x20\x20color:\x20#007d9c;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0aa:hover,\x0a.exampleHeading\x20.text:hover,\x0a.expandAll:hover\x20{\x0a\x20\x20text-decoration:\x20underline;\x0a}\x0a.article\x20a\x20{\x0a\x20\x20text-decoration:\x20underline;\x0a}\x0a.article\x20.title\x20a\x20{\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a\x0a.permalink\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a:hover\x20>\x20.permalink\x20{\x0a\x20\x20display:\x20inline;\x0a}\x0a\x0ap,\x0ali\x20{\x0a\x20\x20max-width:\x2050rem;\x0a\x20\x20word-wrap:\x20break-word;\x0a}\x0ap,\x0apre,\x0aul,\x0aol\x20{\x0a\x20\x20margin:\x201.25rem;\x0a}\x0apre\x20{\x0a\x20\x20background:\x20#efefef;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0a\x0ah1,\x0ah2,\x0ah3,\x0ah4\x20{\x0a\x20\x20margin:\x201.25rem\x200\x201.25rem;\x0a\x20\x20padding:\x200;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20font-family:\x20'Work\x20Sans',\x20sans-serif;\x0a\x20\x20font-weight:\x20600;\x0a}\x0ah1\x20{\x0a\x20\x20font-size:\x201.75rem;\x0a\x20\x20line-height:\x201;\x0a}\x0ah1\x20.text-muted\x20{\x0a\x20\x20color:\x20#777;\x0a}\x0ah2\x20{\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20background:\x20#e0ebf5;\x0a\x20\x20padding:\x200.5rem;\x0a\x20\x20line-height:\x201.25;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20overflow-wrap:\x20break-word;\x0a}\x0ah2\x20a\x20{\x0a\x20\x20font-weight:\x20bold;\x0a}\x0ah3\x20{\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20line-height:\x201.25;\x0a\x20\x20overflow-wrap:\x20break-word;\x0a}\x0ah3,\x0ah4\x20{\x0a\x20\x20margin:\x201.25rem\x200.3125rem;\x0a}\x0ah4\x20{\x0a\x20\x20font-size:\x201rem;\x0a}\x0a\x0ah2\x20>\x20span,\x0ah3\x20>\x20span\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20margin:\x200\x2025px\x200\x200;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20color:\x20#5279c7;\x0a}\x0a\x0adl\x20{\x0a\x20\x20margin:\x201.25rem;\x0a}\x0add\x20{\x0a\x20\x20margin:\x200\x200\x200\x201.25rem;\x0a}\x0adl,\x0add\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0adiv#nav\x20table\x20td\x20{\x0a\x20\x20vertical-align:\x20top;\x0a}\x0a\x0a.ModTable\x20{\x0a\x20\x20border-collapse:\x20collapse;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20max-width:\x2050rem;\x0a}\x0a.ModTable\x20code\x20{\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.ModTable\x20td,\x0a.ModTable\x20th\x20{\x0a\x20\x20border:\x201px\x20solid\x20#a9a9a9;\x0a\x20\x20padding:\x201rem;\x0a\x20\x20vertical-align:\x20top;\x0a}\x0a.ModTable\x20td\x20p\x20{\x0a\x20\x20margin:\x200\x200\x201rem\x200;\x0a}\x0a.ModTable\x20td\x20p:last-child\x20{\x0a\x20\x20margin-bottom:\x200;\x0a}\x0a\x0a#pkg-index\x20h3\x20{\x0a\x20\x20font-size:\x201rem;\x0a}\x0a.pkg-dir\x20{\x0a\x20\x20padding:\x200\x200.625rem;\x0a}\x0a.pkg-dir\x20table\x20{\x0a\x20\x20border-collapse:\x20collapse;\x0a\x20\x20border-spacing:\x200;\x0a}\x0a.pkg-name\x20{\x0a\x20\x20padding-right:\x200.625rem;\x0a}\x0a.alert\x20{\x0a\x20\x20color:\x20#aa0000;\x0a}\x0a\x0a#pkg-examples\x20h3\x20{\x0a\x20\x20float:\x20left;\x0a}\x0a\x0a#pkg-examples\x20dl\x20{\x0a\x20\x20clear:\x20both;\x0a}\x0a\x0a.expandAll\x20{\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20float:\x20left;\x0a\x20\x20margin:\x201.25rem\x200;\x0a}\x0a\x0a.Site\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20min-height:\x20100vh;\x0a}\x0a.Site-content\x20{\x0a\x20\x20flex:\x201;\x0a}\x0a#page\x20{\x0a\x20\x20width:\x20100%;\x0a}\x0a#page\x20>\x20.container,\x0a.Header-nav\x20{\x0a\x20\x20text-align:\x20left;\x0a\x20\x20margin-left:\x20auto;\x0a\x20\x20margin-right:\x20auto;\x0a\x20\x20padding:\x200\x201.25rem;\x0a}\x0a#page\x20>\x20.container,\x0a.Header-nav,\x0a.Footer\x20{\x0a\x20\x20max-width:\x2059.38rem;\x0a}\x0a#page.wide\x20>\x20.container,\x0a.Header-nav--wide,\x0a.Footer--wide\x20{\x0a\x20\x20max-width:\x20none;\x0a}\x0a\x0adiv#playground\x20.buttons\x20a\x20{\x0a\x20\x20background:\x20#375eab;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#757575;\x0a\x20\x20color:\x20white;\x0a}\x0a\x0a/*\x20Style\x20download\x20button\x20on\x20doc/install\x20page\x20*/\x0aa#start\x20{\x0a\x20\x20background:\x20#e0ebf5;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#375eab;\x0a\x20\x20border-radius:\x200.3125rem;\x0a\x20\x20color:\x20#222;\x0a\x20\x20display:\x20block;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20text-align:\x20center;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0aa#start\x20.big\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0aa#start\x20.desc\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20margin-top:\x200.3125rem;\x0a}\x0a\x0a.download\x20{\x0a\x20\x20width:\x209.375rem;\x0a}\x0a\x0a::-webkit-input-placeholder\x20{\x0a\x20\x20color:\x20#7f7f7f;\x0a\x20\x20opacity:\x201;\x0a}\x0a::placeholder\x20{\x0a\x20\x20color:\x20#7f7f7f;\x0a\x20\x20opacity:\x201;\x0a}\x0a\x0a.Header\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20display:\x20flex;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20justify-content:\x20space-between;\x0a\x20\x20padding:\x201.375rem\x200;\x0a}\x0a.Header.is-active\x20{\x0a\x20\x20background-color:\x20#f7f9fa;\x0a}\x0a.Header-banner\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.Header-logo\x20{\x0a\x20\x20height:\x202rem;\x0a\x20\x20width:\x205.125rem;\x0a}\x0a.Header-nav\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20justify-content:\x20space-between;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header-menuButton\x20{\x0a\x20\x20background-color:\x20transparent;\x0a\x20\x20border:\x20none;\x0a\x20\x20box-sizing:\x20content-box;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20height:\x201.313rem;\x0a\x20\x20padding:\x200.375rem;\x0a\x20\x20position:\x20relative;\x0a\x20\x20vertical-align:\x20middle;\x0a\x20\x20width:\x201.313rem;\x0a}\x0a.Header-menuButtonInner\x20{\x0a\x20\x20position:\x20relative;\x0a}\x0a.Header-menuButton::after,\x0a.Header-menuButtonInner,\x0a.Header-menuButtonInner::before,\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20background-color:\x20#3e4042;\x0a\x20\x20height:\x200.1875rem;\x0a\x20\x20transition:\x20all\x20100ms\x20ease-in;\x0a}\x0a.Header-menuButton::after\x20{\x0a\x20\x20opacity:\x200;\x0a\x20\x20top:\x200.9375rem;\x0a}\x0a.Header-menuButton::after,\x0a.Header-menuButtonInner::before,\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20content:\x20'';\x0a\x20\x20display:\x20block;\x0a\x20\x20position:\x20absolute;\x0a\x20\x20width:\x201.313rem;\x0a}\x0a.Header-menuButtonInner::before\x20{\x0a\x20\x20top:\x20-0.375rem;\x0a}\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20bottom:\x20-0.375rem;\x0a}\x0a.Header.is-active\x20.Header-menuButton::after\x20{\x0a\x20\x20opacity:\x201;\x0a\x20\x20transform:\x20rotate(-45deg);\x0a}\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner\x20{\x0a\x20\x20transform:\x20rotate(45deg);\x0a}\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner::before,\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner::after\x20{\x0a\x20\x20background-color:\x20transparent;\x0a}\x0a.Header-menu\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20display:\x20none;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20list-style:\x20none;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header.is-active\x20.Header-menu\x20{\x0a\x20\x20display:\x20flex;\x0a}\x0a.Header-menuItem:first-of-type\x20{\x0a\x20\x20/*\x20Offset\x20the\x20padding\x20of\x20the\x20inner\x20link,\x20maintaining\x20its\x20click\x20target\x20size,\x0a\x20\x20\x20\x20\x20while\x20still\x20placing\x20the\x20item\x20as\x20if\x20it\x20had\x20no\x20top\x20margin\x20or\x20padding.\x20*/\x0a\x20\x20margin-top:\x20-0.5rem;\x0a}\x0a.Header-menuItem\x20{\x0a\x20\x20display:\x20inline-flex;\x0a}\x0a.Header-menuItem,\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited,\x0a.Header-menuItem--search,\x0a.HeaderSearch\x20{\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header-menuItem,\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited\x20{\x0a\x20\x20color:\x20#3e4042;\x0a\x20\x20text-align:\x20center;\x0a}\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited\x20{\x0a\x20\x20padding:\x200.5rem\x200;\x0a}\x0a.Header-menuItem--search\x20{\x0a\x20\x20margin-top:\x200.5rem;\x0a}\x0a.HeaderSearch,\x0a.HeaderSearch-label\x20{\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20position:\x20relative;\x0a}\x0a.HeaderSearch\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#979797;\x0a\x20\x20border-radius:\x200.1875rem;\x0a\x20\x20display:\x20inline-flex;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20position:\x20relative;\x0a}\x0a.HeaderSearch-input\x20{\x0a\x20\x20-webkit-appearance:\x20none;\x0a\x20\x20border:\x20none;\x0a\x20\x20border-radius:\x200;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20display:\x20block;\x0a\x20\x20flex:\x201;\x0a\x20\x20font:\x20inherit;\x0a\x20\x20font-size:\x2016px;\x20/*\x20Prevents\x20automatic\x20zoom\x20on\x20mobile\x20devices\x20*/\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200.5rem;\x0a}\x0a.HeaderSearch-input::-webkit-search-decoration\x20{\x0a\x20\x20-webkit-appearance:\x20none;\x0a}\x0a.HeaderSearch-input::-moz-ui-invalid\x20{\x0a\x20\x20box-shadow:\x20unset;\x0a}\x0a.HeaderSearch-submit\x20{\x0a\x20\x20background-color:\x20#fff;\x0a\x20\x20border:\x20none;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200.125rem\x200.5rem\x200\x200.55rem;\x0a\x20\x20transition:\x20background-color\x20200ms;\x0a}\x0a.HeaderSearch:focus-within\x20.HeaderSearch-submit\x20{\x0a\x20\x20background-color:\x20#e5f6fb;\x0a}\x0a.HeaderSearch-icon\x20{\x0a\x20\x20fill:\x20#757575;\x0a\x20\x20transition:\x20fill\x20200ms;\x0a}\x0a.HeaderSearch:focus-within\x20.HeaderSearch-icon\x20{\x0a\x20\x20fill:\x20#007d9c;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2056rem)\x20{\x0a\x20\x20.Header\x20{\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20padding:\x200;\x0a\x20\x20}\x0a\x20\x20.Header-banner\x20{\x0a\x20\x20\x20\x20background-color:\x20#000;\x0a\x20\x20\x20\x20color:\x20#fff;\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20padding:\x201rem;\x0a\x20\x20}\x0a\x20\x20.Header-banner\x20a:link,\x0a\x20\x20.Header-banner\x20a:visited\x20{\x0a\x20\x20\x20\x20color:\x20#fff;\x0a\x20\x20\x20\x20text-decoration:\x20underline;\x0a\x20\x20}\x0a\x20\x20.Header-nav\x20{\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header.is-active\x20{\x0a\x20\x20\x20\x20background-color:\x20#fff;\x0a\x20\x20}\x0a\x20\x20.Header.is-active\x20.Header-menu\x20{\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20}\x0a\x20\x20.Header-menuButton\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a\x20\x20.Header-menu\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20flex-direction:\x20row;\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem:first-of-type\x20{\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem,\x0a\x20\x20.Header-menuItem\x20a:link,\x0a\x20\x20.Header-menuItem\x20a:visited\x20{\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem\x20a:link,\x0a\x20\x20.Header-menuItem\x20a:visited\x20{\x0a\x20\x20\x20\x20padding:\x202rem\x201.5rem;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem\x20a:hover,\x0a\x20\x20.Header-menuItem\x20a:focus\x20{\x0a\x20\x20\x20\x20text-decoration:\x20underline;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem--search,\x0a\x20\x20.HeaderSearch\x20{\x0a\x20\x20\x20\x20width:\x208.75rem;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem--search\x20{\x0a\x20\x20\x20\x20margin-left:\x201.5rem;\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a\x20\x20.HeaderSearch-input\x20{\x0a\x20\x20\x20\x20min-width:\x205.625rem;\x0a\x20\x20}\x0a\x20\x20.HeaderSearch-submit\x20{\x0a\x20\x20\x20\x20padding:\x200.125rem\x200.5rem\x200;\x0a\x20\x20}\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2057.5rem)\x20{\x0a\x20\x20.Header\x20{\x0a\x20\x20\x20\x20font-size:\x201rem;\x0a\x20\x20}\x0a}\x0a\x0a.Button,\x0a.Button:link,\x0a.Button:visited\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20background-color:\x20#f7f9fa;\x0a\x20\x20border:\x20none;\x0a\x20\x20border-radius:\x200.1875rem;\x0a\x20\x20box-shadow:\x200\x202px\x205px\x20rgba(0,\x200,\x200,\x200.2);\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20color:\x20#007d9c;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20inline-flex;\x0a\x20\x20font:\x20bold\x200.875rem\x20Roboto,\x20sans-serif;\x0a\x20\x20height:\x202.375rem;\x0a\x20\x20padding:\x200\x200.625rem;\x0a\x20\x20justify-content:\x20center;\x0a\x20\x20min-width:\x204.063rem;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a.Button:active\x20{\x0a\x20\x20box-shadow:\x200\x201px\x203px\x20rgba(0,\x200,\x200,\x200.2);\x0a}\x0a.Button--primary,\x0a.Button--primary:link,\x0a.Button--primary:visited\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#00add8;\x0a}\x0a.Button--big,\x0a.Button--big:link,\x0a.Button--big:visited\x20{\x0a\x20\x20background-color:\x20#7fd5ea;\x0a\x20\x20border-radius:\x200.3125rem;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20font-size:\x201.5rem;\x0a\x20\x20height:\x204rem;\x0a\x20\x20justify-content:\x20center;\x0a}\x0a\x0a.HomeContainer\x20{\x0a\x20\x20align-items:\x20top;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.HomeContainer\x20*\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a}\x0a\x0a.HomeSection\x20{\x0a\x20\x20flex:\x200\x200\x20100%;\x0a\x20\x20margin-bottom:\x202.5rem;\x0a\x20\x20padding:\x200\x201rem;\x0a}\x0a.HomeSection-header\x20{\x0a\x20\x20background:\x20none;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20margin:\x200\x200\x200.625rem\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0a\x0a.Hero-header\x20{\x0a\x20\x20font:\x201.5rem\x20Roboto,\x20sans-serif;\x0a\x20\x20line-height:\x20inherit;\x0a\x20\x20margin:\x200\x200\x201.875rem;\x0a}\x0a.Hero-gopher\x20{\x0a\x20\x20background:\x20url('/lib/godoc/images/home-gopher.png')\x20no-repeat;\x0a\x20\x20background-position:\x20center\x20top;\x0a\x20\x20display:\x20block;\x0a\x20\x20height:\x209.688rem;\x0a\x20\x20max-height:\x20200px;\x20/*\x20Setting\x20in\x20px\x20to\x20prevent\x20the\x20gopher\x20from\x20blowing\x20up\x20in\x20very\x20high\x20default\x20font-sizes\x20*/\x0a}\x0a.HeroDownloadButton,\x0a.Hero-description\x20{\x0a\x20\x20text-align:\x20center;\x0a}\x0a.HeroDownloadButton,\x0a.HeroDownloadButton:link,\x0a.HeroDownloadButton:visited\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20margin-bottom:\x200.5rem;\x0a}\x0a.HeroDownloadButton-image\x20{\x0a\x20\x20height:\x202rem;\x0a\x20\x20margin-right:\x202rem;\x0a\x20\x20width:\x202rem;\x0a}\x0a.Hero-description\x20{\x0a\x20\x20color:\x20#616161;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20margin:\x200;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2057.1875rem)\x20{\x0a\x20\x20.HomeSection\x20{\x0a\x20\x20\x20\x20flex:\x200\x200\x2026.875rem;\x0a\x20\x20\x20\x20padding:\x200;\x0a\x20\x20}\x0a\x20\x20.Hero,\x0a\x20\x20.Playground\x20{\x0a\x20\x20\x20\x20margin-top:\x201rem;\x0a\x20\x20}\x0a}\x0a\x0a.Playground-headerContainer\x20{\x0a\x20\x20align-items:\x20baseline;\x0a\x20\x20display:\x20flex;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.Playground-popout\x20{\x0a\x20\x20background:\x20url('/lib/godoc/images/play-link.svg')\x20no-repeat;\x0a\x20\x20background-position:\x20right\x20center;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201rem;\x0a\x20\x20padding:\x200\x201.688rem;\x0a}\x0a.Playground-input,\x0a.Playground-output\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20margin:\x200;\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a.Playground-inputContainer\x20{\x0a\x20\x20border-top-left-radius:\x200.3125rem;\x0a\x20\x20border-top-right-radius:\x200.3125rem;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20height:\x2011rem;\x0a}\x0a.Playground-input\x20{\x0a\x20\x20width:\x20100%;\x0a\x20\x20height:\x20100%;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x20none;\x0a\x20\x20resize:\x20none;\x0a\x20\x20padding:\x200.625rem;\x0a}\x0a.Playground-outputContainer\x20{\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a\x20\x20border-top:\x20none\x20!important;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20height:\x205rem;\x0a\x20\x20margin-bottom:\x201rem;\x0a\x20\x20overflow:\x20auto;\x0a}\x0a.Playground-output\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20border-radius:\x200;\x0a}\x0a.Playground-inputContainer,\x0a.Playground-input,\x0a.Playground-outputContainer,\x0a.Playground-output\x20{\x0a\x20\x20background:\x20#f7f9fa;\x0a\x20\x20color:\x20#202224;\x0a}\x0a.Playground-inputContainer,\x0a.Playground-outputContainer\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#c0c2c3;\x0a}\x0a.Playground-controls\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a}\x0a.Playground-buttons\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex:\x201;\x0a\x20\x20flex-wrap:\x20nowrap;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.Playground-selectExample\x20{\x0a\x20\x20background-color:\x20white;\x0a\x20\x20border-radius:\x203px;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#979797;\x0a\x20\x20color:\x20inherit;\x0a\x20\x20font-family:\x20inherit;\x0a\x20\x20font-size:\x2016px;\x20/*\x20Prevents\x20automatic\x20zoom\x20on\x20mobile\x20devices\x20*/\x0a\x20\x20height:\x202.375rem;\x0a\x20\x20margin:\x200\x200\x200.5rem\x200;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Playground-secondaryButtons\x20{\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.Playground-secondaryButtons\x20.Button:not(:first-child)\x20{\x0a\x20\x20margin-left:\x200.4375rem;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2027.8125rem)\x20{\x0a\x20\x20.Playground-outputContainer\x20{\x0a\x20\x20\x20\x20margin-bottom:\x201.688rem;\x0a\x20\x20}\x0a\x20\x20.Playground-controls\x20{\x0a\x20\x20\x20\x20flex-wrap:\x20nowrap;\x0a\x20\x20}\x0a\x20\x20.Playground-selectExample\x20{\x0a\x20\x20\x20\x20margin:\x200\x200.4375rem\x200\x200;\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a}\x0a\x0a.Blog-title\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20margin:\x200;\x0a}\x0a.Blog-title,\x0a.Blog-extract,\x0a.Blog-when\x20{\x0a\x20\x20margin-bottom:\x200.625rem;\x0a}\x0a.Blog-when\x20{\x0a\x20\x20color:\x20#666;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a.Blog-footer\x20{\x0a\x20\x20text-align:\x20right;\x0a}\x0a\x0a@supports\x20(--c:\x200)\x20{\x0a\x20\x20[style*='--aspect-ratio-padding:']\x20{\x0a\x20\x20\x20\x20position:\x20relative;\x0a\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20padding-top:\x20var(--aspect-ratio-padding);\x0a\x20\x20}\x0a\x20\x20[style*='--aspect-ratio-padding:']\x20>\x20*\x20{\x0a\x20\x20\x20\x20position:\x20absolute;\x0a\x20\x20\x20\x20top:\x200;\x0a\x20\x20\x20\x20left:\x200;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20height:\x20100%;\x0a\x20\x20}\x0a}\x0a\x0a.Footer\x20{\x0a\x20\x20margin:\x202rem\x20auto\x200;\x0a\x20\x20padding:\x201rem\x201.25rem;\x0a\x20\x20position:\x20relative;\x0a\x20\x20text-align:\x20right;\x0a}\x0a.Footer-gopher\x20{\x0a\x20\x20bottom:\x200;\x0a\x20\x20left:\x201.25rem;\x0a\x20\x20position:\x20absolute;\x0a\x20\x20width:\x205rem;\x0a}\x0a.Footer-links\x20{\x0a\x20\x20flex:\x201;\x0a\x20\x20list-style:\x20none;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a}\x0a.Footer-link\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.Footer-link\x20+\x20.Footer-link\x20{\x0a\x20\x20margin-top:\x200.5rem;\x0a}\x0a.Footer-supportedBy\x20{\x0a\x20\x20color:\x20#6e7072;\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20font:\x200.875rem\x20'Product\x20Sans',\x20'Roboto',\x20'sans-serif';\x0a\x20\x20margin-top:\x201rem;\x0a}\x0a.Footer-supportedBy:hover\x20{\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2050rem)\x20{\x0a\x20\x20.Footer\x20{\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20margin:\x205rem\x20auto\x200;\x0a\x20\x20}\x0a\x20\x20.Footer-links\x20{\x0a\x20\x20\x20\x20padding-left:\x206.25rem;\x0a\x20\x20\x20\x20text-align:\x20left;\x0a\x20\x20}\x0a\x20\x20.Footer-link\x20{\x0a\x20\x20\x20\x20display:\x20inline;\x0a\x20\x20}\x0a\x20\x20.Footer-link\x20+\x20.Footer-link\x20{\x0a\x20\x20\x20\x20border-left:\x200.0625rem\x20solid\x20#3e4042;\x0a\x20\x20\x20\x20margin-left:\x200.75rem;\x0a\x20\x20\x20\x20padding-left:\x200.75rem;\x0a\x20\x20}\x0a\x20\x20.Footer-supportedBy\x20{\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a}\x0a\x0a.toggleButton\x20{\x0a\x20\x20cursor:\x20pointer;\x0a}\x0a.toggle\x20>\x20.collapsed\x20{\x0a\x20\x20display:\x20block;\x0a}\x0a.toggle\x20>\x20.expanded\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.toggleVisible\x20>\x20.collapsed\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.toggleVisible\x20>\x20.expanded\x20{\x0a\x20\x20display:\x20block;\x0a}\x0a\x0atable.codetable\x20{\x0a\x20\x20margin-left:\x20auto;\x0a\x20\x20margin-right:\x20auto;\x0a\x20\x20border-style:\x20none;\x0a}\x0atable.codetable\x20td\x20{\x0a\x20\x20padding-right:\x200.625rem;\x0a}\x0ahr\x20{\x0a\x20\x20border-style:\x20none;\x0a\x20\x20border-top:\x200.0625rem\x20solid\x20black;\x0a}\x0a\x0aimg.gopher\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20margin-left:\x200.625rem;\x0a\x20\x20margin-bottom:\x200.625rem;\x0a\x20\x20z-index:\x20-1;\x0a}\x0ah2\x20{\x0a\x20\x20clear:\x20right;\x0a}\x0a\x0adiv.play\x20{\x0a\x20\x20padding:\x200\x201.25rem\x202.5rem\x201.25rem;\x0a}\x0adiv.play\x20pre,\x0adiv.play\x20textarea,\x0adiv.play\x20.lines\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20margin:\x200;\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0adiv.play\x20.input\x20{\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20margin-top:\x200.625rem;\x0a\x0a\x20\x20border-top-left-radius:\x200.3125rem;\x0a\x20\x20border-top-right-radius:\x200.3125rem;\x0a\x0a\x20\x20overflow:\x20hidden;\x0a}\x0adiv.play\x20.input\x20textarea\x20{\x0a\x20\x20width:\x20100%;\x0a\x20\x20height:\x20100%;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x20none;\x0a\x20\x20resize:\x20none;\x0a\x0a\x20\x20overflow:\x20hidden;\x0a}\x0adiv#playground\x20.input\x20textarea\x20{\x0a\x20\x20overflow:\x20auto;\x0a\x20\x20resize:\x20auto;\x0a}\x0adiv.play\x20.output\x20{\x0a\x20\x20border-top:\x20none\x20!important;\x0a\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20max-height:\x2012.5rem;\x0a\x20\x20overflow:\x20auto;\x0a\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a}\x0adiv.play\x20.output\x20pre\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20border-radius:\x200;\x0a}\x0adiv.play\x20.input,\x0adiv.play\x20.input\x20textarea,\x0adiv.play\x20.output,\x0adiv.play\x20.output\x20pre\x20{\x0a\x20\x20background:\x20#f7f9fa;\x0a\x20\x20color:\x20#202224;\x0a}\x0adiv.play\x20.input,\x0adiv.play\x20.output\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#c0c2c3;\x0a}\x0adiv.play\x20.buttons\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20padding:\x200.625rem\x200;\x0a\x20\x20text-align:\x20right;\x0a}\x0adiv.play\x20.buttons\x20.Button\x20{\x0a\x20\x20margin-left:\x200.3125rem;\x0a}\x0a.output\x20.stderr\x20{\x0a\x20\x20color:\x20#933;\x0a}\x0a.output\x20.system\x20{\x0a\x20\x20color:\x20#999;\x0a}\x0a\x0a/*\x20drop-down\x20playground\x20*/\x0adiv#playground\x20{\x0a\x20\x20/*\x20start\x20hidden;\x20revealed\x20by\x20javascript\x20*/\x0a\x20\x20display:\x20none;\x0a}\x0adiv#playground\x20{\x0a\x20\x20position:\x20absolute;\x0a\x20\x20top:\x203.938rem;\x0a\x20\x20right:\x201.25rem;\x0a\x20\x20padding:\x200\x200.625rem\x200.625rem\x200.625rem;\x0a\x20\x20z-index:\x201;\x0a\x20\x20text-align:\x20left;\x0a\x20\x20background:\x20#e0ebf5;\x0a\x0a\x20\x20border:\x200.0625rem\x20solid\x20#b0bbc5;\x0a\x20\x20border-top:\x20none;\x0a\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a}\x0adiv#playground\x20.code\x20{\x0a\x20\x20width:\x2032.5rem;\x0a\x20\x20height:\x2012.5rem;\x0a}\x0adiv#playground\x20.output\x20{\x0a\x20\x20height:\x206.25rem;\x0a}\x0a\x0a/*\x20Inline\x20runnable\x20snippets\x20(play.js/initPlayground)\x20*/\x0a#content\x20.code\x20pre,\x0a#content\x20.playground\x20pre,\x0a#content\x20.output\x20pre\x20{\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20background:\x20none;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x200\x20solid\x20transparent;\x0a\x20\x20overflow:\x20auto;\x0a}\x0a#content\x20.playground\x20.number,\x0a#content\x20.code\x20.number\x20{\x0a\x20\x20color:\x20#999;\x0a}\x0a#content\x20.code,\x0a#content\x20.playground,\x0a#content\x20.output\x20{\x0a\x20\x20width:\x20auto;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0a#content\x20.code,\x0a#content\x20.playground\x20{\x0a\x20\x20background:\x20#e9e9e9;\x0a}\x0a#content\x20.output\x20{\x0a\x20\x20background:\x20#202020;\x0a}\x0a#content\x20.output\x20.stdout,\x0a#content\x20.output\x20pre\x20{\x0a\x20\x20color:\x20#e6e6e6;\x0a}\x0a#content\x20.output\x20.stderr,\x0a#content\x20.output\x20.error\x20{\x0a\x20\x20color:\x20rgb(244,\x2074,\x2063);\x0a}\x0a#content\x20.output\x20.system,\x0a#content\x20.output\x20.exit\x20{\x0a\x20\x20color:\x20rgb(255,\x20209,\x2077);\x0a}\x0a#content\x20.buttons\x20{\x0a\x20\x20position:\x20relative;\x0a\x20\x20float:\x20right;\x0a\x20\x20top:\x20-3.125rem;\x0a\x20\x20right:\x201.875rem;\x0a}\x0a#content\x20.output\x20.buttons\x20{\x0a\x20\x20top:\x20-3.75rem;\x0a\x20\x20right:\x200;\x0a\x20\x20height:\x200;\x0a}\x0a#content\x20.buttons\x20.kill\x20{\x0a\x20\x20display:\x20none;\x0a\x20\x20visibility:\x20hidden;\x0a}\x0aa.error\x20{\x0a\x20\x20font-weight:\x20bold;\x0a\x20\x20color:\x20white;\x0a\x20\x20background-color:\x20darkred;\x0a\x20\x20border-bottom-left-radius:\x200.25rem;\x0a\x20\x20border-bottom-right-radius:\x200.25rem;\x0a\x20\x20border-top-left-radius:\x200.25rem;\x0a\x20\x20border-top-right-radius:\x200.25rem;\x0a\x20\x20padding:\x200.125rem\x200.25rem\x200.125rem\x200.25rem;\x20/*\x20TRBL\x20*/\x0a}\x0a\x0a.downloading\x20{\x0a\x20\x20background:\x20#f9f9be;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20text-align:\x20center;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0a\x0a@media\x20(max-width:\x2043.75em)\x20{\x0a\x20\x20body\x20{\x0a\x20\x20\x20\x20font-size:\x200.9375rem;\x0a\x20\x20}\x0a\x0a\x20\x20div#playground\x20{\x0a\x20\x20\x20\x20left:\x200;\x0a\x20\x20\x20\x20right:\x200;\x0a\x20\x20}\x0a\x0a\x20\x20pre,\x0a\x20\x20code\x20{\x0a\x20\x20\x20\x20font-size:\x200.866rem;\x0a\x20\x20}\x0a\x0a\x20\x20#page\x20>\x20.container,\x0a\x20\x20.Header-nav\x20{\x0a\x20\x20\x20\x20padding:\x200\x200.625rem;\x0a\x20\x20}\x0a\x0a\x20\x20p,\x0a\x20\x20pre,\x0a\x20\x20ul,\x0a\x20\x20ol\x20{\x0a\x20\x20\x20\x20margin:\x200.625rem;\x0a\x20\x20}\x0a\x0a\x20\x20.pkg-synopsis\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a\x0a\x20\x20img.gopher\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a}\x0a\x0a@media\x20print\x20{\x0a\x20\x20pre\x20{\x0a\x20\x20\x20\x20background:\x20#fff;\x0a\x20\x20\x20\x20border:\x200.0625rem\x20solid\x20#bbb;\x0a\x20\x20\x20\x20white-space:\x20pre-wrap;\x0a\x20\x20\x20\x20page-break-inside:\x20avoid;\x0a\x20\x20}\x0a}\x0a",
+	"style.css": "body\x20{\x0a\x20\x20background-color:\x20#fff;\x0a\x20\x20color:\x20#3e4042;\x0a\x20\x20font-family:\x20Roboto,\x20Arial,\x20sans-serif;\x0a\x20\x20line-height:\x201.3;\x0a\x20\x20margin:\x200;\x0a\x20\x20text-align:\x20center;\x0a}\x0a.Note\x20{\x0a\x20\x20/*\x20For\x20styling\x20\"Note\"\x20sections.\x20*/\x0a\x20\x20background-color:\x20rgb(224,\x20235,\x20245);\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20max-width:\x2050rem;\x0a\x20\x20padding:\x200.5rem\x200.5rem\x200.5rem\x200.625rem;\x0a}\x0a/*\x20Tabs\x20*/\x0a.TabSection\x20{\x0a\x20\x20background:\x20#fff;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#dadce0;\x0a\x20\x20border-radius:\x200.3125rem;\x0a\x20\x20box-shadow:\x20none;\x0a\x20\x20max-width:\x2050rem;\x0a}\x0a.TabSection-tabList\x20{\x0a\x20\x20flex-shrink:\x200;\x0a\x20\x20position:\x20relative;\x0a\x20\x20border-bottom:\x200.0625rem\x20solid\x20#dadce0;\x0a}\x0a.TabSection-tab\x20{\x0a\x20\x20background:\x20#fff;\x0a\x20\x20border:\x20none;\x0a\x20\x20line-height:\x203rem;\x0a\x20\x20padding:\x200\x201.125rem;\x0a\x20\x20position:\x20relative;\x0a}\x0a.TabSection-tab[aria-selected='true']\x20{\x0a\x20\x20outline:\x200;\x0a\x20\x20background-color:\x20#e0ebf5;\x0a}\x0a.TabSection-tab:focus\x20{\x0a\x20\x20outline:\x200;\x0a\x20\x20background-color:\x20#e0ebf5;\x0a}\x0a.TabSection-tabPanel\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a/*\x20Tutorial\x20previous\x20and\x20next\x20links\x20*/\x0a.Navigation\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a.Navigation-prev\x20{\x0a\x20\x20float:\x20left;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0a.Navigation-next\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0a/*\x20Table\x20in\x20doc\x20topics.\x20*/\x0a.DocTable\x20{\x0a\x20\x20border-collapse:\x20collapse;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20max-width:\x2050rem;\x0a}\x0a.DocTable-row\x20{\x0a\x20\x20border-bottom:\x200.0625rem\x20solid\x20#dadce0;\x0a\x20\x20height:\x203rem;\x0a\x20\x20vertical-align:\x20middle;\x0a}\x0a.DocTable-head\x20{\x0a\x20\x20background:\x20#e8eaed;\x0a\x20\x20border-bottom:\x200.0625rem\x20solid\x20#dadce0;\x0a\x20\x20border-top:\x200.0625rem\x20solid\x20#dadce0;\x0a\x20\x20height:\x203rem;\x0a}\x0a.DocTable-cell\x20{\x0a\x20\x20padding:\x200rem\x200.4375rem;\x0a}\x0a.DocTable-row--highlighted\x20{\x0a\x20\x20background:\x20#f0f0f0;\x0a\x20\x20border-bottom:\x200.0625rem\x20solid\x20#dadce0;\x0a\x20\x20height:\x203rem;\x0a}\x0atextarea\x20{\x0a\x20\x20/*\x20Inherit\x20text\x20color\x20from\x20body\x20avoiding\x20illegible\x20text\x20in\x20the\x20case\x20where\x20the\x0a\x20\x20\x20*\x20user\x20has\x20inverted\x20the\x20browsers\x20custom\x20text\x20and\x20background\x20colors.\x20*/\x0a\x20\x20color:\x20inherit;\x0a}\x0apre,\x0acode\x20{\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0acode\x20{\x0a\x20\x20/*\x20Reduce\x20spacing\x20between\x20words\x20in\x20code\x20inline\x20with\x20text.\x20Monospace\x20font\x0a\x20\x20\x20*\x20spaces\x20tend\x20to\x20be\x20wider\x20than\x20proportional\x20font\x20spaces.\x20*/\x0a\x20\x20word-spacing:\x20-0.3em;\x0a}\x0apre\x20{\x0a\x20\x20line-height:\x201.4;\x0a\x20\x20overflow-x:\x20auto;\x0a}\x0apre\x20.comment\x20{\x0a\x20\x20color:\x20#006600;\x0a}\x0apre\x20.highlight,\x0apre\x20.highlight-comment,\x0apre\x20.selection-highlight,\x0apre\x20.selection-highlight-comment\x20{\x0a\x20\x20background:\x20#ffff00;\x0a}\x0apre\x20.selection,\x0apre\x20.selection-comment\x20{\x0a\x20\x20background:\x20#ff9632;\x0a}\x0apre\x20.ln\x20{\x0a\x20\x20color:\x20#999;\x0a\x20\x20background:\x20#efefef;\x0a}\x0apre\x20ins\x20{\x0a\x20\x20/*\x20For\x20styling\x20highlighted\x20code\x20in\x20examples.\x20*/\x0a\x20\x20color:\x20rgb(0,\x20125,\x20156);\x0a\x20\x20font-weight:\x20bold;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a.ln\x20{\x0a\x20\x20user-select:\x20none;\x0a\x0a\x20\x20/*\x20Ensure\x208\x20characters\x20in\x20the\x20document\x20-\x20which\x20due\x20to\x20floating\x0a\x20\x20\x20*\x20point\x20rendering\x20issues,\x20might\x20have\x20a\x20width\x20of\x20less\x20than\x201\x20each\x20-\x20are\x208\x0a\x20\x20\x20*\x20characters\x20wide,\x20so\x20a\x20tab\x20in\x20the\x209th\x20position\x20indents\x20properly.\x20See\x0a\x20\x20\x20*\x20https://github.com/webcompat/web-bugs/issues/17530#issuecomment-402675091\x0a\x20\x20\x20*\x20for\x20more\x20information.\x20*/\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20width:\x208ch;\x0a}\x0a.search-nav\x20{\x0a\x20\x20margin-left:\x201.25rem;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20column-gap:\x201.25rem;\x0a\x20\x20column-fill:\x20auto;\x0a\x20\x20column-width:\x2014rem;\x0a}\x0a.search-nav\x20.indent\x20{\x0a\x20\x20margin-left:\x201.25rem;\x0a}\x0aa,\x0a.exampleHeading\x20.text,\x0a.expandAll\x20{\x0a\x20\x20color:\x20#007d9c;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0aa:hover,\x0a.exampleHeading\x20.text:hover,\x0a.expandAll:hover\x20{\x0a\x20\x20text-decoration:\x20underline;\x0a}\x0a.article\x20a\x20{\x0a\x20\x20text-decoration:\x20underline;\x0a}\x0a.article\x20.title\x20a\x20{\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a.permalink\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a:hover\x20>\x20.permalink\x20{\x0a\x20\x20display:\x20inline;\x0a}\x0ap,\x0ali\x20{\x0a\x20\x20max-width:\x2050rem;\x0a\x20\x20word-wrap:\x20break-word;\x0a}\x0ap,\x0apre,\x0aul,\x0aol\x20{\x0a\x20\x20margin:\x201.25rem;\x0a}\x0apre\x20{\x0a\x20\x20background:\x20#efefef;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0ah1,\x0ah2,\x0ah3,\x0ah4\x20{\x0a\x20\x20margin:\x201.25rem\x200\x201.25rem;\x0a\x20\x20padding:\x200;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20font-family:\x20'Work\x20Sans',\x20sans-serif;\x0a\x20\x20font-weight:\x20600;\x0a}\x0ah1\x20{\x0a\x20\x20font-size:\x201.75rem;\x0a\x20\x20line-height:\x201;\x0a}\x0ah1\x20.text-muted\x20{\x0a\x20\x20color:\x20#777;\x0a}\x0ah2\x20{\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20background:\x20#e0ebf5;\x0a\x20\x20padding:\x200.5rem;\x0a\x20\x20line-height:\x201.25;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20overflow-wrap:\x20break-word;\x0a}\x0ah2\x20a\x20{\x0a\x20\x20font-weight:\x20bold;\x0a}\x0ah3\x20{\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20line-height:\x201.25;\x0a\x20\x20overflow-wrap:\x20break-word;\x0a}\x0ah3,\x0ah4\x20{\x0a\x20\x20margin:\x201.25rem\x200.3125rem;\x0a}\x0ah4\x20{\x0a\x20\x20font-size:\x201rem;\x0a}\x0ah2\x20>\x20span,\x0ah3\x20>\x20span\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20margin:\x200\x2025px\x200\x200;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20color:\x20#5279c7;\x0a}\x0adl\x20{\x0a\x20\x20margin:\x201.25rem;\x0a}\x0add\x20{\x0a\x20\x20margin:\x200\x200\x200\x201.25rem;\x0a}\x0adl,\x0add\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0adiv#nav\x20table\x20td\x20{\x0a\x20\x20vertical-align:\x20top;\x0a}\x0a.ModTable\x20{\x0a\x20\x20border-collapse:\x20collapse;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20max-width:\x2050rem;\x0a}\x0a.ModTable\x20code\x20{\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.ModTable\x20td,\x0a.ModTable\x20th\x20{\x0a\x20\x20border:\x201px\x20solid\x20#a9a9a9;\x0a\x20\x20padding:\x201rem;\x0a\x20\x20vertical-align:\x20top;\x0a}\x0a.ModTable\x20td\x20p\x20{\x0a\x20\x20margin:\x200\x200\x201rem\x200;\x0a}\x0a.ModTable\x20td\x20p:last-child\x20{\x0a\x20\x20margin-bottom:\x200;\x0a}\x0a#pkg-index\x20h3\x20{\x0a\x20\x20font-size:\x201rem;\x0a}\x0a.pkg-dir\x20{\x0a\x20\x20padding:\x200\x200.625rem;\x0a}\x0a.pkg-dir\x20table\x20{\x0a\x20\x20border-collapse:\x20collapse;\x0a\x20\x20border-spacing:\x200;\x0a}\x0a.pkg-name\x20{\x0a\x20\x20padding-right:\x200.625rem;\x0a}\x0a.alert\x20{\x0a\x20\x20color:\x20#aa0000;\x0a}\x0a#pkg-examples\x20h3\x20{\x0a\x20\x20float:\x20left;\x0a}\x0a#pkg-examples\x20dl\x20{\x0a\x20\x20clear:\x20both;\x0a}\x0a.expandAll\x20{\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20float:\x20left;\x0a\x20\x20margin:\x201.25rem\x200;\x0a}\x0a.Site\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20min-height:\x20100vh;\x0a}\x0a.Site-content\x20{\x0a\x20\x20flex:\x201;\x0a}\x0a#page\x20{\x0a\x20\x20width:\x20100%;\x0a}\x0a#page\x20>\x20.container,\x0a.Header-nav\x20{\x0a\x20\x20text-align:\x20left;\x0a\x20\x20margin-left:\x20auto;\x0a\x20\x20margin-right:\x20auto;\x0a\x20\x20padding:\x200\x201.25rem;\x0a}\x0a#page\x20>\x20.container,\x0a.Header-nav,\x0a.Footer\x20{\x0a\x20\x20max-width:\x2059.38rem;\x0a}\x0a#page.wide\x20>\x20.container,\x0a.Header-nav--wide,\x0a.Footer--wide\x20{\x0a\x20\x20max-width:\x20none;\x0a}\x0adiv#playground\x20.buttons\x20a\x20{\x0a\x20\x20background:\x20#375eab;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#757575;\x0a\x20\x20color:\x20white;\x0a}\x0a/*\x20Style\x20download\x20button\x20on\x20doc/install\x20page\x20*/\x0aa#start\x20{\x0a\x20\x20background:\x20#e0ebf5;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#375eab;\x0a\x20\x20border-radius:\x200.3125rem;\x0a\x20\x20color:\x20#222;\x0a\x20\x20display:\x20block;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20text-align:\x20center;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0aa#start\x20.big\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0aa#start\x20.desc\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20margin-top:\x200.3125rem;\x0a}\x0a.download\x20{\x0a\x20\x20width:\x209.375rem;\x0a}\x0a::-webkit-input-placeholder\x20{\x0a\x20\x20color:\x20#7f7f7f;\x0a\x20\x20opacity:\x201;\x0a}\x0a::placeholder\x20{\x0a\x20\x20color:\x20#7f7f7f;\x0a\x20\x20opacity:\x201;\x0a}\x0a.Header\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20display:\x20flex;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20justify-content:\x20space-between;\x0a\x20\x20padding:\x201.375rem\x200;\x0a}\x0a.Header.is-active\x20{\x0a\x20\x20background-color:\x20#f7f9fa;\x0a}\x0a.Header-banner\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.Header-logo\x20{\x0a\x20\x20height:\x202rem;\x0a\x20\x20width:\x205.125rem;\x0a}\x0a.Header-nav\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20justify-content:\x20space-between;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header-menuButton\x20{\x0a\x20\x20background-color:\x20transparent;\x0a\x20\x20border:\x20none;\x0a\x20\x20box-sizing:\x20content-box;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20height:\x201.313rem;\x0a\x20\x20padding:\x200.375rem;\x0a\x20\x20position:\x20relative;\x0a\x20\x20vertical-align:\x20middle;\x0a\x20\x20width:\x201.313rem;\x0a}\x0a.Header-menuButtonInner\x20{\x0a\x20\x20position:\x20relative;\x0a}\x0a.Header-menuButton::after,\x0a.Header-menuButtonInner,\x0a.Header-menuButtonInner::before,\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20background-color:\x20#3e4042;\x0a\x20\x20height:\x200.1875rem;\x0a\x20\x20transition:\x20all\x20100ms\x20ease-in;\x0a}\x0a.Header-menuButton::after\x20{\x0a\x20\x20opacity:\x200;\x0a\x20\x20top:\x200.9375rem;\x0a}\x0a.Header-menuButton::after,\x0a.Header-menuButtonInner::before,\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20content:\x20'';\x0a\x20\x20display:\x20block;\x0a\x20\x20position:\x20absolute;\x0a\x20\x20width:\x201.313rem;\x0a}\x0a.Header-menuButtonInner::before\x20{\x0a\x20\x20top:\x20-0.375rem;\x0a}\x0a.Header-menuButtonInner::after\x20{\x0a\x20\x20bottom:\x20-0.375rem;\x0a}\x0a.Header.is-active\x20.Header-menuButton::after\x20{\x0a\x20\x20opacity:\x201;\x0a\x20\x20transform:\x20rotate(-45deg);\x0a}\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner\x20{\x0a\x20\x20transform:\x20rotate(45deg);\x0a}\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner::before,\x0a.Header.is-active\x20.Header-menuButton\x20.Header-menuButtonInner::after\x20{\x0a\x20\x20background-color:\x20transparent;\x0a}\x0a.Header-menu\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20display:\x20none;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20list-style:\x20none;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header.is-active\x20.Header-menu\x20{\x0a\x20\x20display:\x20flex;\x0a}\x0a.Header-menuItem:first-of-type\x20{\x0a\x20\x20/*\x20Offset\x20the\x20padding\x20of\x20the\x20inner\x20link,\x20maintaining\x20its\x20click\x20target\x20size,\x0a\x20\x20\x20\x20\x20while\x20still\x20placing\x20the\x20item\x20as\x20if\x20it\x20had\x20no\x20top\x20margin\x20or\x20padding.\x20*/\x0a\x20\x20margin-top:\x20-0.5rem;\x0a}\x0a.Header-menuItem\x20{\x0a\x20\x20display:\x20inline-flex;\x0a}\x0a.Header-menuItem,\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited,\x0a.Header-menuItem--search,\x0a.HeaderSearch\x20{\x0a\x20\x20width:\x20100%;\x0a}\x0a.Header-menuItem,\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited\x20{\x0a\x20\x20color:\x20#3e4042;\x0a\x20\x20text-align:\x20center;\x0a}\x0a.Header-menuItem\x20a:link,\x0a.Header-menuItem\x20a:visited\x20{\x0a\x20\x20padding:\x200.5rem\x200;\x0a}\x0a.Header-menuItem--search\x20{\x0a\x20\x20margin-top:\x200.5rem;\x0a}\x0a.HeaderSearch,\x0a.HeaderSearch-label\x20{\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20position:\x20relative;\x0a}\x0a.HeaderSearch\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#979797;\x0a\x20\x20border-radius:\x200.1875rem;\x0a\x20\x20display:\x20inline-flex;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20position:\x20relative;\x0a}\x0a.HeaderSearch-input\x20{\x0a\x20\x20-webkit-appearance:\x20none;\x0a\x20\x20border:\x20none;\x0a\x20\x20border-radius:\x200;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20display:\x20block;\x0a\x20\x20flex:\x201;\x0a\x20\x20font:\x20inherit;\x0a\x20\x20font-size:\x2016px;\x0a\x20\x20/*\x20Prevents\x20automatic\x20zoom\x20on\x20mobile\x20devices\x20*/\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200.5rem;\x0a}\x0a.HeaderSearch-input::-webkit-search-decoration\x20{\x0a\x20\x20-webkit-appearance:\x20none;\x0a}\x0a.HeaderSearch-input::-moz-ui-invalid\x20{\x0a\x20\x20box-shadow:\x20unset;\x0a}\x0a.HeaderSearch-submit\x20{\x0a\x20\x20background-color:\x20#fff;\x0a\x20\x20border:\x20none;\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200.125rem\x200.5rem\x200\x200.55rem;\x0a\x20\x20transition:\x20background-color\x20200ms;\x0a}\x0a.HeaderSearch:focus-within\x20.HeaderSearch-submit\x20{\x0a\x20\x20background-color:\x20#e5f6fb;\x0a}\x0a.HeaderSearch-icon\x20{\x0a\x20\x20fill:\x20#757575;\x0a\x20\x20transition:\x20fill\x20200ms;\x0a}\x0a.HeaderSearch:focus-within\x20.HeaderSearch-icon\x20{\x0a\x20\x20fill:\x20#007d9c;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2056rem)\x20{\x0a\x20\x20.Header\x20{\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20padding:\x200;\x0a\x20\x20}\x0a\x20\x20.Header-banner\x20{\x0a\x20\x20\x20\x20background-color:\x20#000;\x0a\x20\x20\x20\x20color:\x20#fff;\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20padding:\x201rem;\x0a\x20\x20}\x0a\x20\x20.Header-banner\x20a:link,\x0a\x20\x20.Header-banner\x20a:visited\x20{\x0a\x20\x20\x20\x20color:\x20#fff;\x0a\x20\x20\x20\x20text-decoration:\x20underline;\x0a\x20\x20}\x0a\x20\x20.Header-nav\x20{\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header.is-active\x20{\x0a\x20\x20\x20\x20background-color:\x20#fff;\x0a\x20\x20}\x0a\x20\x20.Header.is-active\x20.Header-menu\x20{\x0a\x20\x20\x20\x20display:\x20block;\x0a\x20\x20}\x0a\x20\x20.Header-menuButton\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a\x20\x20.Header-menu\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20flex-direction:\x20row;\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem:first-of-type\x20{\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem,\x0a\x20\x20.Header-menuItem\x20a:link,\x0a\x20\x20.Header-menuItem\x20a:visited\x20{\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem\x20a:link,\x0a\x20\x20.Header-menuItem\x20a:visited\x20{\x0a\x20\x20\x20\x20padding:\x202rem\x201.5rem;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem\x20a:hover,\x0a\x20\x20.Header-menuItem\x20a:focus\x20{\x0a\x20\x20\x20\x20text-decoration:\x20underline;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem--search,\x0a\x20\x20.HeaderSearch\x20{\x0a\x20\x20\x20\x20width:\x208.75rem;\x0a\x20\x20}\x0a\x20\x20.Header-menuItem--search\x20{\x0a\x20\x20\x20\x20margin-left:\x201.5rem;\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a\x20\x20.HeaderSearch-input\x20{\x0a\x20\x20\x20\x20min-width:\x205.625rem;\x0a\x20\x20}\x0a\x20\x20.HeaderSearch-submit\x20{\x0a\x20\x20\x20\x20padding:\x200.125rem\x200.5rem\x200;\x0a\x20\x20}\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2057.5rem)\x20{\x0a\x20\x20.Header\x20{\x0a\x20\x20\x20\x20font-size:\x201rem;\x0a\x20\x20}\x0a}\x0a.Button,\x0a.Button:link,\x0a.Button:visited\x20{\x0a\x20\x20align-items:\x20center;\x0a\x20\x20background-color:\x20#f7f9fa;\x0a\x20\x20border:\x20none;\x0a\x20\x20border-radius:\x200.1875rem;\x0a\x20\x20box-shadow:\x200\x202px\x205px\x20rgba(0,\x200,\x200,\x200.2);\x0a\x20\x20box-sizing:\x20border-box;\x0a\x20\x20color:\x20#007d9c;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20inline-flex;\x0a\x20\x20font:\x20bold\x200.875rem\x20Roboto,\x20sans-serif;\x0a\x20\x20height:\x202.375rem;\x0a\x20\x20padding:\x200\x200.625rem;\x0a\x20\x20justify-content:\x20center;\x0a\x20\x20min-width:\x204.063rem;\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a.Button:active\x20{\x0a\x20\x20box-shadow:\x200\x201px\x203px\x20rgba(0,\x200,\x200,\x200.2);\x0a}\x0a.Button--primary,\x0a.Button--primary:link,\x0a.Button--primary:visited\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#00add8;\x0a}\x0a.Button--big,\x0a.Button--big:link,\x0a.Button--big:visited\x20{\x0a\x20\x20background-color:\x20#7fd5ea;\x0a\x20\x20border-radius:\x200.3125rem;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20font-size:\x201.5rem;\x0a\x20\x20height:\x204rem;\x0a\x20\x20justify-content:\x20center;\x0a}\x0a.HomeContainer\x20{\x0a\x20\x20align-items:\x20top;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.HomeContainer\x20*\x20{\x0a\x20\x20box-sizing:\x20border-box;\x0a}\x0a.HomeSection\x20{\x0a\x20\x20flex:\x200\x200\x20100%;\x0a\x20\x20margin-bottom:\x202.5rem;\x0a\x20\x20padding:\x200\x201rem;\x0a}\x0a.HomeSection-header\x20{\x0a\x20\x20background:\x20none;\x0a\x20\x20color:\x20#202224;\x0a\x20\x20margin:\x200\x200\x200.625rem\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20font-weight:\x20bold;\x0a}\x0a.Hero-header\x20{\x0a\x20\x20font:\x201.5rem\x20Roboto,\x20sans-serif;\x0a\x20\x20line-height:\x20inherit;\x0a\x20\x20margin:\x200\x200\x201.875rem;\x0a}\x0a.Hero-gopher\x20{\x0a\x20\x20background:\x20url('/lib/godoc/images/home-gopher.png')\x20no-repeat;\x0a\x20\x20background-position:\x20center\x20top;\x0a\x20\x20display:\x20block;\x0a\x20\x20height:\x209.688rem;\x0a\x20\x20max-height:\x20200px;\x0a\x20\x20/*\x20Setting\x20in\x20px\x20to\x20prevent\x20the\x20gopher\x20from\x20blowing\x20up\x20in\x20very\x20high\x20default\x20font-sizes\x20*/\x0a}\x0a.HeroDownloadButton,\x0a.Hero-description\x20{\x0a\x20\x20text-align:\x20center;\x0a}\x0a.HeroDownloadButton,\x0a.HeroDownloadButton:link,\x0a.HeroDownloadButton:visited\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20margin-bottom:\x200.5rem;\x0a}\x0a.HeroDownloadButton-image\x20{\x0a\x20\x20height:\x202rem;\x0a\x20\x20margin-right:\x202rem;\x0a\x20\x20width:\x202rem;\x0a}\x0a.Hero-description\x20{\x0a\x20\x20color:\x20#616161;\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20margin:\x200;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2057.1875rem)\x20{\x0a\x20\x20.HomeSection\x20{\x0a\x20\x20\x20\x20flex:\x200\x200\x2026.875rem;\x0a\x20\x20\x20\x20padding:\x200;\x0a\x20\x20}\x0a\x20\x20.Hero,\x0a\x20\x20.Playground\x20{\x0a\x20\x20\x20\x20margin-top:\x201rem;\x0a\x20\x20}\x0a}\x0a.Playground-headerContainer\x20{\x0a\x20\x20align-items:\x20baseline;\x0a\x20\x20display:\x20flex;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.Playground-popout\x20{\x0a\x20\x20background:\x20url('/lib/godoc/images/play-link.svg')\x20no-repeat;\x0a\x20\x20background-position:\x20right\x20center;\x0a\x20\x20cursor:\x20pointer;\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201rem;\x0a\x20\x20padding:\x200\x201.688rem;\x0a}\x0a.Playground-input,\x0a.Playground-output\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20margin:\x200;\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a.Playground-inputContainer\x20{\x0a\x20\x20border-top-left-radius:\x200.3125rem;\x0a\x20\x20border-top-right-radius:\x200.3125rem;\x0a\x20\x20overflow:\x20hidden;\x0a\x20\x20height:\x2011rem;\x0a}\x0a.Playground-input\x20{\x0a\x20\x20width:\x20100%;\x0a\x20\x20height:\x20100%;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x20none;\x0a\x20\x20resize:\x20none;\x0a\x20\x20padding:\x200.625rem;\x0a}\x0a.Playground-outputContainer\x20{\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a\x20\x20border-top:\x20none\x20!important;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20height:\x205rem;\x0a\x20\x20margin-bottom:\x201rem;\x0a\x20\x20overflow:\x20auto;\x0a}\x0a.Playground-output\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20border-radius:\x200;\x0a}\x0a.Playground-inputContainer,\x0a.Playground-input,\x0a.Playground-outputContainer,\x0a.Playground-output\x20{\x0a\x20\x20background:\x20#f7f9fa;\x0a\x20\x20color:\x20#202224;\x0a}\x0a.Playground-inputContainer,\x0a.Playground-outputContainer\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#c0c2c3;\x0a}\x0a.Playground-controls\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-wrap:\x20wrap;\x0a}\x0a.Playground-buttons\x20{\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex:\x201;\x0a\x20\x20flex-wrap:\x20nowrap;\x0a\x20\x20justify-content:\x20space-between;\x0a}\x0a.Playground-selectExample\x20{\x0a\x20\x20background-color:\x20white;\x0a\x20\x20border-radius:\x203px;\x0a\x20\x20border:\x200.0625rem\x20solid\x20#979797;\x0a\x20\x20color:\x20inherit;\x0a\x20\x20font-family:\x20inherit;\x0a\x20\x20font-size:\x2016px;\x0a\x20\x20/*\x20Prevents\x20automatic\x20zoom\x20on\x20mobile\x20devices\x20*/\x0a\x20\x20height:\x202.375rem;\x0a\x20\x20margin:\x200\x200\x200.5rem\x200;\x0a\x20\x20width:\x20100%;\x0a}\x0a.Playground-secondaryButtons\x20{\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.Playground-secondaryButtons\x20.Button:not(:first-child)\x20{\x0a\x20\x20margin-left:\x200.4375rem;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2027.8125rem)\x20{\x0a\x20\x20.Playground-outputContainer\x20{\x0a\x20\x20\x20\x20margin-bottom:\x201.688rem;\x0a\x20\x20}\x0a\x20\x20.Playground-controls\x20{\x0a\x20\x20\x20\x20flex-wrap:\x20nowrap;\x0a\x20\x20}\x0a\x20\x20.Playground-selectExample\x20{\x0a\x20\x20\x20\x20margin:\x200\x200.4375rem\x200\x200;\x0a\x20\x20\x20\x20width:\x20auto;\x0a\x20\x20}\x0a}\x0a.Blog-title\x20{\x0a\x20\x20display:\x20block;\x0a\x20\x20font-size:\x201.25rem;\x0a\x20\x20font-weight:\x20normal;\x0a\x20\x20margin:\x200;\x0a}\x0a.Blog-title,\x0a.Blog-extract,\x0a.Blog-when\x20{\x0a\x20\x20margin-bottom:\x200.625rem;\x0a}\x0a.Blog-when\x20{\x0a\x20\x20color:\x20#666;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0a.Blog-footer\x20{\x0a\x20\x20text-align:\x20right;\x0a}\x0a@supports\x20(--c:\x200)\x20{\x0a\x20\x20[style*='--aspect-ratio-padding:']\x20{\x0a\x20\x20\x20\x20position:\x20relative;\x0a\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20padding-top:\x20var(--aspect-ratio-padding);\x0a\x20\x20}\x0a\x20\x20[style*='--aspect-ratio-padding:']\x20>\x20*\x20{\x0a\x20\x20\x20\x20position:\x20absolute;\x0a\x20\x20\x20\x20top:\x200;\x0a\x20\x20\x20\x20left:\x200;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20height:\x20100%;\x0a\x20\x20}\x0a}\x0a.Footer\x20{\x0a\x20\x20margin:\x202rem\x20auto\x200;\x0a\x20\x20padding:\x201rem\x201.25rem;\x0a\x20\x20position:\x20relative;\x0a\x20\x20text-align:\x20right;\x0a}\x0a.Footer-gopher\x20{\x0a\x20\x20bottom:\x200;\x0a\x20\x20left:\x201.25rem;\x0a\x20\x20position:\x20absolute;\x0a\x20\x20width:\x205rem;\x0a}\x0a.Footer-links\x20{\x0a\x20\x20flex:\x201;\x0a\x20\x20list-style:\x20none;\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a}\x0a.Footer-link\x20{\x0a\x20\x20font-size:\x200.875rem;\x0a\x20\x20white-space:\x20nowrap;\x0a}\x0a.Footer-link\x20+\x20.Footer-link\x20{\x0a\x20\x20margin-top:\x200.5rem;\x0a}\x0a.Footer-supportedBy\x20{\x0a\x20\x20color:\x20#6e7072;\x0a\x20\x20display:\x20inline-block;\x0a\x20\x20font:\x200.875rem\x20'Product\x20Sans',\x20'Roboto',\x20'sans-serif';\x0a\x20\x20margin-top:\x201rem;\x0a}\x0a.Footer-supportedBy:hover\x20{\x0a\x20\x20text-decoration:\x20none;\x0a}\x0a@media\x20only\x20screen\x20and\x20(min-width:\x2050rem)\x20{\x0a\x20\x20.Footer\x20{\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20margin:\x205rem\x20auto\x200;\x0a\x20\x20}\x0a\x20\x20.Footer-links\x20{\x0a\x20\x20\x20\x20padding-left:\x206.25rem;\x0a\x20\x20\x20\x20text-align:\x20left;\x0a\x20\x20}\x0a\x20\x20.Footer-link\x20{\x0a\x20\x20\x20\x20display:\x20inline;\x0a\x20\x20}\x0a\x20\x20.Footer-link\x20+\x20.Footer-link\x20{\x0a\x20\x20\x20\x20border-left:\x200.0625rem\x20solid\x20#3e4042;\x0a\x20\x20\x20\x20margin-left:\x200.75rem;\x0a\x20\x20\x20\x20padding-left:\x200.75rem;\x0a\x20\x20}\x0a\x20\x20.Footer-supportedBy\x20{\x0a\x20\x20\x20\x20margin-top:\x200;\x0a\x20\x20}\x0a}\x0a.toggleButton\x20{\x0a\x20\x20cursor:\x20pointer;\x0a}\x0a.toggle\x20>\x20.collapsed\x20{\x0a\x20\x20display:\x20block;\x0a}\x0a.toggle\x20>\x20.expanded\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.toggleVisible\x20>\x20.collapsed\x20{\x0a\x20\x20display:\x20none;\x0a}\x0a.toggleVisible\x20>\x20.expanded\x20{\x0a\x20\x20display:\x20block;\x0a}\x0atable.codetable\x20{\x0a\x20\x20margin-left:\x20auto;\x0a\x20\x20margin-right:\x20auto;\x0a\x20\x20border-style:\x20none;\x0a}\x0atable.codetable\x20td\x20{\x0a\x20\x20padding-right:\x200.625rem;\x0a}\x0ahr\x20{\x0a\x20\x20border-style:\x20none;\x0a\x20\x20border-top:\x200.0625rem\x20solid\x20black;\x0a}\x0aimg.gopher\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20margin-left:\x200.625rem;\x0a\x20\x20margin-bottom:\x200.625rem;\x0a\x20\x20z-index:\x20-1;\x0a}\x0ah2\x20{\x0a\x20\x20clear:\x20right;\x0a}\x0adiv.play\x20{\x0a\x20\x20padding:\x200\x201.25rem\x202.5rem\x201.25rem;\x0a}\x0adiv.play\x20pre,\x0adiv.play\x20textarea,\x0adiv.play\x20.lines\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20margin:\x200;\x0a\x20\x20font-family:\x20Menlo,\x20monospace;\x0a\x20\x20font-size:\x200.875rem;\x0a}\x0adiv.play\x20.input\x20{\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20margin-top:\x200.625rem;\x0a\x0a\x20\x20border-top-left-radius:\x200.3125rem;\x0a\x20\x20border-top-right-radius:\x200.3125rem;\x0a\x0a\x20\x20overflow:\x20hidden;\x0a}\x0adiv.play\x20.input\x20textarea\x20{\x0a\x20\x20width:\x20100%;\x0a\x20\x20height:\x20100%;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x20none;\x0a\x20\x20resize:\x20none;\x0a\x0a\x20\x20overflow:\x20hidden;\x0a}\x0adiv#playground\x20.input\x20textarea\x20{\x0a\x20\x20overflow:\x20auto;\x0a\x20\x20resize:\x20auto;\x0a}\x0adiv.play\x20.output\x20{\x0a\x20\x20border-top:\x20none\x20!important;\x0a\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20max-height:\x2012.5rem;\x0a\x20\x20overflow:\x20auto;\x0a\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a}\x0adiv.play\x20.output\x20pre\x20{\x0a\x20\x20padding:\x200;\x0a\x20\x20border-radius:\x200;\x0a}\x0adiv.play\x20.input,\x0adiv.play\x20.input\x20textarea,\x0adiv.play\x20.output,\x0adiv.play\x20.output\x20pre\x20{\x0a\x20\x20background:\x20#f7f9fa;\x0a\x20\x20color:\x20#202224;\x0a}\x0adiv.play\x20.input,\x0adiv.play\x20.output\x20{\x0a\x20\x20border:\x200.0625rem\x20solid\x20#c0c2c3;\x0a}\x0adiv.play\x20.buttons\x20{\x0a\x20\x20float:\x20right;\x0a\x20\x20padding:\x200.625rem\x200;\x0a\x20\x20text-align:\x20right;\x0a}\x0adiv.play\x20.buttons\x20.Button\x20{\x0a\x20\x20margin-left:\x200.3125rem;\x0a}\x0a.output\x20.stderr\x20{\x0a\x20\x20color:\x20#933;\x0a}\x0a.output\x20.system\x20{\x0a\x20\x20color:\x20#999;\x0a}\x0a/*\x20drop-down\x20playground\x20*/\x0adiv#playground\x20{\x0a\x20\x20/*\x20start\x20hidden;\x20revealed\x20by\x20javascript\x20*/\x0a\x20\x20display:\x20none;\x0a}\x0adiv#playground\x20{\x0a\x20\x20position:\x20absolute;\x0a\x20\x20top:\x203.938rem;\x0a\x20\x20right:\x201.25rem;\x0a\x20\x20padding:\x200\x200.625rem\x200.625rem\x200.625rem;\x0a\x20\x20z-index:\x201;\x0a\x20\x20text-align:\x20left;\x0a\x20\x20background:\x20#e0ebf5;\x0a\x0a\x20\x20border:\x200.0625rem\x20solid\x20#b0bbc5;\x0a\x20\x20border-top:\x20none;\x0a\x0a\x20\x20border-bottom-left-radius:\x200.3125rem;\x0a\x20\x20border-bottom-right-radius:\x200.3125rem;\x0a}\x0adiv#playground\x20.code\x20{\x0a\x20\x20width:\x2032.5rem;\x0a\x20\x20height:\x2012.5rem;\x0a}\x0adiv#playground\x20.output\x20{\x0a\x20\x20height:\x206.25rem;\x0a}\x0a/*\x20Inline\x20runnable\x20snippets\x20(play.js/initPlayground)\x20*/\x0a#content\x20.code\x20pre,\x0a#content\x20.playground\x20pre,\x0a#content\x20.output\x20pre\x20{\x0a\x20\x20margin:\x200;\x0a\x20\x20padding:\x200;\x0a\x20\x20background:\x20none;\x0a\x20\x20border:\x20none;\x0a\x20\x20outline:\x200\x20solid\x20transparent;\x0a\x20\x20overflow:\x20auto;\x0a}\x0a#content\x20.playground\x20.number,\x0a#content\x20.code\x20.number\x20{\x0a\x20\x20color:\x20#999;\x0a}\x0a#content\x20.code,\x0a#content\x20.playground,\x0a#content\x20.output\x20{\x0a\x20\x20width:\x20auto;\x0a\x20\x20margin:\x201.25rem;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0a#content\x20.code,\x0a#content\x20.playground\x20{\x0a\x20\x20background:\x20#e9e9e9;\x0a}\x0a#content\x20.output\x20{\x0a\x20\x20background:\x20#202020;\x0a}\x0a#content\x20.output\x20.stdout,\x0a#content\x20.output\x20pre\x20{\x0a\x20\x20color:\x20#e6e6e6;\x0a}\x0a#content\x20.output\x20.stderr,\x0a#content\x20.output\x20.error\x20{\x0a\x20\x20color:\x20rgb(244,\x2074,\x2063);\x0a}\x0a#content\x20.output\x20.system,\x0a#content\x20.output\x20.exit\x20{\x0a\x20\x20color:\x20rgb(255,\x20209,\x2077);\x0a}\x0a#content\x20.buttons\x20{\x0a\x20\x20position:\x20relative;\x0a\x20\x20float:\x20right;\x0a\x20\x20top:\x20-3.125rem;\x0a\x20\x20right:\x201.875rem;\x0a}\x0a#content\x20.output\x20.buttons\x20{\x0a\x20\x20top:\x20-3.75rem;\x0a\x20\x20right:\x200;\x0a\x20\x20height:\x200;\x0a}\x0a#content\x20.buttons\x20.kill\x20{\x0a\x20\x20display:\x20none;\x0a\x20\x20visibility:\x20hidden;\x0a}\x0aa.error\x20{\x0a\x20\x20font-weight:\x20bold;\x0a\x20\x20color:\x20white;\x0a\x20\x20background-color:\x20darkred;\x0a\x20\x20border-bottom-left-radius:\x200.25rem;\x0a\x20\x20border-bottom-right-radius:\x200.25rem;\x0a\x20\x20border-top-left-radius:\x200.25rem;\x0a\x20\x20border-top-right-radius:\x200.25rem;\x0a\x20\x20padding:\x200.125rem\x200.25rem\x200.125rem\x200.25rem;\x0a\x20\x20/*\x20TRBL\x20*/\x0a}\x0a.downloading\x20{\x0a\x20\x20background:\x20#f9f9be;\x0a\x20\x20padding:\x200.625rem;\x0a\x20\x20text-align:\x20center;\x0a\x20\x20border-radius:\x200.3125rem;\x0a}\x0a@media\x20(max-width:\x2043.75em)\x20{\x0a\x20\x20body\x20{\x0a\x20\x20\x20\x20font-size:\x200.9375rem;\x0a\x20\x20}\x0a\x20\x20div#playground\x20{\x0a\x20\x20\x20\x20left:\x200;\x0a\x20\x20\x20\x20right:\x200;\x0a\x20\x20}\x0a\x20\x20pre,\x0a\x20\x20code\x20{\x0a\x20\x20\x20\x20font-size:\x200.866rem;\x0a\x20\x20}\x0a\x20\x20#page\x20>\x20.container,\x0a\x20\x20.Header-nav\x20{\x0a\x20\x20\x20\x20padding:\x200\x200.625rem;\x0a\x20\x20}\x0a\x20\x20p,\x0a\x20\x20pre,\x0a\x20\x20ul,\x0a\x20\x20ol\x20{\x0a\x20\x20\x20\x20margin:\x200.625rem;\x0a\x20\x20}\x0a\x20\x20.pkg-synopsis\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a\x20\x20img.gopher\x20{\x0a\x20\x20\x20\x20display:\x20none;\x0a\x20\x20}\x0a}\x0a@media\x20print\x20{\x0a\x20\x20pre\x20{\x0a\x20\x20\x20\x20background:\x20#fff;\x0a\x20\x20\x20\x20border:\x200.0625rem\x20solid\x20#bbb;\x0a\x20\x20\x20\x20white-space:\x20pre-wrap;\x0a\x20\x20\x20\x20page-break-inside:\x20avoid;\x0a\x20\x20}\x0a}",
 
 	"doc/mod.html": "<!--{\x0a\x20\x20\"Title\":\x20\"Go\x20Modules\x20Reference\",\x0a\x20\x20\"Subtitle\":\x20\"Version\x20of\x20Feb\x205,\x202019\",\x0a\x20\x20\"Path\":\x20\"/ref/mod\"\x0a}-->\x0a<!--\x20TODO(jayconrod):\x20use\x20<dfn>\x20tags\x20where\x20meaningful.\x0aCurrently,\x20*term*\x20is\x20used\x20instead,\x20which\x20renders\x20to\x20<em>term</em>.\x20-->\x0a<h2\x20id=\"introduction\">Introduction</h2>\x0a<h2\x20id=\"modules-overview\">Modules,\x20packages,\x20and\x20versions</h2>\x0a<p>A\x20<a\x20href=\"#glos-module\"><em>module</em></a>\x20is\x20a\x20collection\x20of\x20packages\x20that\x20are\x20released,\x0aversioned,\x20and\x20distributed\x20together.\x20A\x20module\x20is\x20identified\x20by\x20a\x20<a\x20href=\"#glos-module-path\"><em>module\x0apath</em></a>,\x20which\x20is\x20declared\x20in\x20a\x20<a\x20href=\"#go.mod-files\"><code>go.mod</code>\x0afile</a>,\x20together\x20with\x20information\x20about\x20the\x20module's\x0adependencies.\x20The\x20<a\x20href=\"#glos-module-root-directory\"><em>module\x20root\x20directory</em></a>\x20is\x20the\x0adirectory\x20that\x20contains\x20the\x20<code>go.mod</code>\x20file.\x20The\x20<a\x20href=\"#glos-main-module\"><em>main\x0amodule</em></a>\x20is\x20the\x20module\x20containing\x20the\x20directory\x20where\x20the\x0a<code>go</code>\x20command\x20is\x20invoked.</p>\x0a<p>Each\x20<a\x20href=\"#glos-package\"><em>package</em></a>\x20within\x20a\x20module\x20is\x20a\x20collection\x20of\x20source\x20files\x0ain\x20the\x20same\x20directory\x20that\x20are\x20compiled\x20together.\x20A\x20<a\x20href=\"#glos-package-path\"><em>package\x0apath</em></a>\x20is\x20the\x20module\x20path\x20joined\x20with\x20the\x20subdirectory\x0acontaining\x20the\x20package\x20(relative\x20to\x20the\x20module\x20root).\x20For\x20example,\x20the\x20module\x0a<code>&quot;golang.org/x/net&quot;</code>\x20contains\x20a\x20package\x20in\x20the\x20directory\x20<code>&quot;html&quot;</code>.\x20That\x0apackage's\x20path\x20is\x20<code>&quot;golang.org/x/net/html&quot;</code>.</p>\x0a<h3\x20id=\"module-path\">Module\x20paths</h3>\x0a<p>A\x20<a\x20href=\"#glos-module-path\"><em>module\x20path</em></a>\x20is\x20the\x20canonical\x20name\x20for\x20a\x20module,\x0adeclared\x20with\x20the\x20<a\x20href=\"#go.mod-module\"><code>module</code>\x20directive</a>\x20in\x20the\x20module's\x0a<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x20file</a>.\x20A\x20module's\x20path\x20is\x20the\x20prefix\x20for\x20package\x0apaths\x20within\x20the\x20module.</p>\x0a<p>A\x20module\x20path\x20should\x20describe\x20both\x20what\x20the\x20module\x20does\x20and\x20where\x20to\x20find\x20it.\x0aTypically,\x20a\x20module\x20path\x20consists\x20of\x20a\x20repository\x20root\x20path,\x20a\x20directory\x20within\x0athe\x20repository\x20(usually\x20empty),\x20and\x20a\x20major\x20version\x20suffix\x20(only\x20for\x20major\x0aversion\x202\x20or\x20higher).</p>\x0a<ul>\x0a<li>The\x20<dfn>repository\x20root\x20path</dfn>\x20is\x20the\x20portion\x20of\x20the\x20module\x20path\x20that\x0acorresponds\x20to\x20the\x20root\x20directory\x20of\x20the\x20version\x20control\x20repository\x20where\x20the\x0amodule\x20is\x20developed.\x20Most\x20modules\x20are\x20defined\x20in\x20their\x20repository's\x20root\x0adirectory,\x20so\x20this\x20is\x20usually\x20the\x20entire\x20path.\x20For\x20example,\x0a<code>golang.org/x/net</code>\x20is\x20the\x20repository\x20root\x20path\x20for\x20the\x20module\x20of\x20the\x20same\x0aname.\x20See\x20<a\x20href=\"#vcs-find\">Finding\x20a\x20repository\x20for\x20a\x20module\x20path</a>\x20for\x20information\x0aon\x20how\x20the\x20<code>go</code>\x20command\x20locates\x20a\x20repository\x20using\x20HTTP\x20requests\x20derived\x0afrom\x20a\x20module\x20path.</li>\x0a<li>If\x20the\x20module\x20is\x20not\x20defined\x20in\x20the\x20repository's\x20root\x20directory,\x20the\x0a<dfn>module\x20subdirectory</dfn>\x20is\x20the\x20part\x20of\x20the\x20module\x20path\x20that\x20names\x20the\x0adirectory,\x20not\x20including\x20the\x20major\x20version\x20suffix.\x20This\x20also\x20serves\x20as\x20a\x0aprefix\x20for\x20semantic\x20version\x20tags.\x20For\x20example,\x20the\x20module\x0a<code>golang.org/x/tools/gopls</code>\x20is\x20in\x20the\x20<code>gopls</code>\x20subdirectory\x20of\x20the\x20repository\x0awith\x20root\x20path\x20<code>golang.org/x/tools</code>,\x20so\x20it\x20has\x20the\x20module\x20subdirectory\x0a<code>gopls</code>.\x20See\x20<a\x20href=\"#vcs-version\">Mapping\x20versions\x20to\x20commits</a>\x20and\x20<a\x20href=\"#vcs-dir\">Module\x0adirectories\x20within\x20a\x20repository</a>.</li>\x0a<li>If\x20the\x20module\x20is\x20released\x20at\x20major\x20version\x202\x20or\x20higher,\x20the\x20module\x20path\x20must\x0aend\x20with\x20a\x20<a\x20href=\"#major-version-suffixes\"><em>major\x20version\x20suffix</em></a>\x20like\x0a<code>/v2</code>.\x20This\x20may\x20or\x20may\x20not\x20be\x20part\x20of\x20the\x20subdirectory\x20name.\x20For\x20example,\x20the\x0amodule\x20with\x20path\x20<code>golang.org/x/repo/sub/v2</code>\x20could\x20be\x20in\x20the\x20<code>/sub</code>\x20or\x0a<code>/sub/v2</code>\x20subdirectory\x20of\x20the\x20repository\x20<code>golang.org/x/repo</code>.</li>\x0a</ul>\x0a<p>If\x20a\x20module\x20might\x20be\x20depended\x20on\x20by\x20other\x20modules,\x20these\x20rules\x20must\x20be\x20followed\x0aso\x20that\x20the\x20<code>go</code>\x20command\x20can\x20find\x20and\x20download\x20the\x20module.\x20There\x20are\x20also\x0aseveral\x20<a\x20href=\"#go.mod-ident\">lexical\x20restrictions</a>\x20on\x20characters\x20allowed\x20in\x0amodule\x20paths.</p>\x0a<h3\x20id=\"versions\">Versions</h3>\x0a<p>A\x20<a\x20href=\"#glos-version\"><em>version</em></a>\x20identifies\x20an\x20immutable\x20snapshot\x20of\x20a\x20module,\x20which\x0amay\x20be\x20either\x20a\x20<a\x20href=\"#glos-release-version\">release</a>\x20or\x20a\x0a<a\x20href=\"#glos-pre-release-version\">pre-release</a>.\x20Each\x20version\x20starts\x20with\x20the\x20letter\x0a<code>v</code>,\x20followed\x20by\x20a\x20semantic\x20version.\x20See\x20<a\x20href=\"https://semver.org/spec/v2.0.0.html\">Semantic\x20Versioning\x0a2.0.0</a>\x20for\x20details\x20on\x20how\x20versions\x20are\x0aformatted,\x20interpreted,\x20and\x20compared.</p>\x0a<p>To\x20summarize,\x20a\x20semantic\x20version\x20consists\x20of\x20three\x20non-negative\x20integers\x20(the\x0amajor,\x20minor,\x20and\x20patch\x20versions,\x20from\x20left\x20to\x20right)\x20separated\x20by\x20dots.\x20The\x0apatch\x20version\x20may\x20be\x20followed\x20by\x20an\x20optional\x20pre-release\x20string\x20starting\x20with\x20a\x0ahyphen.\x20The\x20pre-release\x20string\x20or\x20patch\x20version\x20may\x20be\x20followed\x20by\x20a\x20build\x0ametadata\x20string\x20starting\x20with\x20a\x20plus.\x20For\x20example,\x20<code>v0.0.0</code>,\x20<code>v1.12.134</code>,\x0a<code>v8.0.5-pre</code>,\x20and\x20<code>v2.0.9+meta</code>\x20are\x20valid\x20versions.</p>\x0a<p>Each\x20part\x20of\x20a\x20version\x20indicates\x20whether\x20the\x20version\x20is\x20stable\x20and\x20whether\x20it\x20is\x0acompatible\x20with\x20previous\x20versions.</p>\x0a<ul>\x0a<li>The\x20<a\x20href=\"#glos-major-version\">major\x20version</a>\x20must\x20be\x20incremented\x20and\x20the\x20minor\x0aand\x20patch\x20versions\x20must\x20be\x20set\x20to\x20zero\x20after\x20a\x20backwards\x20incompatible\x20change\x0ais\x20made\x20to\x20the\x20module's\x20public\x20interface\x20or\x20documented\x20functionality,\x20for\x0aexample,\x20after\x20a\x20package\x20is\x20removed.</li>\x0a<li>The\x20<a\x20href=\"#glos-minor-version\">minor\x20version</a>\x20must\x20be\x20incremented\x20and\x20the\x20patch\x0aversion\x20set\x20to\x20zero\x20after\x20a\x20backwards\x20compatible\x20change,\x20for\x20example,\x20after\x20a\x0anew\x20function\x20is\x20added.</li>\x0a<li>The\x20<a\x20href=\"#glos-patch-version\">patch\x20version</a>\x20must\x20be\x20incremented\x20after\x20a\x20change\x0athat\x20does\x20not\x20affect\x20the\x20module's\x20public\x20interface,\x20such\x20as\x20a\x20bug\x20fix\x20or\x0aoptimization.</li>\x0a<li>The\x20pre-release\x20suffix\x20indicates\x20a\x20version\x20is\x20a\x0a<a\x20href=\"#glos-pre-release-version\">pre-release</a>.\x20Pre-release\x20versions\x20sort\x20before\x0athe\x20corresponding\x20release\x20versions.\x20For\x20example,\x20<code>v1.2.3-pre</code>\x20comes\x20before\x0a<code>v1.2.3</code>.</li>\x0a<li>The\x20build\x20metadata\x20suffix\x20is\x20ignored\x20for\x20the\x20purpose\x20of\x20comparing\x20versions.\x0aTags\x20with\x20build\x20metadata\x20are\x20ignored\x20in\x20version\x20control\x20repositories,\x20but\x0abuild\x20metadata\x20is\x20preserved\x20in\x20versions\x20specified\x20in\x20<code>go.mod</code>\x20files.\x20The\x0asuffix\x20<code>+incompatible</code>\x20denotes\x20a\x20version\x20released\x20before\x20migrating\x20to\x20modules\x0aversion\x20major\x20version\x202\x20or\x20later\x20(see\x20<a\x20href=\"#non-module-compat\">Compatibility\x20with\x20non-module\x0arepositories</a>.</li>\x0a</ul>\x0a<p>A\x20version\x20is\x20considered\x20unstable\x20if\x20its\x20major\x20version\x20is\x200\x20or\x20it\x20has\x20a\x0apre-release\x20suffix.\x20Unstable\x20versions\x20are\x20not\x20subject\x20to\x20compatibility\x0arequirements.\x20For\x20example,\x20<code>v0.2.0</code>\x20may\x20not\x20be\x20compatible\x20with\x20<code>v0.1.0</code>,\x20and\x0a<code>v1.5.0-beta</code>\x20may\x20not\x20be\x20compatible\x20with\x20<code>v1.5.0</code>.</p>\x0a<p>Go\x20may\x20access\x20modules\x20in\x20version\x20control\x20systems\x20using\x20tags,\x20branches,\x20or\x0arevisions\x20that\x20don't\x20follow\x20these\x20conventions.\x20However,\x20within\x20the\x20main\x20module,\x0athe\x20<code>go</code>\x20command\x20will\x20automatically\x20convert\x20revision\x20names\x20that\x20don't\x20follow\x0athis\x20standard\x20into\x20canonical\x20versions.\x20The\x20<code>go</code>\x20command\x20will\x20also\x20remove\x20build\x0ametadata\x20suffixes\x20(except\x20for\x20<code>+incompatible</code>)\x20as\x20part\x20of\x20this\x20process.\x20This\x20may\x0aresult\x20in\x20a\x20<a\x20href=\"#glos-pseudo-version\"><em>pseudo-version</em></a>,\x20a\x20pre-release\x20version\x20that\x0aencodes\x20a\x20revision\x20identifier\x20(such\x20as\x20a\x20Git\x20commit\x20hash)\x20and\x20a\x20timestamp\x20from\x20a\x0aversion\x20control\x20system.\x20For\x20example,\x20the\x20command\x20<code>go\x20get\x20-d\x20golang.org/x/net@daa7c041</code>\x20will\x20convert\x20the\x20commit\x20hash\x20<code>daa7c041</code>\x20into\x20the\x0apseudo-version\x20<code>v0.0.0-20191109021931-daa7c04131f5</code>.\x20Canonical\x20versions\x20are\x0arequired\x20outside\x20the\x20main\x20module,\x20and\x20the\x20<code>go</code>\x20command\x20will\x20report\x20an\x20error\x20if\x20a\x0anon-canonical\x20version\x20like\x20<code>master</code>\x20appears\x20in\x20a\x20<code>go.mod</code>\x20file.</p>\x0a<h3\x20id=\"pseudo-versions\">Pseudo-versions</h3>\x0a<p>A\x20<dfn>pseudo-version</dfn>\x20is\x20a\x20specially\x20formatted\x0a<a\x20href=\"#glos-pre-release-version\">pre-release</a>\x20<a\x20href=\"#glos-version\">version</a>\x20that\x20encodes\x0ainformation\x20about\x20a\x20specific\x20revision\x20in\x20a\x20version\x20control\x20repository.\x20For\x0aexample,\x20<code>v0.0.0-20191109021931-daa7c04131f5</code>\x20is\x20a\x20pseudo-version.</p>\x0a<p>Pseudo-versions\x20may\x20refer\x20to\x20revisions\x20for\x20which\x20no\x20<a\x20href=\"#glos-semantic-version-tag\">semantic\x20version\x0atags</a>\x20are\x20available.\x20They\x20may\x20be\x20used\x20to\x20test\x0acommits\x20before\x20creating\x20version\x20tags,\x20for\x20example,\x20on\x20a\x20development\x20branch.</p>\x0a<p>Each\x20pseudo-version\x20has\x20three\x20parts:</p>\x0a<ul>\x0a<li>A\x20base\x20version\x20prefix\x20(<code>vX.0.0</code>\x20or\x20<code>vX.Y.Z-0</code>),\x20which\x20is\x20either\x20derived\x20from\x20a\x0asemantic\x20version\x20tag\x20that\x20precedes\x20the\x20revision\x20or\x20<code>vX.0.0</code>\x20if\x20there\x20is\x20no\x0asuch\x20tag.</li>\x0a<li>A\x20timestamp\x20(<code>yymmddhhmmss</code>),\x20which\x20is\x20the\x20UTC\x20time\x20the\x20revision\x20was\x20created.\x0aIn\x20Git,\x20this\x20is\x20the\x20commit\x20time,\x20not\x20the\x20author\x20time.</li>\x0a<li>A\x20revision\x20identifier\x20(<code>abcdefabcdef</code>),\x20which\x20is\x20a\x2012-character\x20prefix\x20of\x20the\x0acommit\x20hash,\x20or\x20in\x20Subversion,\x20a\x20zero-padded\x20revision\x20number.</li>\x0a</ul>\x0a<p>Each\x20pseudo-version\x20may\x20be\x20in\x20one\x20of\x20three\x20forms,\x20depending\x20on\x20the\x20base\x20version.\x0aThese\x20forms\x20ensure\x20that\x20a\x20pseudo-version\x20compares\x20higher\x20than\x20its\x20base\x20version,\x0abut\x20lower\x20than\x20the\x20next\x20tagged\x20version.</p>\x0a<ul>\x0a<li><code>vX.0.0-yyyymmddhhmmss-abcdefabcdef</code>\x20is\x20used\x20when\x20there\x20is\x20no\x20known\x20base\x0aversion.\x20As\x20with\x20all\x20versions,\x20the\x20major\x20version\x20<code>X</code>\x20must\x20match\x20the\x20module's\x0a<a\x20href=\"#glos-major-version-suffix\">major\x20version\x20suffix</a>.</li>\x0a<li><code>vX.Y.Z-pre.0.yyyymmddhhmmss-abcdefabcdef</code>\x20is\x20used\x20when\x20the\x20base\x20version\x20is\x0aa\x20pre-release\x20version\x20like\x20<code>vX.Y.Z-pre</code>.</li>\x0a<li><code>vX.Y.(Z+1)-0.yyyymmddhhmmss-abcdefabcdef</code>\x20is\x20used\x20when\x20the\x20base\x20version\x20is\x0aa\x20release\x20version\x20like\x20<code>vX.Y.Z</code>.\x20For\x20example,\x20if\x20the\x20base\x20version\x20is\x0a<code>v1.2.3</code>,\x20a\x20pseudo-version\x20might\x20be\x20<code>v1.2.4-0.20191109021931-daa7c04131f5</code>.</li>\x0a</ul>\x0a<p>More\x20than\x20one\x20pseudo-version\x20may\x20refer\x20to\x20the\x20same\x20commit\x20by\x20using\x20different\x0abase\x20versions.\x20This\x20happens\x20naturally\x20when\x20a\x20lower\x20version\x20is\x20tagged\x20after\x20a\x0apseudo-version\x20is\x20written.</p>\x0a<p>These\x20forms\x20give\x20pseudo-versions\x20two\x20useful\x20properties:</p>\x0a<ul>\x0a<li>Pseudo-versions\x20with\x20known\x20base\x20versions\x20sort\x20higher\x20than\x20those\x20versions\x20but\x0alower\x20than\x20other\x20pre-release\x20for\x20later\x20versions.</li>\x0a<li>Pseudo-versions\x20with\x20the\x20same\x20base\x20version\x20prefix\x20sort\x20chronologically.</li>\x0a</ul>\x0a<p>The\x20<code>go</code>\x20command\x20performs\x20several\x20checks\x20to\x20ensure\x20that\x20module\x20authors\x20have\x0acontrol\x20over\x20how\x20pseudo-versions\x20are\x20compared\x20with\x20other\x20versions\x20and\x20that\x0apseudo-versions\x20refer\x20to\x20revisions\x20that\x20are\x20actually\x20part\x20of\x20a\x20module's\x0acommit\x20history.</p>\x0a<ul>\x0a<li>If\x20a\x20base\x20version\x20is\x20specified,\x20there\x20must\x20be\x20a\x20corresponding\x20semantic\x20version\x0atag\x20that\x20is\x20an\x20ancestor\x20of\x20the\x20revision\x20described\x20by\x20the\x20pseudo-version.\x20This\x0aprevents\x20developers\x20from\x20bypassing\x20<a\x20href=\"#glos-minimal-version-selection\">minimal\x20version\x0aselection</a>\x20using\x20a\x20pseudo-version\x20that\x0acompares\x20higher\x20than\x20all\x20tagged\x20versions\x20like\x0a<code>v1.999.999-99999999999999-daa7c04131f5</code>.</li>\x0a<li>The\x20timestamp\x20must\x20match\x20the\x20revision's\x20timestamp.\x20This\x20prevents\x20attackers\x0afrom\x20flooding\x20<a\x20href=\"#glos-module-proxy\">module\x20proxies</a>\x20with\x20an\x20unbounded\x20number\x0aof\x20otherwise\x20identical\x20pseudo-versions.\x20This\x20also\x20prevents\x20module\x20consumers\x0afrom\x20changing\x20the\x20relative\x20ordering\x20of\x20versions.</li>\x0a<li>The\x20revision\x20must\x20be\x20an\x20ancestor\x20of\x20one\x20of\x20the\x20module\x20repository's\x20branches\x20or\x0atags.\x20This\x20prevents\x20attackers\x20from\x20referring\x20to\x20unapproved\x20changes\x20or\x20pull\x0arequests.</li>\x0a</ul>\x0a<p>Pseudo-versions\x20never\x20need\x20to\x20be\x20typed\x20by\x20hand.\x20Many\x20commands\x20accept\x0aa\x20commit\x20hash\x20or\x20a\x20branch\x20name\x20and\x20will\x20translate\x20it\x20into\x20a\x20pseudo-version\x0a(or\x20tagged\x20version\x20if\x20available)\x20automatically.\x20For\x20example:</p>\x0a<pre><code>go\x20get\x20-d\x20example.com/mod@master\x0ago\x20list\x20-m\x20-json\x20example.com/mod@abcd1234\x0a</code></pre>\x0a<h3\x20id=\"major-version-suffixes\">Major\x20version\x20suffixes</h3>\x0a<p>Starting\x20with\x20major\x20version\x202,\x20module\x20paths\x20must\x20have\x20a\x20<a\x20href=\"#glos-major-version-suffix\"><em>major\x20version\x0asuffix</em></a>\x20like\x20<code>/v2</code>\x20that\x20matches\x20the\x20major\x0aversion.\x20For\x20example,\x20if\x20a\x20module\x20has\x20the\x20path\x20<code>example.com/mod</code>\x20at\x20<code>v1.0.0</code>,\x20it\x0amust\x20have\x20the\x20path\x20<code>example.com/mod/v2</code>\x20at\x20version\x20<code>v2.0.0</code>.</p>\x0a<p>Major\x20version\x20suffixes\x20implement\x20the\x20<a\x20href=\"https://research.swtch.com/vgo-import\"><em>import\x20compatibility\x0arule</em></a>:</p>\x0a<blockquote>\x0a<p>If\x20an\x20old\x20package\x20and\x20a\x20new\x20package\x20have\x20the\x20same\x20import\x20path,\x0athe\x20new\x20package\x20must\x20be\x20backwards\x20compatible\x20with\x20the\x20old\x20package.</p>\x0a</blockquote>\x0a<p>By\x20definition,\x20packages\x20in\x20a\x20new\x20major\x20version\x20of\x20a\x20module\x20are\x20not\x20backwards\x0acompatible\x20with\x20the\x20corresponding\x20packages\x20in\x20the\x20previous\x20major\x20version.\x0aConsequently,\x20starting\x20with\x20<code>v2</code>,\x20packages\x20need\x20new\x20import\x20paths.\x20This\x20is\x0aaccomplished\x20by\x20adding\x20a\x20major\x20version\x20suffix\x20to\x20the\x20module\x20path.\x20Since\x20the\x0amodule\x20path\x20is\x20a\x20prefix\x20of\x20the\x20import\x20path\x20for\x20each\x20package\x20within\x20the\x20module,\x0aadding\x20the\x20major\x20version\x20suffix\x20to\x20the\x20module\x20path\x20provides\x20a\x20distinct\x20import\x0apath\x20for\x20each\x20incompatible\x20version.</p>\x0a<p>Major\x20version\x20suffixes\x20are\x20not\x20allowed\x20at\x20major\x20versions\x20<code>v0</code>\x20or\x20<code>v1</code>.\x20There\x20is\x0ano\x20need\x20to\x20change\x20the\x20module\x20path\x20between\x20<code>v0</code>\x20and\x20<code>v1</code>\x20because\x20<code>v0</code>\x20versions\x0aare\x20unstable\x20and\x20have\x20no\x20compatibility\x20guarantee.\x20Additionally,\x20for\x20most\x0amodules,\x20<code>v1</code>\x20is\x20backwards\x20compatible\x20with\x20the\x20last\x20<code>v0</code>\x20version;\x20a\x20<code>v1</code>\x20version\x0aacts\x20as\x20a\x20commitment\x20to\x20compatibility,\x20rather\x20than\x20an\x20indication\x20of\x0aincompatible\x20changes\x20compared\x20with\x20<code>v0</code>.</p>\x0a<p>As\x20a\x20special\x20case,\x20modules\x20paths\x20starting\x20with\x20<code>gopkg.in/</code>\x20must\x20always\x20have\x20a\x0amajor\x20version\x20suffix,\x20even\x20at\x20<code>v0</code>\x20and\x20<code>v1</code>.\x20The\x20suffix\x20must\x20start\x20with\x20a\x20dot\x0arather\x20than\x20a\x20slash\x20(for\x20example,\x20<code>gopkg.in/yaml.v2</code>).</p>\x0a<p>Major\x20version\x20suffixes\x20let\x20multiple\x20major\x20versions\x20of\x20a\x20module\x20coexist\x20in\x20the\x0asame\x20build.\x20This\x20may\x20be\x20necessary\x20due\x20to\x20a\x20<a\x20href=\"https://research.swtch.com/vgo-import#dependency_story\">diamond\x20dependency\x0aproblem</a>.\x20Ordinarily,\x20if\x0aa\x20module\x20is\x20required\x20at\x20two\x20different\x20versions\x20by\x20transitive\x20dependencies,\x20the\x0ahigher\x20version\x20will\x20be\x20used.\x20However,\x20if\x20the\x20two\x20versions\x20are\x20incompatible,\x0aneither\x20version\x20will\x20satisfy\x20all\x20clients.\x20Since\x20incompatible\x20versions\x20must\x20have\x0adifferent\x20major\x20version\x20numbers,\x20they\x20must\x20also\x20have\x20different\x20module\x20paths\x20due\x0ato\x20major\x20version\x20suffixes.\x20This\x20resolves\x20the\x20conflict:\x20modules\x20with\x20distinct\x0asuffixes\x20are\x20treated\x20as\x20separate\x20modules,\x20and\x20their\x20packages\xe2\x80\x94even\x20packages\x20in\x0asame\x20subdirectory\x20relative\x20to\x20their\x20module\x20roots\xe2\x80\x94are\x20distinct.</p>\x0a<p>Many\x20Go\x20projects\x20released\x20versions\x20at\x20<code>v2</code>\x20or\x20higher\x20without\x20using\x20a\x20major\x0aversion\x20suffix\x20before\x20migrating\x20to\x20modules\x20(perhaps\x20before\x20modules\x20were\x20even\x0aintroduced).\x20These\x20versions\x20are\x20annotated\x20with\x20a\x20<code>+incompatible</code>\x20build\x20tag\x20(for\x0aexample,\x20<code>v2.0.0+incompatible</code>).\x20See\x20<a\x20href=\"#non-module-compat\">Compatibility\x20with\x20non-module\x0arepositories</a>\x20for\x20more\x20information.</p>\x0a<h3\x20id=\"resolve-pkg-mod\">Resolving\x20a\x20package\x20to\x20a\x20module</h3>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20loads\x20a\x20package\x20using\x20a\x20<a\x20href=\"#glos-package-path\">package\x0apath</a>,\x20it\x20needs\x20to\x20determine\x20which\x20module\x20provides\x20the\x0apackage.</p>\x0a<p>The\x20<code>go</code>\x20command\x20starts\x20by\x20searching\x20the\x20<a\x20href=\"#glos-build-list\">build\x20list</a>\x20for\x0amodules\x20with\x20paths\x20that\x20are\x20prefixes\x20of\x20the\x20package\x20path.\x20For\x20example,\x20if\x20the\x0apackage\x20<code>example.com/a/b</code>\x20is\x20imported,\x20and\x20the\x20module\x20<code>example.com/a</code>\x20is\x20in\x20the\x0abuild\x20list,\x20the\x20<code>go</code>\x20command\x20will\x20check\x20whether\x20<code>example.com/a</code>\x20contains\x20the\x0apackage,\x20in\x20the\x20directory\x20<code>b</code>.\x20At\x20least\x20one\x20file\x20with\x20the\x20<code>.go</code>\x20extension\x20must\x0abe\x20present\x20in\x20a\x20directory\x20for\x20it\x20to\x20be\x20considered\x20a\x20package.\x20<a\x20href=\"/pkg/go/build/#hdr-Build_Constraints\">Build\x0aconstraints</a>\x20are\x20not\x20applied\x20for\x20this\x0apurpose.\x20If\x20exactly\x20one\x20module\x20in\x20the\x20build\x20list\x20provides\x20the\x20package,\x20that\x0amodule\x20is\x20used.\x20If\x20two\x20or\x20more\x20modules\x20provide\x20the\x20package,\x20an\x20error\x20is\x0areported.\x20If\x20no\x20modules\x20provide\x20the\x20package,\x20the\x20<code>go</code>\x20command\x20will\x20attempt\x20to\x0afind\x20a\x20new\x20module\x20(unless\x20the\x20flags\x20<code>-mod=readonly</code>\x20or\x20<code>-mod=vendor</code>\x20are\x20used,\x0ain\x20which\x20case,\x20an\x20error\x20is\x20reported).</p>\x0a<!--\x20NOTE(golang.org/issue/27899):\x20the\x20go\x20command\x20reports\x20an\x20error\x20when\x20two\x0aor\x20more\x20modules\x20provide\x20a\x20package\x20with\x20the\x20same\x20path\x20as\x20above.\x20In\x20the\x20future,\x0awe\x20may\x20try\x20to\x20upgrade\x20one\x20(or\x20all)\x20of\x20the\x20colliding\x20modules.\x0a-->\x0a<p>When\x20the\x20<code>go</code>\x20command\x20looks\x20up\x20a\x20new\x20module\x20for\x20a\x20package\x20path,\x20it\x20checks\x20the\x0a<code>GOPROXY</code>\x20environment\x20variable,\x20which\x20is\x20a\x20comma-separated\x20list\x20of\x20proxy\x20URLs\x20or\x0athe\x20keywords\x20<code>direct</code>\x20or\x20<code>off</code>.\x20A\x20proxy\x20URL\x20indicates\x20the\x20<code>go</code>\x20command\x20should\x0acontact\x20a\x20<a\x20href=\"#glos-module-proxy\">module\x20proxy</a>\x20using\x20the\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x0aprotocol</a>.\x20<code>direct</code>\x20indicates\x20that\x20the\x20<code>go</code>\x20command\x20should\x0a<a\x20href=\"#vcs\">communicate\x20with\x20a\x20version\x20control\x20system</a>.\x20<code>off</code>\x20indicates\x20that\x20no\x0acommunication\x20should\x20be\x20attempted.\x20The\x20<code>GOPRIVATE</code>\x20and\x20<code>GONOPROXY</code>\x20<a\x20href=\"#environment-variables\">environment\x0avariables</a>\x20can\x20also\x20be\x20used\x20to\x20control\x20this\x20behavior.</p>\x0a<p>For\x20each\x20entry\x20in\x20the\x20<code>GOPROXY</code>\x20list,\x20the\x20<code>go</code>\x20command\x20requests\x20the\x20latest\x0aversion\x20of\x20each\x20module\x20path\x20that\x20might\x20provide\x20the\x20package\x20(that\x20is,\x20each\x20prefix\x0aof\x20the\x20package\x20path).\x20For\x20each\x20successfully\x20requested\x20module\x20path,\x20the\x20<code>go</code>\x0acommand\x20will\x20download\x20the\x20module\x20at\x20the\x20latest\x20version\x20and\x20check\x20whether\x20the\x0amodule\x20contains\x20the\x20requested\x20package.\x20If\x20one\x20or\x20more\x20modules\x20contain\x20the\x0arequested\x20package,\x20the\x20module\x20with\x20the\x20longest\x20path\x20is\x20used.\x20If\x20one\x20or\x20more\x0amodules\x20are\x20found\x20but\x20none\x20contain\x20the\x20requested\x20package,\x20an\x20error\x20is\x0areported.\x20If\x20no\x20modules\x20are\x20found,\x20the\x20<code>go</code>\x20command\x20tries\x20the\x20next\x20entry\x20in\x20the\x0a<code>GOPROXY</code>\x20list.\x20If\x20no\x20entries\x20are\x20left,\x20an\x20error\x20is\x20reported.</p>\x0a<p>For\x20example,\x20suppose\x20the\x20<code>go</code>\x20command\x20is\x20looking\x20for\x20a\x20module\x20that\x20provides\x20the\x0apackage\x20<code>golang.org/x/net/html</code>,\x20and\x20<code>GOPROXY</code>\x20is\x20set\x20to\x0a<code>https://corp.example.com,https://proxy.golang.org</code>.\x20The\x20<code>go</code>\x20command\x20may\x20make\x0athe\x20following\x20requests:</p>\x0a<ul>\x0a<li>To\x20<code>https://corp.example.com/</code>\x20(in\x20parallel):\x0a<ul>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x/net/html</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x/net</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org</code></li>\x0a</ul>\x0a</li>\x0a<li>To\x20<code>https://proxy.golang.org/</code>,\x20if\x20all\x20requests\x20to\x20<code>https://corp.example.com/</code>\x0ahave\x20failed\x20with\x20404\x20or\x20410:\x0a<ul>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x/net/html</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x/net</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org/x</code></li>\x0a<li>Request\x20for\x20latest\x20version\x20of\x20<code>golang.org</code></li>\x0a</ul>\x0a</li>\x0a</ul>\x0a<p>After\x20a\x20suitable\x20module\x20has\x20been\x20found,\x20the\x20<code>go</code>\x20command\x20will\x20add\x20a\x20new\x0a<a\x20href=\"#go.mod-require\">requirement</a>\x20with\x20the\x20new\x20module's\x20path\x20and\x20version\x20to\x20the\x0amain\x20module's\x20<code>go.mod</code>\x20file.\x20This\x20ensures\x20that\x20when\x20the\x20same\x20package\x20is\x20loaded\x0ain\x20the\x20future,\x20the\x20same\x20module\x20will\x20be\x20used\x20at\x20the\x20same\x20version.\x20If\x20the\x20resolved\x0apackage\x20is\x20not\x20imported\x20by\x20a\x20package\x20in\x20the\x20main\x20module,\x20the\x20new\x20requirement\x0awill\x20have\x20an\x20<code>//\x20indirect</code>\x20comment.</p>\x0a<h2\x20id=\"go\"\x20class=\"mod-files\"><code>go.mod</code>\x20files</h2>\x0a<p>A\x20module\x20is\x20defined\x20by\x20a\x20UTF-8\x20encoded\x20text\x20file\x20named\x20<code>go.mod</code>\x20in\x20its\x20root\x0adirectory.\x20The\x20<code>go.mod</code>\x20file\x20is\x20line-oriented.\x20Each\x20line\x20holds\x20a\x20single\x0adirective,\x20made\x20up\x20of\x20a\x20keyword\x20followed\x20by\x20arguments.\x20For\x20example:</p>\x0a<pre><code>module\x20example.com/my/thing\x0a\x0ago\x201.12\x0a\x0arequire\x20example.com/other/thing\x20v1.0.2\x0arequire\x20example.com/new/thing/v2\x20v2.3.4\x0aexclude\x20example.com/old/thing\x20v1.2.3\x0areplace\x20example.com/bad/thing\x20v1.4.5\x20=&gt;\x20example.com/good/thing\x20v1.4.5\x0a</code></pre>\x0a<p>The\x20leading\x20keyword\x20can\x20be\x20factored\x20out\x20of\x20adjacent\x20lines\x20to\x20create\x20a\x20block,\x0alike\x20in\x20Go\x20imports.</p>\x0a<pre><code>require\x20(\x0a\x20\x20\x20\x20example.com/new/thing/v2\x20v2.3.4\x0a\x20\x20\x20\x20example.com/old/thing\x20v1.2.3\x0a)\x0a</code></pre>\x0a<p>The\x20<code>go.mod</code>\x20file\x20is\x20designed\x20to\x20be\x20human\x20readable\x20and\x20machine\x20writable.\x20The\x0a<code>go</code>\x20command\x20provides\x20several\x20subcommands\x20that\x20change\x20<code>go.mod</code>\x20files.\x20For\x0aexample,\x20<a\x20href=\"#go-get\"><code>go\x20get</code></a>\x20can\x20upgrade\x20or\x20downgrade\x20specific\x20dependencies.\x0aCommands\x20that\x20load\x20the\x20module\x20graph\x20will\x20<a\x20href=\"#go.mod-updates\">automatically\x20update</a>\x0a<code>go.mod</code>\x20when\x20needed.\x20<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20edit</code></a>\x20can\x20perform\x20low-level\x20edits.\x0aThe\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/modfile?tab=doc\"><code>golang.org/x/mod/modfile</code></a>\x0apackage\x20can\x20be\x20used\x20by\x20Go\x20programs\x20to\x20make\x20the\x20same\x20changes\x20programmatically.</p>\x0a<h3\x20id=\"go\"\x20class=\"mod-lexical\">Lexical\x20elements</h3>\x0a<p>When\x20a\x20<code>go.mod</code>\x20file\x20is\x20parsed,\x20its\x20content\x20is\x20broken\x20into\x20a\x20sequence\x20of\x20tokens.\x0aThere\x20are\x20several\x20kinds\x20of\x20tokens:\x20whitespace,\x20comments,\x20punctuation,\x0akeywords,\x20identifiers,\x20and\x20strings.</p>\x0a<p><em>White\x20space</em>\x20consists\x20of\x20spaces\x20(U+0020),\x20tabs\x20(U+0009),\x20carriage\x20returns\x0a(U+000D),\x20and\x20newlines\x20(U+000A).\x20White\x20space\x20characters\x20other\x20than\x20newlines\x20have\x0ano\x20effect\x20except\x20to\x20separate\x20tokens\x20that\x20would\x20otherwise\x20be\x20combined.\x20Newlines\x0aare\x20significant\x20tokens.</p>\x0a<p><em>Comments</em>\x20start\x20with\x20<code>//</code>\x20and\x20run\x20to\x20the\x20end\x20of\x20a\x20line.\x20<code>/*\x20*/</code>\x20comments\x20are\x0anot\x20allowed.</p>\x0a<p><em>Punctuation</em>\x20tokens\x20include\x20<code>(</code>,\x20<code>)</code>,\x20and\x20<code>=&gt;</code>.</p>\x0a<p><em>Keywords</em>\x20distinguish\x20different\x20kinds\x20of\x20directives\x20in\x20a\x20<code>go.mod</code>\x20file.\x20Allowed\x0akeywords\x20are\x20<code>module</code>,\x20<code>go</code>,\x20<code>require</code>,\x20<code>replace</code>,\x20and\x20<code>exclude</code>.</p>\x0a<p><em>Identifiers</em>\x20are\x20sequences\x20of\x20non-whitespace\x20characters,\x20such\x20as\x20module\x20paths\x0aor\x20semantic\x20versions.</p>\x0a<p><em>Strings</em>\x20are\x20quoted\x20sequences\x20of\x20characters.\x20There\x20are\x20two\x20kinds\x20of\x20strings:\x0ainterpreted\x20strings\x20beginning\x20and\x20ending\x20with\x20quotation\x20marks\x20(<code>&quot;</code>,\x20U+0022)\x20and\x0araw\x20strings\x20beginning\x20and\x20ending\x20with\x20grave\x20accents\x20(<code>&lt;</code>,\x0aU+0060).\x20Interpreted\x20strings\x20may\x20contain\x20escape\x20sequences\x20consisting\x20of\x20a\x0abackslash\x20(<code>\\</code>,\x20U+005C)\x20followed\x20by\x20another\x20character.\x20An\x20escaped\x20quotation\x0amark\x20(<code>\\&quot;</code>)\x20does\x20not\x20terminate\x20an\x20interpreted\x20string.\x20The\x20unquoted\x20value\x0aof\x20an\x20interpreted\x20string\x20is\x20the\x20sequence\x20of\x20characters\x20between\x20quotation\x0amarks\x20with\x20each\x20escape\x20sequence\x20replaced\x20by\x20the\x20character\x20following\x20the\x0abackslash\x20(for\x20example,\x20<code>\\&quot;</code>\x20is\x20replaced\x20by\x20<code>&quot;</code>,\x20<code>\\n</code>\x20is\x20replaced\x20by\x20<code>n</code>).\x0aIn\x20contrast,\x20the\x20unquoted\x20value\x20of\x20a\x20raw\x20string\x20is\x20simply\x20the\x20sequence\x20of\x0acharacters\x20between\x20grave\x20accents;\x20backslashes\x20have\x20no\x20special\x20meaning\x20within\x0araw\x20strings.</p>\x0a<p>Identifiers\x20and\x20strings\x20are\x20interchangeable\x20in\x20the\x20<code>go.mod</code>\x20grammar.</p>\x0a<h3\x20id=\"go\"\x20class=\"mod-ident\">Module\x20paths\x20and\x20versions</h3>\x0a<p>Most\x20identifiers\x20and\x20strings\x20in\x20a\x20<code>go.mod</code>\x20file\x20are\x20either\x20module\x20paths\x20or\x0aversions.</p>\x0a<p>A\x20module\x20path\x20must\x20satisfy\x20the\x20following\x20requirements:</p>\x0a<ul>\x0a<li>The\x20path\x20must\x20consist\x20of\x20one\x20or\x20more\x20path\x20elements\x20separated\x20by\x20slashes\x0a(<code>/</code>,\x20U+002F).\x20It\x20must\x20not\x20begin\x20or\x20end\x20with\x20a\x20slash.</li>\x0a<li>Each\x20path\x20element\x20is\x20a\x20non-empty\x20string\x20made\x20of\x20up\x20ASCII\x20letters,\x20ASCII\x0adigits,\x20and\x20limited\x20ASCII\x20punctuation\x20(<code>+</code>,\x20<code>-</code>,\x20<code>.</code>,\x20<code>_</code>,\x20and\x20<code>~</code>).</li>\x0a<li>A\x20path\x20element\x20may\x20not\x20begin\x20or\x20end\x20with\x20a\x20dot\x20(<code>.</code>,\x20U+002E).</li>\x0a<li>The\x20element\x20prefix\x20up\x20to\x20the\x20first\x20dot\x20must\x20not\x20be\x20a\x20reserved\x20file\x20name\x20on\x0aWindows,\x20regardless\x20of\x20case\x20(<code>CON</code>,\x20<code>com1</code>,\x20<code>NuL</code>,\x20and\x20so\x20on).</li>\x0a</ul>\x0a<p>If\x20the\x20module\x20path\x20appears\x20in\x20a\x20<code>require</code>\x20directive\x20and\x20is\x20not\x20replaced,\x20or\x0aif\x20the\x20module\x20paths\x20appears\x20on\x20the\x20right\x20side\x20of\x20a\x20<code>replace</code>\x20directive,\x0athe\x20<code>go</code>\x20command\x20may\x20need\x20to\x20download\x20modules\x20with\x20that\x20path,\x20and\x20some\x0aadditional\x20requirements\x20must\x20be\x20satisfied.</p>\x0a<ul>\x0a<li>The\x20leading\x20path\x20element\x20(up\x20to\x20the\x20first\x20slash,\x20if\x20any),\x20by\x20convention\x20a\x0adomain\x20name,\x20must\x20contain\x20only\x20lower-case\x20ASCII\x20letters,\x20ASCII\x20digits,\x20dots\x0a(<code>.</code>,\x20U+002E),\x20and\x20dashes\x20(<code>-</code>,\x20U+002D);\x20it\x20must\x20contain\x20at\x20least\x20one\x20dot\x20and\x0acannot\x20start\x20with\x20a\x20dash.</li>\x0a<li>For\x20a\x20final\x20path\x20element\x20of\x20the\x20form\x20<code>/vN</code>\x20where\x20<code>N</code>\x20looks\x20numeric\x20(ASCII\x0adigits\x20and\x20dots),\x20<code>N</code>\x20must\x20not\x20begin\x20with\x20a\x20leading\x20zero,\x20must\x20not\x20be\x20<code>/v1</code>,\x0aand\x20must\x20not\x20contain\x20any\x20dots.\x0a<ul>\x0a<li>For\x20paths\x20beginning\x20with\x20<code>gopkg.in/</code>,\x20this\x20requirement\x20is\x20replaced\x20by\x20a\x0arequirement\x20that\x20the\x20path\x20follow\x20the\x20<a\x20href=\"https://gopkg.in\">gopkg.in</a>\x20service's\x0aconventions.</li>\x0a</ul>\x0a</li>\x0a</ul>\x0a<p>Versions\x20in\x20<code>go.mod</code>\x20files\x20may\x20be\x20<a\x20href=\"#glos-canonical-version\">canonical</a>\x20or\x0anon-canonical.</p>\x0a<p>A\x20canonical\x20version\x20starts\x20with\x20the\x20letter\x20<code>v</code>,\x20followed\x20by\x20a\x20semantic\x20version\x0afollowing\x20the\x20<a\x20href=\"https://semver.org/spec/v2.0.0.html\">Semantic\x20Versioning\x202.0.0</a>\x0aspecification.\x20See\x20<a\x20href=\"#versions\">Versions</a>\x20for\x20more\x20information.</p>\x0a<p>Most\x20other\x20identifiers\x20and\x20strings\x20may\x20be\x20used\x20as\x20non-canonical\x20versions,\x20though\x0athere\x20are\x20some\x20restrictions\x20to\x20avoid\x20problems\x20with\x20file\x20systems,\x20repositories,\x0aand\x20<a\x20href=\"#glos-module-proxy\">module\x20proxies</a>.\x20Non-canonical\x20versions\x20are\x20only\x0aallowed\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file.\x20The\x20<code>go</code>\x20command\x20will\x20attempt\x20to\x0areplace\x20each\x20non-canonical\x20version\x20with\x20an\x20equivalent\x20canonical\x20version\x20when\x20it\x0aautomatically\x20<a\x20href=\"#go.mod-updates\">updates</a>\x20the\x20<code>go.mod</code>\x20file.</p>\x0a<p>In\x20places\x20where\x20a\x20module\x20path\x20is\x20associated\x20with\x20a\x20verison\x20(as\x20in\x20<code>require</code>,\x0a<code>replace</code>,\x20and\x20<code>exclude</code>\x20directives),\x20the\x20final\x20path\x20element\x20must\x20be\x20consistent\x0awith\x20the\x20version.\x20See\x20<a\x20href=\"#major-version-suffixes\">Major\x20version\x20suffixes</a>.</p>\x0a<h3\x20id=\"go\"\x20class=\"mod-grammar\">Grammar</h3>\x0a<p><code>go.mod</code>\x20syntax\x20is\x20specified\x20below\x20using\x20Extended\x20Backus-Naur\x20Form\x20(EBNF).\x0aSee\x20the\x20<a\x20href=\"/ref/spec#Notation\">Notation\x20section\x20in\x20the\x20Go\x20Language\x20Specificiation</a>\x0afor\x20details\x20on\x20EBNF\x20syntax.</p>\x0a<pre><code>GoMod\x20=\x20{\x20Directive\x20}\x20.\x0aDirective\x20=\x20ModuleDirective\x20|\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GoDirective\x20|\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RequireDirective\x20|\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ExcludeDirective\x20|\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ReplaceDirective\x20.\x0a</code></pre>\x0a<p>Newlines,\x20identifiers,\x20and\x20strings\x20are\x20denoted\x20with\x20<code>newline</code>,\x20<code>ident</code>,\x20and\x0a<code>string</code>,\x20respectively.</p>\x0a<p>Module\x20paths\x20and\x20versions\x20are\x20denoted\x20with\x20<code>ModulePath</code>\x20and\x20<code>Version</code>.</p>\x0a<pre><code>ModulePath\x20=\x20ident\x20|\x20string\x20.\x20/*\x20see\x20restrictions\x20above\x20*/\x0aVersion\x20=\x20ident\x20|\x20string\x20.\x20\x20\x20\x20/*\x20see\x20restrictions\x20above\x20*/\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-module\"><code>module</code>\x20directive</h3>\x0a<p>A\x20<code>module</code>\x20directive\x20defines\x20the\x20main\x20module's\x20<a\x20href=\"#glos-module-path\">path</a>.\x20A\x0a<code>go.mod</code>\x20file\x20must\x20contain\x20exactly\x20one\x20<code>module</code>\x20directive.</p>\x0a<pre><code>ModuleDirective\x20=\x20&quot;module&quot;\x20(\x20ModulePath\x20|\x20&quot;(&quot;\x20newline\x20ModulePath\x20newline\x20&quot;)&quot;\x20newline\x20.\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>module\x20golang.org/x/net\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-go\"><code>go</code>\x20directive</h3>\x0a<p>A\x20<code>go</code>\x20directive\x20sets\x20the\x20expected\x20language\x20version\x20for\x20the\x20module.\x20The\x0aversion\x20must\x20be\x20a\x20valid\x20Go\x20release\x20version:\x20a\x20positive\x20integer\x20followed\x20by\x20a\x20dot\x0aand\x20a\x20non-negative\x20integer\x20(for\x20example,\x20<code>1.9</code>,\x20<code>1.14</code>).</p>\x0a<p>The\x20language\x20version\x20determines\x20which\x20language\x20features\x20are\x20available\x20when\x0acompiling\x20packages\x20in\x20the\x20module.\x20Language\x20features\x20present\x20in\x20that\x20version\x0awill\x20be\x20available\x20for\x20use.\x20Language\x20features\x20removed\x20in\x20earlier\x20versions,\x0aor\x20added\x20in\x20later\x20versions,\x20will\x20not\x20be\x20available.\x20The\x20language\x20version\x20does\x20not\x0aaffect\x20build\x20tags,\x20which\x20are\x20determined\x20by\x20the\x20Go\x20release\x20being\x20used.</p>\x0a<p>The\x20language\x20version\x20is\x20also\x20used\x20to\x20enable\x20features\x20in\x20the\x20<code>go</code>\x20command.\x20For\x0aexample,\x20automatic\x20<a\x20href=\"#vendoring\">vendoring</a>\x20may\x20be\x20enabled\x20with\x20a\x20<code>go</code>\x20version\x20of\x0a<code>1.14</code>\x20or\x20higher.</p>\x0a<p>A\x20<code>go.mod</code>\x20file\x20may\x20contain\x20at\x20most\x20one\x20<code>go</code>\x20directive.\x20Most\x20commands\x20will\x20add\x20a\x0a<code>go</code>\x20directive\x20with\x20the\x20current\x20Go\x20version\x20if\x20one\x20is\x20not\x20present.</p>\x0a<pre><code>GoDirective\x20=\x20&quot;go&quot;\x20GoVersion\x20newline\x20.\x0aGoVersion\x20=\x20string\x20|\x20ident\x20.\x20\x20/*\x20valid\x20release\x20version;\x20see\x20above\x20*/\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>go\x201.14\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-require\"><code>require</code>\x20directive</h3>\x0a<p>A\x20<code>require</code>\x20directive\x20declares\x20a\x20minimum\x20required\x20version\x20of\x20a\x20given\x20module\x0adependency.\x20For\x20each\x20required\x20module\x20version,\x20the\x20<code>go</code>\x20command\x20loads\x20the\x0a<code>go.mod</code>\x20file\x20for\x20that\x20version\x20and\x20incorporates\x20the\x20requirements\x20from\x20that\x0afile.\x20Once\x20all\x20requirements\x20have\x20been\x20loaded,\x20the\x20<code>go</code>\x20command\x20resolves\x20them\x0ausing\x20<a\x20href=\"#minimal-version-selection\">minimal\x20version\x20selection\x20(MVS)</a>\x20to\x20produce\x0athe\x20<a\x20href=\"#glos-build-list\">build\x20list</a>.</p>\x0a<p>The\x20<code>go</code>\x20command\x20automatically\x20adds\x20<code>//\x20indirect</code>\x20comments\x20for\x20some\x0arequirements.\x20An\x20<code>//\x20indirect</code>\x20comment\x20indicates\x20that\x20no\x20package\x20from\x20the\x0arequired\x20module\x20is\x20directly\x20imported\x20by\x20any\x20package\x20in\x20the\x20main\x20module.\x0aThe\x20<code>go</code>\x20command\x20adds\x20an\x20indirect\x20requirement\x20when\x20the\x20selected\x20version\x20of\x20a\x0amodule\x20is\x20higher\x20than\x20what\x20is\x20already\x20implied\x20(transitively)\x20by\x20the\x20main\x0amodule's\x20other\x20dependencies.\x20That\x20may\x20occur\x20because\x20of\x20an\x20explicit\x20upgrade\x0a(<code>go\x20get\x20-u</code>),\x20removal\x20of\x20some\x20other\x20dependency\x20that\x20previously\x20imposed\x20the\x0arequirement\x20(<code>go\x20mod\x20tidy</code>),\x20or\x20a\x20dependency\x20that\x20imports\x20a\x20package\x20without\x0aa\x20corresponding\x20requirement\x20in\x20its\x20own\x20<code>go.mod</code>\x20file\x20(such\x20as\x20a\x20dependency\x0athat\x20lacks\x20a\x20<code>go.mod</code>\x20file\x20altogether).</p>\x0a<pre><code>RequireDirective\x20=\x20&quot;require&quot;\x20(\x20RequireSpec\x20|\x20&quot;(&quot;\x20newline\x20{\x20RequireSpec\x20}\x20&quot;)&quot;\x20newline\x20)\x20.\x0aRequireSpec\x20=\x20ModulePath\x20Version\x20newline\x20.\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>require\x20golang.org/x/net\x20v1.2.3\x0a\x0arequire\x20(\x0a\x20\x20\x20\x20golang.org/x/crypto\x20v1.4.5\x20//\x20indirect\x0a\x20\x20\x20\x20golang.org/x/text\x20v1.6.7\x0a)\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-exclude\"><code>exclude</code>\x20directive</h3>\x0a<p>An\x20<code>exclude</code>\x20directive\x20prevents\x20a\x20module\x20version\x20from\x20being\x20loaded\x20by\x20the\x20<code>go</code>\x0acommand.\x20If\x20an\x20excluded\x20version\x20is\x20referenced\x20by\x20a\x20<code>require</code>\x20directive\x20in\x20a\x0a<code>go.mod</code>\x20file,\x20the\x20<code>go</code>\x20command\x20will\x20list\x20available\x20versions\x20for\x20the\x20module\x20(as\x0ashown\x20with\x20<code>go\x20list\x20-m\x20-versions</code>)\x20and\x20will\x20load\x20the\x20next\x20higher\x20non-excluded\x0aversion\x20instead.\x20Both\x20release\x20and\x20pre-release\x20versions\x20are\x20considered\x20for\x20this\x0apurpose,\x20but\x20pseudo-versions\x20are\x20not.\x20If\x20there\x20are\x20no\x20higher\x20versions,\x0athe\x20<code>go</code>\x20command\x20will\x20report\x20an\x20error.\x20Note\x20that\x20this\x20<a\x20href=\"https://golang.org/issue/36465\">may\x0achange</a>\x20in\x20Go\x201.15.</p>\x0a<!--\x20TODO(golang.org/issue/36465):\x20update\x20after\x20change\x20-->\x0a<p><code>exclude</code>\x20directives\x20only\x20apply\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file\x20and\x20are\x0aignored\x20in\x20other\x20modules.\x20See\x20<a\x20href=\"#minimal-version-selection\">Minimal\x20version\x0aselection</a>\x20for\x20details.</p>\x0a<pre><code>ExcludeDirective\x20=\x20&quot;exclude&quot;\x20(\x20ExcludeSpec\x20|\x20&quot;(&quot;\x20newline\x20{\x20ExcludeSpec\x20}\x20&quot;)&quot;\x20)\x20.\x0aExcludeSpec\x20=\x20ModulePath\x20Version\x20newline\x20.\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>exclude\x20golang.org/x/net\x20v1.2.3\x0a\x0aexclude\x20(\x0a\x20\x20\x20\x20golang.org/x/crypto\x20v1.4.5\x0a\x20\x20\x20\x20golang.org/x/text\x20v1.6.7\x0a)\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-replace\"><code>replace</code>\x20directive</h3>\x0a<p>A\x20<code>replace</code>\x20directive\x20replaces\x20the\x20contents\x20of\x20a\x20specific\x20version\x20of\x20a\x20module,\x0aor\x20all\x20versions\x20of\x20a\x20module,\x20with\x20contents\x20found\x20elsewhere.\x20The\x20replacement\x0amay\x20be\x20specified\x20with\x20either\x20another\x20module\x20path\x20and\x20version,\x20or\x20a\x0aplatform-specific\x20file\x20path.</p>\x0a<p>If\x20a\x20version\x20is\x20present\x20on\x20the\x20left\x20side\x20of\x20the\x20arrow\x20(<code>=&gt;</code>),\x20only\x20that\x20specific\x0aversion\x20of\x20the\x20module\x20is\x20replaced;\x20other\x20versions\x20will\x20be\x20accessed\x20normally.\x0aIf\x20the\x20left\x20version\x20is\x20omitted,\x20all\x20versions\x20of\x20the\x20module\x20are\x20replaced.</p>\x0a<p>If\x20the\x20path\x20on\x20the\x20right\x20side\x20of\x20the\x20arrow\x20is\x20an\x20absolute\x20or\x20relative\x20path\x0a(beginning\x20with\x20<code>./</code>\x20or\x20<code>../</code>),\x20it\x20is\x20interpreted\x20as\x20the\x20local\x20file\x20path\x20to\x20the\x0areplacement\x20module\x20root\x20directory,\x20which\x20must\x20contain\x20a\x20<code>go.mod</code>\x20file.\x20The\x0areplacement\x20version\x20must\x20be\x20omitted\x20in\x20this\x20case.</p>\x0a<p>If\x20the\x20path\x20on\x20the\x20right\x20side\x20is\x20not\x20a\x20local\x20path,\x20it\x20must\x20be\x20a\x20valid\x20module\x0apath.\x20In\x20this\x20case,\x20a\x20version\x20is\x20required.\x20The\x20same\x20module\x20version\x20must\x20not\x0aalso\x20appear\x20in\x20the\x20build\x20list.</p>\x0a<p>Regardless\x20of\x20whether\x20a\x20replacement\x20is\x20specified\x20with\x20a\x20local\x20path\x20or\x20module\x0apath,\x20if\x20the\x20replacement\x20module\x20has\x20a\x20<code>go.mod</code>\x20file,\x20its\x20<code>module</code>\x20directive\x0amust\x20match\x20the\x20module\x20path\x20it\x20replaces.</p>\x0a<p><code>replace</code>\x20directives\x20only\x20apply\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file\x0aand\x20are\x20ignored\x20in\x20other\x20modules.\x20See\x20<a\x20href=\"#minimal-version-selection\">Minimal\x20version\x0aselection</a>\x20for\x20details.</p>\x0a<pre><code>ReplaceDirective\x20=\x20&quot;replace&quot;\x20(\x20ReplaceSpec\x20|\x20&quot;(&quot;\x20newline\x20{\x20ReplaceSpec\x20}\x20&quot;)&quot;\x20newline\x20&quot;)&quot;\x20)\x20.\x0aReplaceSpec\x20=\x20ModulePath\x20[\x20Version\x20]\x20&quot;=&gt;&quot;\x20FilePath\x20newline\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\x20ModulePath\x20[\x20Version\x20]\x20&quot;=&gt;&quot;\x20ModulePath\x20Version\x20newline\x20.\x0aFilePath\x20=\x20/*\x20platform-specific\x20relative\x20or\x20absolute\x20file\x20path\x20*/\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>replace\x20golang.org/x/net\x20v1.2.3\x20=&gt;\x20example.com/fork/net\x20v1.4.5\x0a\x0areplace\x20(\x0a\x20\x20\x20\x20golang.org/x/net\x20v1.2.3\x20=&gt;\x20example.com/fork/net\x20v1.4.5\x0a\x20\x20\x20\x20golang.org/x/net\x20=&gt;\x20example.com/fork/net\x20v1.4.5\x0a\x20\x20\x20\x20golang.org/x/net\x20v1.2.3\x20=&gt;\x20./fork/net\x0a\x20\x20\x20\x20golang.org/x/net\x20=&gt;\x20./fork/net\x0a)\x0a</code></pre>\x0a<h3\x20id=\"go\"\x20class=\"mod-updates\">Automatic\x20updates</h3>\x0a<p>The\x20<code>go</code>\x20command\x20automatically\x20updates\x20<code>go.mod</code>\x20when\x20it\x20uses\x20the\x20module\x20graph\x20if\x0asome\x20information\x20is\x20missing\x20or\x20<code>go.mod</code>\x20doesn't\x20accurately\x20reflect\x20reality.\x20\x20For\x0aexample,\x20consider\x20this\x20<code>go.mod</code>\x20file:</p>\x0a<pre><code>module\x20example.com/M\x0a\x0arequire\x20(\x0a\x20\x20\x20\x20example.com/A\x20v1\x0a\x20\x20\x20\x20example.com/B\x20v1.0.0\x0a\x20\x20\x20\x20example.com/C\x20v1.0.0\x0a\x20\x20\x20\x20example.com/D\x20v1.2.3\x0a\x20\x20\x20\x20example.com/E\x20dev\x0a)\x0a\x0aexclude\x20example.com/D\x20v1.2.3\x0a</code></pre>\x0a<p>The\x20update\x20rewrites\x20non-canonical\x20version\x20identifiers\x20to\x0a<a\x20href=\"#glos-canonical-version\">canonical</a>\x20semver\x20form,\x20so\x20<code>example.com/A</code>'s\x20<code>v1</code>\x0abecomes\x20<code>v1.0.0</code>,\x20and\x20<code>example.com/E</code>'s\x20<code>dev</code>\x20becomes\x20the\x20pseudo-version\x20for\x20the\x0alatest\x20commit\x20on\x20the\x20<code>dev</code>\x20branch,\x20perhaps\x20<code>v0.0.0-20180523231146-b3f5c0f6e5f1</code>.</p>\x0a<p>The\x20update\x20modifies\x20requirements\x20to\x20respect\x20exclusions,\x20so\x20the\x20requirement\x20on\x0athe\x20excluded\x20<code>example.com/D\x20v1.2.3</code>\x20is\x20updated\x20to\x20use\x20the\x20next\x20available\x20version\x0aof\x20<code>example.com/D</code>,\x20perhaps\x20<code>v1.2.4</code>\x20or\x20<code>v1.3.0</code>.</p>\x0a<p>The\x20update\x20removes\x20redundant\x20or\x20misleading\x20requirements.\x20For\x20example,\x20if\x0a<code>example.com/A\x20v1.0.0</code>\x20itself\x20requires\x20<code>example.com/B\x20v1.2.0</code>\x20and\x20<code>example.com/C\x20v1.0.0</code>,\x20then\x20<code>go.mod</code>'s\x20requirement\x20of\x20<code>example.com/B\x20v1.0.0</code>\x20is\x20misleading\x0a(superseded\x20by\x20<code>example.com/A</code>'s\x20need\x20for\x20<code>v1.2.0</code>),\x20and\x20its\x20requirement\x20of\x0a<code>example.com/C\x20v1.0.0</code>\x20is\x20redundant\x20(implied\x20by\x20<code>example.com/A</code>'s\x20need\x20for\x20the\x0asame\x20version),\x20so\x20both\x20will\x20be\x20removed.\x20If\x20the\x20main\x20module\x20contains\x20packages\x0athat\x20directly\x20import\x20packages\x20from\x20<code>example.com/B</code>\x20or\x20<code>example.com/C</code>,\x20then\x20the\x0arequirements\x20will\x20be\x20kept\x20but\x20updated\x20to\x20the\x20actual\x20versions\x20being\x20used.</p>\x0a<p>Finally,\x20the\x20update\x20reformats\x20the\x20<code>go.mod</code>\x20in\x20a\x20canonical\x20formatting,\x20so\x0athat\x20future\x20mechanical\x20changes\x20will\x20result\x20in\x20minimal\x20diffs.\x20The\x20<code>go</code>\x20command\x0awill\x20not\x20update\x20<code>go.mod</code>\x20if\x20only\x20formatting\x20changes\x20are\x20needed.</p>\x0a<p>Because\x20the\x20module\x20graph\x20defines\x20the\x20meaning\x20of\x20import\x20statements,\x20any\x20commands\x0athat\x20load\x20packages\x20also\x20use\x20and\x20therefore\x20update\x20<code>go.mod</code>,\x20including\x20<code>go\x20build</code>,\x0a<code>go\x20get</code>,\x20<code>go\x20install</code>,\x20<code>go\x20list</code>,\x20<code>go\x20test</code>,\x20<code>go\x20mod\x20graph</code>,\x20<code>go\x20mod\x20tidy</code>,\x20and\x0a<code>go\x20mod\x20why</code>.</p>\x0a<p>The\x20<code>-mod=readonly</code>\x20flag\x20prevents\x20commands\x20from\x20automatically\x20updating\x0a<code>go.mod</code>.\x20However,\x20if\x20a\x20command\x20needs\x20to\x20perform\x20an\x20action\x20that\x20would\x0aupdate\x20to\x20<code>go.mod</code>,\x20it\x20will\x20report\x20an\x20error.\x20For\x20example,\x20if\x0a<code>go\x20build</code>\x20is\x20asked\x20to\x20build\x20a\x20package\x20not\x20provided\x20by\x20any\x20module\x20in\x20the\x20build\x0alist,\x20<code>go\x20build</code>\x20will\x20report\x20an\x20error\x20instead\x20of\x20looking\x20up\x20the\x20module\x20and\x0aupdating\x20requirements\x20in\x20<code>go.mod</code>.</p>\x0a<h2\x20id=\"minimal-version-selection\">Minimal\x20version\x20selection\x20(MVS)</h2>\x0a<p>Go\x20uses\x20an\x20algorithm\x20called\x20<dfn>Minimal\x20version\x20selection\x20(MVS)</dfn>\x20to\x20select\x0aa\x20set\x20of\x20module\x20versions\x20to\x20use\x20when\x20building\x20packages.\x20MVS\x20is\x20described\x20in\x0adetail\x20in\x20<a\x20href=\"https://research.swtch.com/vgo-mvs\">Minimal\x20Version\x20Selection</a>\x20by\x0aRuss\x20Cox.</p>\x0a<p>Conceptually,\x20MVS\x20operates\x20on\x20a\x20directed\x20graph\x20of\x20modules,\x20specified\x20with\x0a<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x20files</a>.\x20Each\x20vertex\x20in\x20the\x20graph\x20represents\x20a\x0amodule\x20version.\x20Each\x20edge\x20represents\x20a\x20minimum\x20required\x20version\x20of\x20a\x20dependency,\x0aspecified\x20using\x20a\x20<a\x20href=\"#go.mod-require\"><code>require</code></a>\x0adirective.\x20<a\x20href=\"#go.mod-replace\"><code>replace</code></a>\x20and\x20<a\x20href=\"#go.mod-exclude\"><code>exclude</code></a>\x0adirectives\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file\x20modify\x20the\x20graph.</p>\x0a<p>MVS\x20produces\x20the\x20<a\x20href=\"#glos-build-list\">build\x20list</a>\x20as\x20output,\x20the\x20list\x20of\x20module\x0aversions\x20used\x20for\x20a\x20build.</p>\x0a<p>MVS\x20starts\x20at\x20the\x20main\x20module\x20(a\x20special\x20vertex\x20in\x20the\x20graph\x20that\x20has\x20no\x0aversion)\x20and\x20traverses\x20the\x20graph,\x20tracking\x20the\x20highest\x20required\x20version\x20of\x20each\x0amodule.\x20At\x20the\x20end\x20of\x20the\x20traversal,\x20the\x20highest\x20required\x20versions\x20comprise\x20the\x0abuild\x20list:\x20they\x20are\x20the\x20minimum\x20versions\x20that\x20satisfy\x20all\x20requirements.</p>\x0a<p>The\x20build\x20list\x20may\x20be\x20inspected\x20with\x20the\x20command\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m\x20all</code></a>.\x20Unlike\x20other\x20dependency\x20management\x20systems,\x20the\x20build\x20list\x20is\x0anot\x20saved\x20in\x20a\x20&quot;lock&quot;\x20file.\x20MVS\x20is\x20deterministic,\x20and\x20the\x20build\x20list\x20doesn't\x0achange\x20when\x20new\x20versions\x20of\x20dependencies\x20are\x20released,\x20so\x20MVS\x20is\x20used\x20to\x20compute\x0ait\x20at\x20the\x20beginning\x20of\x20every\x20module-aware\x20command.</p>\x0a<p>Consider\x20the\x20example\x20in\x20the\x20diagram\x20below.\x20The\x20main\x20module\x20requires\x20module\x20A\x0aat\x20version\x201.2\x20or\x20higher\x20and\x20module\x20B\x20at\x20version\x201.2\x20or\x20higher.\x20A\x201.2\x20and\x20B\x201.2\x0arequire\x20C\x201.3\x20and\x20C\x201.4,\x20respectively.\x20C\x201.3\x20and\x20C\x201.4\x20both\x20require\x20D\x201.2.</p>\x0a<p><img\x20src=\"/doc/mvs/buildlist.svg\"\x20alt=\"Module\x20version\x20graph\x20with\x20visited\x20versions\x20highlighted\"\x20title=\"MVS\x20build\x20list\x20graph\"></p>\x0a<p>MVS\x20visits\x20and\x20loads\x20the\x20<code>go.mod</code>\x20file\x20for\x20each\x20of\x20the\x20module\x20versions\x0ahighlighted\x20in\x20blue.\x20At\x20the\x20end\x20of\x20the\x20graph\x20traversal,\x20MVS\x20returns\x20a\x20build\x20list\x0acontaining\x20the\x20bolded\x20versions:\x20A\x201.2,\x20B\x201.2,\x20C\x201.4,\x20and\x20D\x201.2.\x20Note\x20that\x20higher\x0aversions\x20of\x20B\x20and\x20D\x20are\x20available\x20but\x20MVS\x20does\x20not\x20select\x20them,\x20since\x20nothing\x0arequires\x20them.</p>\x0a<h3\x20id=\"mvs-replace\">Replacement</h3>\x0a<p>The\x20content\x20of\x20a\x20module\x20(including\x20its\x20<code>go.mod</code>\x20file)\x20may\x20be\x20replaced\x20using\x20a\x0a<a\x20href=\"#go.mod-replace\"><code>replace</code>\x20directive</a>\x20in\x20the\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file.\x0aA\x20<code>replace</code>\x20directive\x20may\x20apply\x20to\x20a\x20specific\x20version\x20of\x20a\x20module\x20or\x20to\x20all\x0aversions\x20of\x20a\x20module.</p>\x0a<p>Replacements\x20change\x20the\x20module\x20graph,\x20since\x20a\x20replacement\x20module\x20may\x20have\x0adifferent\x20dependencies\x20than\x20replaced\x20versions.</p>\x0a<p>Consider\x20the\x20example\x20below,\x20where\x20C\x201.4\x20has\x20been\x20replaced\x20with\x20R.\x20R\x20depends\x20on\x20D\x0a1.3\x20instead\x20of\x20D\x201.2,\x20so\x20MVS\x20returns\x20a\x20build\x20list\x20containing\x20A\x201.2,\x20B\x201.2,\x20C\x201.4\x0a(replaced\x20with\x20R),\x20and\x20D\x201.3.</p>\x0a<p><img\x20src=\"/doc/mvs/replace.svg\"\x20alt=\"Module\x20version\x20graph\x20with\x20a\x20replacement\"\x20title=\"MVS\x20replacment\"></p>\x0a<h3\x20id=\"mvs-exclude\">Exclusion</h3>\x0a<p>A\x20module\x20may\x20also\x20be\x20excluded\x20at\x20specific\x20versions\x20using\x20an\x20<a\x20href=\"#go.mod-exclude\"><code>exclude</code>\x0adirective</a>\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file.</p>\x0a<p>Exclusions\x20also\x20change\x20the\x20module\x20graph.\x20When\x20a\x20version\x20is\x20excluded,\x20it\x20is\x0aremoved\x20from\x20the\x20module\x20graph,\x20and\x20requirements\x20on\x20it\x20are\x20redirected\x20to\x20the\x0anext\x20higher\x20version.</p>\x0a<p>Consider\x20the\x20example\x20below.\x20C\x201.3\x20has\x20been\x20excluded.\x20MVS\x20will\x20act\x20as\x20if\x20A\x201.2\x0arequired\x20C\x201.4\x20(the\x20next\x20higher\x20version)\x20instead\x20of\x20C\x201.3.</p>\x0a<p><img\x20src=\"/doc/mvs/exclude.svg\"\x20alt=\"Module\x20version\x20graph\x20with\x20an\x20exclusion\"\x20title=\"MVS\x20exclude\"></p>\x0a<h3\x20id=\"mvs-upgrade\">Upgrades</h3>\x0a<p>The\x20<a\x20href=\"#go-get\"><code>go\x20get</code></a>\x20command\x20may\x20be\x20used\x20to\x20upgrade\x20a\x20set\x20of\x20modules.\x20To\x0aperform\x20an\x20upgrade,\x20the\x20<code>go</code>\x20command\x20changes\x20the\x20module\x20graph\x20before\x20running\x20MVS\x0aby\x20adding\x20edges\x20from\x20visited\x20versions\x20to\x20upgraded\x20versions.</p>\x0a<p>Consider\x20the\x20example\x20below.\x20Module\x20B\x20may\x20be\x20upgraded\x20from\x201.2\x20to\x201.3,\x20C\x20may\x20be\x0aupgraded\x20from\x201.3\x20to\x201.4,\x20and\x20D\x20may\x20be\x20upgraded\x20from\x201.2\x20to\x201.3.</p>\x0a<p><img\x20src=\"/doc/mvs/upgrade.svg\"\x20alt=\"Module\x20version\x20graph\x20with\x20upgrades\"\x20title=\"MVS\x20upgrade\"></p>\x0a<p>Upgrades\x20(and\x20downgrades)\x20may\x20add\x20or\x20remove\x20indirect\x20dependencies.\x20In\x20this\x20case,\x0aE\x201.1\x20and\x20F\x201.1\x20appear\x20in\x20the\x20build\x20list\x20after\x20the\x20upgrade,\x20since\x20E\x201.1\x20is\x0arequired\x20by\x20B\x201.3.</p>\x0a<p>To\x20preserve\x20upgrades,\x20the\x20<code>go</code>\x20command\x20updates\x20the\x20requirements\x20in\x20<code>go.mod</code>.\x20\x20It\x0awill\x20change\x20the\x20requirement\x20on\x20B\x20to\x20version\x201.3.\x20It\x20will\x20also\x20add\x20requirements\x0aon\x20C\x201.4\x20and\x20D\x201.3\x20with\x20<code>//\x20indirect</code>\x20comments,\x20since\x20those\x20versions\x20would\x20not\x0abe\x20selected\x20otherwise.</p>\x0a<h3\x20id=\"mvs-downgrade\">Downgrade</h3>\x0a<p>The\x20<a\x20href=\"#go-get\"><code>go\x20get</code></a>\x20command\x20may\x20also\x20be\x20used\x20to\x20downgrade\x20a\x20set\x20of\x0amodules.\x20To\x20perform\x20a\x20downgrade,\x20the\x20<code>go</code>\x20command\x20changes\x20the\x20module\x20graph\x20by\x0aremoving\x20versions\x20above\x20the\x20downgraded\x20versions.\x20It\x20also\x20removes\x20versions\x20of\x0aother\x20modules\x20that\x20depend\x20on\x20removed\x20versions,\x20since\x20they\x20may\x20not\x20be\x20compatible\x0awith\x20the\x20downgraded\x20versions\x20of\x20their\x20dependencies.\x20If\x20the\x20main\x20module\x20requires\x0aa\x20module\x20version\x20removed\x20by\x20downgrading,\x20the\x20requirement\x20is\x20changed\x20to\x20a\x0aprevious\x20version\x20that\x20has\x20not\x20been\x20removed.\x20If\x20no\x20previous\x20version\x20is\x20available,\x0athe\x20requirement\x20is\x20dropped.</p>\x0a<p>Consider\x20the\x20example\x20below.\x20Suppose\x20that\x20a\x20problem\x20was\x20found\x20with\x20C\x201.4,\x20so\x20we\x0adowngrade\x20to\x20C\x201.3.\x20C\x201.4\x20is\x20removed\x20from\x20the\x20module\x20graph.\x20B\x201.2\x20is\x20also\x0aremoved,\x20since\x20it\x20requires\x20C\x201.4\x20or\x20higher.\x20The\x20main\x20module's\x20requirement\x20on\x20B\x0ais\x20changed\x20to\x201.1.</p>\x0a<p><img\x20src=\"/doc/mvs/downgrade.svg\"\x20alt=\"Module\x20version\x20graph\x20with\x20downgrade\"\x20title=\"MVS\x20downgrade\"></p>\x0a<p><a\x20href=\"#go-get\"><code>go\x20get</code></a>\x20can\x20also\x20remove\x20dependencies\x20entirely,\x20using\x20an\x20<code>@none</code>\x0asuffix\x20after\x20an\x20argument.\x20This\x20works\x20similarly\x20to\x20a\x20downgrade.\x20All\x20versions\x0aof\x20the\x20named\x20module\x20are\x20removed\x20from\x20the\x20module\x20graph.</p>\x0a<h2\x20id=\"non-module-compat\">Compatibility\x20with\x20non-module\x20repositories</h2>\x0a<p>To\x20ensure\x20a\x20smooth\x20transition\x20from\x20<code>GOPATH</code>\x20to\x20modules,\x20the\x20<code>go</code>\x20command\x20can\x0adownload\x20and\x20build\x20packages\x20in\x20module-aware\x20mode\x20from\x20repositories\x20that\x20have\x20not\x0amigrated\x20to\x20modules\x20by\x20adding\x20a\x20<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x20file</a>.</p>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20downloads\x20a\x20module\x20at\x20a\x20given\x20version\x20<a\x20href=\"#vcs\">directly</a>\x0afrom\x20a\x20repository,\x20it\x20looks\x20up\x20a\x20repository\x20URL\x20for\x20the\x20module\x20path,\x20maps\x20the\x0aversion\x20to\x20a\x20revision\x20within\x20the\x20repository,\x20then\x20extracts\x20an\x20archive\x20of\x20the\x0arepository\x20at\x20that\x20revision.\x20If\x20the\x20<a\x20href=\"#glos-module-path\">module's\x20path</a>\x20is\x20equal\x0ato\x20the\x20<a\x20href=\"#glos-repository-root-path\">repository\x20root\x20path</a>,\x20and\x20the\x20repository\x0aroot\x20directory\x20does\x20not\x20contain\x20a\x20<code>go.mod</code>\x20file,\x20the\x20<code>go</code>\x20command\x20synthesizes\x20a\x0a<code>go.mod</code>\x20file\x20in\x20the\x20module\x20cache\x20that\x20contains\x20a\x20<a\x20href=\"#go.mod-module\"><code>module</code>\x0adirective</a>\x20and\x20nothing\x20else.\x20Since\x20synthetic\x20<code>go.mod</code>\x20files\x20do\x0anot\x20contain\x20<a\x20href=\"#go.mod-require\"><code>require</code>\x20directives</a>\x20for\x20their\x20dependencies,\x0aother\x20modules\x20that\x20depend\x20on\x20them\x20may\x20need\x20additional\x20<code>require</code>\x20directives\x20(with\x0a<code>//\x20indirect</code>\x20comments)\x20to\x20ensure\x20each\x20dependency\x20is\x20fetched\x20at\x20the\x20same\x20version\x0aon\x20every\x20build.</p>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20downloads\x20a\x20module\x20from\x20a\x0a<a\x20href=\"#communicating-with-proxies\">proxy</a>,\x20it\x20downloads\x20the\x20<code>go.mod</code>\x20file\x20separately\x0afrom\x20the\x20rest\x20of\x20the\x20module\x20content.\x20The\x20proxy\x20is\x20expected\x20to\x20serve\x20a\x20synthetic\x0a<code>go.mod</code>\x20file\x20if\x20the\x20original\x20module\x20didn't\x20have\x20one.</p>\x0a<h3\x20id=\"incompatible-versions\"><code>+incompatible</code>\x20versions</h3>\x0a<p>A\x20module\x20released\x20at\x20major\x20version\x202\x20or\x20higher\x20must\x20have\x20a\x20matching\x20<a\x20href=\"#major-version-suffixes\">major\x0aversion\x20suffix</a>\x20on\x20its\x20module\x20path.\x20For\x20example,\x20if\x20a\x0amodule\x20is\x20released\x20at\x20<code>v2.0.0</code>,\x20its\x20path\x20must\x20have\x20a\x20<code>/v2</code>\x20suffix.\x20This\x20allows\x0athe\x20<code>go</code>\x20command\x20to\x20treat\x20multiple\x20major\x20versions\x20of\x20a\x20project\x20as\x20distinct\x0amodules,\x20even\x20if\x20they're\x20developed\x20in\x20the\x20same\x20repository.</p>\x0a<p>The\x20major\x20version\x20suffix\x20requirement\x20was\x20introduced\x20when\x20module\x20support\x20was\x0aadded\x20to\x20the\x20<code>go</code>\x20command,\x20and\x20many\x20repositories\x20had\x20already\x20tagged\x20releases\x0awith\x20major\x20version\x20<code>2</code>\x20or\x20higher\x20before\x20that.\x20To\x20maintain\x20compatibility\x20with\x0athese\x20repositories,\x20the\x20<code>go</code>\x20command\x20adds\x20an\x20<code>+incompatible</code>\x20suffix\x20to\x20versions\x0awith\x20major\x20version\x202\x20or\x20higher\x20without\x20a\x20<code>go.mod</code>\x20file.\x20<code>+incompatible</code>\x0aindicates\x20that\x20a\x20version\x20is\x20part\x20of\x20the\x20same\x20module\x20as\x20versions\x20with\x20lower\x20major\x0aversion\x20numbers;\x20consequently,\x20the\x20<code>go</code>\x20command\x20may\x20automatically\x20upgrade\x20to\x0ahigher\x20<code>+incompatible</code>\x20versions\x20even\x20though\x20it\x20may\x20break\x20the\x20build.</p>\x0a<p>Consider\x20the\x20example\x20requirement\x20below:</p>\x0a<pre><code>require\x20example.com/m\x20v4.1.2+incompatible\x0a</code></pre>\x0a<p>The\x20version\x20<code>v4.1.2+incompatible</code>\x20refers\x20to\x20the\x20<a\x20href=\"#glos-semantic-version-tag\">semantic\x20version\x0atag</a>\x20<code>v4.1.2</code>\x20in\x20the\x20repository\x20that\x20provides\x20the\x0amodule\x20<code>example.com/m</code>.\x20The\x20module\x20must\x20be\x20in\x20the\x20repository\x20root\x20directory\x0a(that\x20is,\x20the\x20<a\x20href=\"#glos-module-path\">repository\x20root\x20path</a>\x20must\x20also\x20be\x0a<code>example.com/m</code>),\x20and\x20a\x20<code>go.mod</code>\x20file\x20must\x20not\x20be\x20present.\x20The\x20module\x20may\x20have\x0aversions\x20with\x20lower\x20major\x20version\x20numbers\x20like\x20<code>v1.5.2</code>,\x20and\x20the\x20<code>go</code>\x20command\x0amay\x20upgrade\x20automatically\x20to\x20<code>v4.1.2+incompatible</code>\x20from\x20those\x20versions\x20(see\x0a<a\x20href=\"#minimal-version-selection\">minimal\x20version\x20selection\x20(MVS)</a>\x20for\x20information\x0aon\x20how\x20upgrades\x20work).</p>\x0a<p>A\x20repository\x20that\x20migrates\x20to\x20modules\x20after\x20version\x20<code>v2.0.0</code>\x20is\x20tagged\x20should\x0ausually\x20release\x20a\x20new\x20major\x20version.\x20In\x20the\x20example\x20above,\x20the\x20author\x20should\x0acreate\x20a\x20module\x20with\x20the\x20path\x20<code>example.com/m/v5</code>\x20and\x20should\x20release\x20version\x0a<code>v5.0.0</code>.\x20The\x20author\x20should\x20also\x20update\x20imports\x20of\x20packages\x20in\x20the\x20module\x20to\x20use\x0athe\x20prefix\x20<code>example.com/m/v5</code>\x20instead\x20of\x20<code>example.com/m</code>.\x20See\x20<a\x20href=\"https://blog.golang.org/v2-go-modules\">Go\x20Modules:\x20v2\x0aand\x20Beyond</a>\x20for\x20a\x20more\x20detailed\x20example.</p>\x0a<p>Note\x20that\x20the\x20<code>+incompatible</code>\x20suffix\x20should\x20not\x20appear\x20on\x20a\x20tag\x20in\x20a\x20repository;\x0aa\x20tag\x20like\x20<code>v4.1.2+incompatible</code>\x20will\x20be\x20ignored.\x20The\x20suffix\x20only\x20appears\x20in\x0aversions\x20used\x20by\x20the\x20<code>go</code>\x20command.\x20See\x20<a\x20href=\"#vcs-version\">Mapping\x20versions\x20to\x0acommits</a>\x20for\x20details\x20on\x20the\x20distinction\x20between\x20versions\x20and\x20tags.</p>\x0a<p>Note\x20also\x20that\x20the\x20<code>+incompatible</code>\x20suffix\x20may\x20appear\x20on\x0a<a\x20href=\"#glos-pseudo-version\">pseudo-versions</a>.\x20For\x20example,\x0a<code>v2.0.1-20200722182040-012345abcdef+incompatible</code>\x20may\x20be\x20a\x20valid\x20pseudo-version.</p>\x0a<!--\x20TODO(jayconrod):\x20Is\x20it\x20appropriate\x0ato\x20link\x20to\x20the\x20blog\x20here?\x20Ideally,\x20we\x20would\x20have\x20a\x20more\x20detailed\x20guide.\x20-->\x0a<h3\x20id=\"minimal-module-compatibility\">Minimal\x20module\x20compatibility</h3>\x0a<p>A\x20module\x20released\x20at\x20major\x20version\x202\x20or\x20higher\x20is\x20required\x20to\x20have\x20a\x20<a\x20href=\"#glos-major-version-suffix\">major\x0aversion\x20suffix</a>\x20on\x20its\x20<a\x20href=\"#glos-module-path\">module\x0apath</a>.\x20The\x20module\x20may\x20or\x20may\x20not\x20be\x20developed\x20in\x20a\x20<a\x20href=\"#glos-major-version-subdirectory\">major\x0aversion\x20subdirectory</a>\x20within\x20its\x20repository.\x0aThis\x20has\x20implications\x20for\x20packages\x20that\x20import\x20packages\x20within\x20the\x20module\x20when\x0abuilding\x20<code>GOPATH</code>\x20mode.</p>\x0a<p>Normally\x20in\x20<code>GOPATH</code>\x20mode,\x20a\x20package\x20is\x20stored\x20in\x20a\x20directory\x20matching\x20its\x0a<a\x20href=\"#glos-repository-root-path\">repository's\x20root\x20path</a>\x20joined\x20with\x20its\x20diretory\x0awithin\x20the\x20repository.\x20For\x20example,\x20a\x20package\x20in\x20the\x20repository\x20with\x20root\x20path\x0a<code>example.com/repo</code>\x20in\x20the\x20subdirectory\x20<code>sub</code>\x20would\x20be\x20stored\x20in\x0a<code>$GOPATH/src/example.com/repo/sub</code>\x20and\x20would\x20be\x20imported\x20as\x0a<code>example.com/repo/sub</code>.</p>\x0a<p>For\x20a\x20module\x20with\x20a\x20major\x20version\x20suffix,\x20one\x20might\x20expect\x20to\x20find\x20the\x20package\x0a<code>example.com/repo/v2/sub</code>\x20in\x20the\x20directory\x0a<code>$GOPATH/src/example.com/repo/v2/sub</code>.\x20This\x20would\x20require\x20the\x20module\x20to\x20be\x0adeveloped\x20in\x20the\x20<code>v2</code>\x20subdirectory\x20of\x20its\x20repository.\x20The\x20<code>go</code>\x20command\x20supports\x0athis\x20but\x20does\x20not\x20require\x20it\x20(see\x20<a\x20href=\"#vcs-version\">Mapping\x20versions\x20to\x20commits</a>).</p>\x0a<p>If\x20a\x20module\x20is\x20<em>not</em>\x20developed\x20in\x20a\x20major\x20version\x20subdirectory,\x20then\x20its\x0adirectory\x20in\x20<code>GOPATH</code>\x20will\x20not\x20contain\x20the\x20major\x20version\x20suffix,\x20and\x20its\x0apackages\x20may\x20be\x20imported\x20without\x20the\x20major\x20version\x20suffix.\x20In\x20the\x20example\x20above,\x0athe\x20package\x20would\x20be\x20found\x20in\x20the\x20directory\x20<code>$GOPATH/src/example.com/repo/sub</code>\x0aand\x20would\x20be\x20imported\x20as\x20<code>example.com/repo/sub</code>.</p>\x0a<p>This\x20creates\x20a\x20problem\x20for\x20packages\x20intended\x20to\x20be\x20built\x20in\x20both\x20module\x20mode\x0aand\x20<code>GOPATH</code>\x20mode:\x20module\x20mode\x20requires\x20a\x20suffix,\x20while\x20<code>GOPATH</code>\x20mode\x20does\x20not.</p>\x0a<p>To\x20fix\x20this,\x20<dfn>minimal\x20module\x20compatibility</dfn>\x20was\x20added\x20in\x20Go\x201.11\x20and\x0awas\x20backported\x20to\x20Go\x201.9.7\x20and\x201.10.3.\x20When\x20an\x20import\x20path\x20is\x20resolved\x20to\x20a\x0adirectory\x20in\x20<code>GOPATH</code>\x20mode:</p>\x0a<ul>\x0a<li>When\x20resolving\x20an\x20import\x20of\x20the\x20form\x20<code>$modpath/$vn/$dir</code>\x20where:\x0a<ul>\x0a<li><code>$modpath</code>\x20is\x20a\x20valid\x20module\x20path,</li>\x0a<li><code>$vn</code>\x20is\x20a\x20major\x20version\x20suffix,</li>\x0a<li><code>$dir</code>\x20is\x20a\x20possibly\x20empty\x20subdirectory,</li>\x0a</ul>\x0a</li>\x0a<li>If\x20all\x20of\x20the\x20following\x20are\x20true:\x0a<ul>\x0a<li>The\x20package\x20<code>$modpath/$vn/$dir</code>\x20is\x20not\x20present\x20in\x20any\x20relevant\x20<code>vendor</code>\x0adirectory.</li>\x0a<li>A\x20<code>go.mod</code>\x20file\x20is\x20present\x20in\x20the\x20same\x20directory\x20as\x20the\x20importing\x20file\x0aor\x20in\x20any\x20parent\x20directory\x20up\x20to\x20the\x20<code>$GOPATH/src</code>\x20root,</li>\x0a<li>No\x20<code>$GOPATH[i]/src/$modpath/$vn/$suffix</code>\x20directory\x20exists\x20(for\x20any\x20root\x0a<code>$GOPATH[i]</code>),</li>\x0a<li>The\x20file\x20<code>$GOPATH[d]/src/$modpath/go.mod</code>\x20exists\x20(for\x20some\x20root\x0a<code>$GOPATH[d]</code>)\x20and\x20declares\x20the\x20module\x20path\x20as\x20<code>$modpath/$vn</code>,</li>\x0a</ul>\x0a</li>\x0a<li>Then\x20the\x20import\x20of\x20<code>$modpath/$vn/$dir</code>\x20is\x20resolved\x20to\x20the\x20directory\x0a<code>$GOPATH[d]/src/$modpath/$dir</code>.</li>\x0a</ul>\x0a<p>This\x20rules\x20allow\x20packages\x20that\x20have\x20been\x20migrated\x20to\x20modules\x20to\x20import\x20other\x0apackages\x20that\x20have\x20been\x20migrated\x20to\x20modules\x20when\x20built\x20in\x20<code>GOPATH</code>\x20mode\x20even\x0awhen\x20a\x20major\x20version\x20subdirectory\x20was\x20not\x20used.</p>\x0a<h2\x20id=\"mod-commands\">Module-aware\x20commands</h2>\x0a<p>Most\x20<code>go</code>\x20commands\x20may\x20run\x20in\x20<em>Module-aware\x20mode</em>\x20or\x20<em><code>GOPATH</code>\x20mode</em>.\x20In\x0amodule-aware\x20mode,\x20the\x20<code>go</code>\x20command\x20uses\x20<code>go.mod</code>\x20files\x20to\x20find\x20versioned\x0adependencies,\x20and\x20it\x20typically\x20loads\x20packages\x20out\x20of\x20the\x20<a\x20href=\"#glos-module-cache\">module\x0acache</a>,\x20downloading\x20modules\x20if\x20they\x20are\x20missing.\x20In\x20<code>GOPATH</code>\x0amode,\x20the\x20<code>go</code>\x20command\x20ignores\x20modules;\x20it\x20looks\x20in\x20<code>vendor</code>\x20directories\x20and\x20in\x0a<code>GOPATH</code>\x20to\x20find\x20dependencies.</p>\x0a<p>Module-aware\x20mode\x20is\x20active\x20by\x20default\x20whenever\x20a\x20<code>go.mod</code>\x20file\x20is\x20found\x20in\x20the\x0acurrent\x20directory\x20or\x20in\x20any\x20parent\x20directory.\x20For\x20more\x20fine-grained\x20control,\x20the\x0a<code>GO111MODULE</code>\x20environment\x20variable\x20may\x20be\x20set\x20to\x20one\x20of\x20three\x20values:\x20<code>on</code>,\x0a<code>off</code>,\x20or\x20<code>auto</code>.</p>\x0a<ul>\x0a<li>If\x20<code>GO111MODULE=off</code>,\x20the\x20<code>go</code>\x20command\x20ignores\x20<code>go.mod</code>\x20files\x20and\x20runs\x20in\x0a<code>GOPATH</code>\x20mode.</li>\x0a<li>If\x20<code>GO111MODULE=on</code>,\x20the\x20<code>go</code>\x20command\x20runs\x20in\x20module-aware\x20mode,\x20even\x20when\x0ano\x20<code>go.mod</code>\x20file\x20is\x20present.\x20Not\x20all\x20commands\x20work\x20without\x20a\x20<code>go.mod</code>\x20file:\x0asee\x20<a\x20href=\"#commands-outside\">Module\x20commands\x20outside\x20a\x20module</a>.</li>\x0a<li>If\x20<code>GO111MODULE=auto</code>\x20or\x20is\x20unset,\x20the\x20<code>go</code>\x20command\x20runs\x20in\x20module-aware\x0amode\x20if\x20a\x20<code>go.mod</code>\x20file\x20is\x20present\x20in\x20the\x20current\x20directory\x20or\x20any\x20parent\x0adirectory\x20(the\x20default\x20behavior).</li>\x0a</ul>\x0a<p>In\x20module-aware\x20mode,\x20<code>GOPATH</code>\x20no\x20longer\x20defines\x20the\x20meaning\x20of\x20imports\x20during\x20a\x0abuild,\x20but\x20it\x20still\x20stores\x20downloaded\x20dependencies\x20(in\x20<code>GOPATH/pkg/mod</code>;\x20see\x0a<a\x20href=\"#module-cache\">Module\x20cache</a>)\x20and\x20installed\x20commands\x20(in\x20<code>GOPATH/bin</code>,\x20unless\x0a<code>GOBIN</code>\x20is\x20set).</p>\x0a<h3\x20id=\"build-commands\">Build\x20commands</h3>\x0a<h3\x20id=\"vendoring\">Vendoring</h3>\x0a<p>When\x20using\x20modules,\x20the\x20<code>go</code>\x20command\x20typically\x20satisfies\x20dependencies\x20by\x0adownloading\x20modules\x20from\x20their\x20sources\x20into\x20the\x20module\x20cache,\x20then\x20loading\x0apackages\x20from\x20those\x20downloaded\x20copies.\x20<em>Vendoring</em>\x20may\x20be\x20used\x20to\x20allow\x0ainteroperation\x20with\x20older\x20versions\x20of\x20Go,\x20or\x20to\x20ensure\x20that\x20all\x20files\x20used\x20for\x20a\x0abuild\x20are\x20stored\x20in\x20a\x20single\x20file\x20tree.</p>\x0a<p>The\x20<code>go\x20mod\x20vendor</code>\x20command\x20constructs\x20a\x20directory\x20named\x20<code>vendor</code>\x20in\x20the\x20<a\x20href=\"#glos-main-module\">main\x0amodule's</a>\x20root\x20directory\x20containing\x20copies\x20of\x20all\x20packages\x0aneeded\x20to\x20build\x20and\x20test\x20packages\x20in\x20the\x20main\x20module.\x20Packages\x20that\x20are\x20only\x0aimported\x20by\x20tests\x20of\x20packages\x20outside\x20the\x20main\x20module\x20are\x20not\x20included.\x20As\x20with\x0a<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20tidy</code></a>\x20and\x20other\x20module\x20commands,\x20<a\x20href=\"#glos-build-constraint\">build\x0aconstraints</a>\x20except\x20for\x20<code>ignore</code>\x20are\x20not\x20considered\x20when\x0aconstructing\x20the\x20<code>vendor</code>\x20directory.</p>\x0a<p><code>go\x20mod\x20vendor</code>\x20also\x20creates\x20the\x20file\x20<code>vendor/modules.txt</code>\x20that\x20contains\x20a\x20list\x0aof\x20vendored\x20packages\x20and\x20the\x20module\x20versions\x20they\x20were\x20copied\x20from.\x20When\x0avendoring\x20is\x20enabled,\x20this\x20manifest\x20is\x20used\x20as\x20a\x20source\x20of\x20module\x20version\x0ainformation,\x20as\x20reported\x20by\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m</code></a>\x20and\x20<a\x20href=\"#go-version-m\"><code>go\x20version\x20-m</code></a>.\x20When\x20the\x20<code>go</code>\x20command\x20reads\x20<code>vendor/modules.txt</code>,\x20it\x20checks\x0athat\x20the\x20module\x20versions\x20are\x20consistent\x20with\x20<code>go.mod</code>.\x20If\x20<code>go.mod</code>\x20has\x20changed\x0asince\x20<code>vendor/modules.txt</code>\x20was\x20generated,\x20the\x20<code>go</code>\x20command\x20will\x20report\x20an\x20error.\x0a<code>go\x20mod\x20vendor</code>\x20should\x20be\x20run\x20again\x20to\x20update\x20the\x20<code>vendor</code>\x20directory.</p>\x0a<p>If\x20the\x20<code>vendor</code>\x20directory\x20is\x20present\x20in\x20the\x20main\x20module's\x20root\x20directory,\x20it\x0awill\x20be\x20used\x20automatically\x20if\x20the\x20<a\x20href=\"#go.mod-go\"><code>go</code>\x20version</a>\x20in\x20the\x20main\x0amodule's\x20<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x20file</a>\x20is\x20<code>1.14</code>\x20or\x20higher.\x20To\x20explicitly\x0aenable\x20vendoring,\x20invoke\x20the\x20<code>go</code>\x20command\x20with\x20the\x20flag\x20<code>-mod=vendor</code>.\x20To\x0adisable\x20vendoring,\x20use\x20the\x20flag\x20<code>-mod=mod</code>.</p>\x0a<p>When\x20vendoring\x20is\x20enabled,\x20<a\x20href=\"#build-commands\">build\x20commands</a>\x20like\x20<code>go\x20build</code>\x20and\x0a<code>go\x20test</code>\x20load\x20packages\x20from\x20the\x20<code>vendor</code>\x20directory\x20instead\x20of\x20accessing\x20the\x0anetwork\x20or\x20the\x20local\x20module\x20cache.\x20The\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m</code></a>\x20command\x20only\x0aprints\x20information\x20about\x20modules\x20listed\x20in\x20<code>go.mod</code>.\x20<code>go\x20mod</code>\x20commands\x20such\x20as\x0a<a\x20href=\"#go-mod-download\"><code>go\x20mod\x20download</code></a>\x20and\x20<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20tidy</code></a>\x20do\x20not\x0awork\x20differently\x20when\x20vendoring\x20is\x20enabled\x20and\x20will\x20still\x20download\x20modules\x20and\x0aaccess\x20the\x20module\x20cache.\x20<a\x20href=\"#go-get\"><code>go\x20get</code></a>\x20also\x20does\x20not\x20work\x20differently\x20when\x0avendoring\x20is\x20enabled.</p>\x0a<p>Unlike\x20<a\x20href=\"https://golang.org/s/go15vendor\">vendoring\x20in\x20<code>GOPATH</code></a>,\x20the\x20<code>go</code>\x0acommand\x20ignores\x20vendor\x20directories\x20in\x20locations\x20other\x20than\x20the\x20main\x20module's\x0aroot\x20directory.</p>\x0a<h3\x20id=\"go-get\"><code>go\x20get</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20get\x20[-d]\x20[-t]\x20[-u]\x20[build\x20flags]\x20[packages]\x0a</code></pre>\x0a<p>Examples:</p>\x0a<pre><code>#\x20Install\x20the\x20latest\x20version\x20of\x20a\x20tool.\x0a$\x20go\x20get\x20golang.org/x/tools/cmd/goimports\x0a\x0a#\x20Upgrade\x20a\x20specific\x20module.\x0a$\x20go\x20get\x20-d\x20golang.org/x/net\x0a\x0a#\x20Upgrade\x20modules\x20that\x20provide\x20packages\x20imported\x20by\x20packages\x20in\x20the\x20main\x20module.\x0a$\x20go\x20get\x20-d\x20-u\x20./...\x0a\x0a#\x20Upgrade\x20or\x20downgrade\x20to\x20a\x20specific\x20version\x20of\x20a\x20module.\x0a$\x20go\x20get\x20-d\x20golang.org/x/text@v0.3.2\x0a\x0a#\x20Update\x20to\x20the\x20commit\x20on\x20the\x20module's\x20master\x20branch.\x0a$\x20go\x20get\x20-d\x20golang.org/x/text@master\x0a\x0a#\x20Remove\x20a\x20dependency\x20on\x20a\x20module\x20and\x20downgrade\x20modules\x20that\x20require\x20it\x0a#\x20to\x20versions\x20that\x20don't\x20require\x20it.\x0a$\x20go\x20get\x20-d\x20golang.org/x/text@none\x0a</code></pre>\x0a<p>The\x20<code>go\x20get</code>\x20command\x20updates\x20module\x20dependencies\x20in\x20the\x20<a\x20href=\"#go.mod-files\"><code>go.mod</code>\x0afile</a>\x20for\x20the\x20<a\x20href=\"#glos-main-module\">main\x20module</a>,\x20then\x20builds\x20and\x0ainstalls\x20packages\x20listed\x20on\x20the\x20command\x20line.</p>\x0a<p>The\x20first\x20step\x20is\x20to\x20determine\x20which\x20modules\x20to\x20update.\x20<code>go\x20get</code>\x20accepts\x20a\x20list\x0aof\x20packages,\x20package\x20patterns,\x20and\x20module\x20paths\x20as\x20arguments.\x20If\x20a\x20package\x0aargument\x20is\x20specified,\x20<code>go\x20get</code>\x20updates\x20the\x20module\x20that\x20provides\x20the\x20package.\x0aIf\x20a\x20package\x20pattern\x20is\x20specified\x20(for\x20example,\x20<code>all</code>\x20or\x20a\x20path\x20with\x20a\x20<code>...</code>\x0awildcard),\x20<code>go\x20get</code>\x20expands\x20the\x20pattern\x20to\x20a\x20set\x20of\x20packages,\x20then\x20updates\x20the\x0amodules\x20that\x20provide\x20the\x20packages.\x20If\x20an\x20argument\x20names\x20a\x20module\x20but\x20not\x20a\x0apackage\x20(for\x20example,\x20the\x20module\x20<code>golang.org/x/net</code>\x20has\x20no\x20package\x20in\x20its\x20root\x0adirectory),\x20<code>go\x20get</code>\x20will\x20update\x20the\x20module\x20but\x20will\x20not\x20build\x20a\x20package.\x20If\x20no\x0aarguments\x20are\x20specified,\x20<code>go\x20get</code>\x20acts\x20as\x20if\x20<code>.</code>\x20were\x20specified\x20(the\x20package\x20in\x0athe\x20current\x20directory);\x20this\x20may\x20be\x20used\x20together\x20with\x20the\x20<code>-u</code>\x20flag\x20to\x20update\x0amodules\x20that\x20provide\x20imported\x20packages.</p>\x0a<p>Each\x20argument\x20may\x20include\x20a\x20<dfn>version\x20query\x20suffix</dfn>\x20indicating\x20the\x0adesired\x20version,\x20as\x20in\x20<code>go\x20get\x20golang.org/x/text@v0.3.0</code>.\x20A\x20version\x20query\x0asuffix\x20consists\x20of\x20an\x20<code>@</code>\x20symbol\x20followed\x20by\x20a\x20<a\x20href=\"#version-queries\">version\x20query</a>,\x0awhich\x20may\x20indicate\x20a\x20specific\x20version\x20(<code>v0.3.0</code>),\x20a\x20version\x20prefix\x20(<code>v0.3</code>),\x0aa\x20branch\x20or\x20tag\x20name\x20(<code>master</code>),\x20a\x20revision\x20(<code>1234abcd</code>),\x20or\x20one\x20of\x20the\x20special\x0aqueries\x20<code>latest</code>,\x20<code>upgrade</code>,\x20<code>patch</code>,\x20or\x20<code>none</code>.\x20If\x20no\x20version\x20is\x20given,\x0a<code>go\x20get</code>\x20uses\x20the\x20<code>@upgrade</code>\x20query.</p>\x0a<p>Once\x20<code>go\x20get</code>\x20has\x20resolved\x20its\x20arguments\x20to\x20specific\x20modules\x20and\x20versions,\x20<code>go\x20get</code>\x20will\x20add,\x20change,\x20or\x20remove\x20<a\x20href=\"#go.mod-require\"><code>require</code>\x20directives</a>\x20in\x20the\x0amain\x20module's\x20<code>go.mod</code>\x20file\x20to\x20ensure\x20the\x20modules\x20remain\x20at\x20the\x20desired\x0aversions\x20in\x20the\x20future.\x20Note\x20that\x20required\x20versions\x20in\x20<code>go.mod</code>\x20files\x20are\x0a<em>minimum\x20versions</em>\x20and\x20may\x20be\x20increased\x20automatically\x20as\x20new\x20dependencies\x20are\x0aadded.\x20See\x20<a\x20href=\"#minimal-version-selection\">Minimal\x20version\x20selection\x20(MVS)</a>\x20for\x0adetails\x20on\x20how\x20versions\x20are\x20selected\x20and\x20conflicts\x20are\x20resolved\x20by\x20module-aware\x0acommands.</p>\x0a<!--\x20TODO(jayconrod):\x20add\x20diagrams\x20for\x20the\x20examples\x20below.\x0aWe\x20need\x20a\x20consistent\x20strategy\x20for\x20visualizing\x20module\x20graphs\x20here,\x20in\x20the\x20MVS\x0asection,\x20and\x20perhaps\x20in\x20other\x20documentation\x20(blog\x20posts,\x20etc.).\x0a-->\x0a<p>Other\x20modules\x20may\x20be\x20upgraded\x20when\x20a\x20module\x20named\x20on\x20the\x20command\x20line\x20is\x20added,\x0aupgraded,\x20or\x20downgraded\x20if\x20the\x20new\x20version\x20of\x20the\x20named\x20module\x20requires\x20other\x0amodules\x20at\x20higher\x20versions.\x20For\x20example,\x20suppose\x20module\x20<code>example.com/a</code>\x20is\x0aupgraded\x20to\x20version\x20<code>v1.5.0</code>,\x20and\x20that\x20version\x20requires\x20module\x20<code>example.com/b</code>\x0aat\x20version\x20<code>v1.2.0</code>.\x20If\x20module\x20<code>example.com/b</code>\x20is\x20currently\x20required\x20at\x20version\x0a<code>v1.1.0</code>,\x20<code>go\x20get\x20example.com/a@v1.5.0</code>\x20will\x20also\x20upgrade\x20<code>example.com/b</code>\x20to\x0a<code>v1.2.0</code>.</p>\x0a<p>Other\x20modules\x20may\x20be\x20downgraded\x20when\x20a\x20module\x20named\x20on\x20the\x20command\x20line\x20is\x0adowngraded\x20or\x20removed.\x20To\x20continue\x20the\x20above\x20example,\x20suppose\x20module\x0a<code>example.com/b</code>\x20is\x20downgraded\x20to\x20<code>v1.1.0</code>.\x20Module\x20<code>example.com/a</code>\x20would\x20also\x20be\x0adowngraded\x20to\x20a\x20version\x20that\x20requires\x20<code>example.com/b</code>\x20at\x20version\x20<code>v1.1.0</code>\x20or\x0alower.</p>\x0a<p>A\x20module\x20requirement\x20may\x20be\x20removed\x20using\x20the\x20version\x20suffix\x20<code>@none</code>.\x20This\x20is\x20a\x0aspecial\x20kind\x20of\x20downgrade.\x20Modules\x20that\x20depend\x20on\x20the\x20removed\x20module\x20will\x20be\x0adowngraded\x20or\x20removed\x20as\x20needed.\x20A\x20module\x20requirement\x20may\x20be\x20removed\x20even\x20if\x20one\x0aor\x20more\x20of\x20its\x20packages\x20are\x20imported\x20by\x20packages\x20in\x20the\x20main\x20module.\x20In\x20this\x0acase,\x20the\x20next\x20build\x20command\x20may\x20add\x20a\x20new\x20module\x20requirement.</p>\x0a<p>If\x20a\x20module\x20is\x20needed\x20at\x20two\x20different\x20versions\x20(specified\x20explicitly\x20in\x20command\x0aline\x20arguments\x20or\x20to\x20satisfy\x20upgrades\x20and\x20downgrades),\x20<code>go\x20get</code>\x20will\x20report\x20an\x0aerror.</p>\x0a<p>After\x20<code>go\x20get</code>\x20updates\x20the\x20<code>go.mod</code>\x20file,\x20it\x20builds\x20the\x20packages\x20named\x0aon\x20the\x20command\x20line.\x20Executables\x20will\x20be\x20installed\x20in\x20the\x20directory\x20named\x20by\x0athe\x20<code>GOBIN</code>\x20environment\x20variable,\x20which\x20defaults\x20to\x20<code>$GOPATH/bin</code>\x20or\x0a<code>$HOME/go/bin</code>\x20if\x20the\x20<code>GOPATH</code>\x20environment\x20variable\x20is\x20not\x20set.</p>\x0a<p><code>go\x20get</code>\x20supports\x20the\x20following\x20flags:</p>\x0a<ul>\x0a<li>The\x20<code>-d</code>\x20flag\x20tells\x20<code>go\x20get</code>\x20not\x20to\x20build\x20or\x20install\x20packages.\x20When\x20<code>-d</code>\x20is\x0aused,\x20<code>go\x20get</code>\x20will\x20only\x20manage\x20dependencies\x20in\x20<code>go.mod</code>.</li>\x0a<li>The\x20<code>-u</code>\x20flag\x20tells\x20<code>go\x20get</code>\x20to\x20upgrade\x20modules\x20providing\x20packages\x0aimported\x20directly\x20or\x20indirectly\x20by\x20packages\x20named\x20on\x20the\x20command\x20line.\x0aEach\x20module\x20selected\x20by\x20<code>-u</code>\x20will\x20be\x20upgraded\x20to\x20its\x20latest\x20version\x20unless\x0ait\x20is\x20already\x20required\x20at\x20a\x20higher\x20version\x20(a\x20pre-release).</li>\x0a<li>The\x20<code>-u=patch</code>\x20flag\x20(not\x20<code>-u\x20patch</code>)\x20also\x20tells\x20<code>go\x20get</code>\x20to\x20upgrade\x0adependencies,\x20but\x20<code>go\x20get</code>\x20will\x20upgrade\x20each\x20dependency\x20to\x20the\x20latest\x20patch\x0aversion\x20(similar\x20to\x20the\x20<code>@patch</code>\x20version\x20query).</li>\x0a<li>The\x20<code>-t</code>\x20flag\x20tells\x20<code>go\x20get</code>\x20to\x20consider\x20modules\x20needed\x20to\x20build\x20tests\x0aof\x20packages\x20named\x20on\x20the\x20command\x20line.\x20When\x20<code>-t</code>\x20and\x20<code>-u</code>\x20are\x20used\x20together,\x0a<code>go\x20get</code>\x20will\x20update\x20test\x20dependencies\x20as\x20well.</li>\x0a<li>The\x20<code>-insecure</code>\x20flag\x20should\x20no\x20longer\x20be\x20used.\x20It\x20permits\x20<code>go\x20get</code>\x20to\x20resolve\x0acustom\x20import\x20paths\x20and\x20fetch\x20from\x20repositories\x20and\x20module\x20proxies\x20using\x0ainsecure\x20schemes\x20such\x20as\x20HTTP.\x20The\x20<code>GOINSECURE</code>\x20<a\x20href=\"#environment-variables\">environment\x0avariable</a>\x20provides\x20more\x20fine-grained\x20control\x20and\x0ashould\x20be\x20used\x20instead.</li>\x0a</ul>\x0a<h3\x20id=\"go-list-m\"><code>go\x20list\x20-m</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20list\x20-m\x20[-u]\x20[-versions]\x20[list\x20flags]\x20[modules]\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>$\x20go\x20list\x20-m\x20all\x0a$\x20go\x20list\x20-m\x20-versions\x20example.com/m\x0a$\x20go\x20list\x20-m\x20-json\x20example.com/m@latest\x0a</code></pre>\x0a<p>The\x20<code>-m</code>\x20flag\x20causes\x20<code>go\x20list</code>\x20to\x20list\x20modules\x20instead\x20of\x20packages.\x20In\x20this\x0amode,\x20the\x20arguments\x20to\x20<code>go\x20list</code>\x20may\x20be\x20modules,\x20module\x20patterns\x20(containing\x20the\x0a<code>...</code>\x20wildcard),\x20<a\x20href=\"#version-queries\">version\x20queries</a>,\x20or\x20the\x20special\x20pattern\x0a<code>all</code>,\x20which\x20matches\x20all\x20modules\x20in\x20the\x20<a\x20href=\"#glos-build-list\">build\x20list</a>.\x20If\x20no\x0aarguments\x20are\x20specified,\x20the\x20<a\x20href=\"#glos-main-module\">main\x20module</a>\x20is\x20listed.</p>\x0a<p>When\x20listing\x20modules,\x20the\x20<code>-f</code>\x20flag\x20still\x20specifies\x20a\x20format\x20template\x20applied\x0ato\x20a\x20Go\x20struct,\x20but\x20now\x20a\x20<code>Module</code>\x20struct:</p>\x0a<pre><code>type\x20Module\x20struct\x20{\x0a\x20\x20\x20\x20Path\x20\x20\x20\x20\x20\x20string\x20\x20\x20\x20\x20\x20\x20//\x20module\x20path\x0a\x20\x20\x20\x20Version\x20\x20\x20string\x20\x20\x20\x20\x20\x20\x20//\x20module\x20version\x0a\x20\x20\x20\x20Versions\x20\x20[]string\x20\x20\x20\x20\x20//\x20available\x20module\x20versions\x20(with\x20-versions)\x0a\x20\x20\x20\x20Replace\x20\x20\x20*Module\x20\x20\x20\x20\x20\x20//\x20replaced\x20by\x20this\x20module\x0a\x20\x20\x20\x20Time\x20\x20\x20\x20\x20\x20*time.Time\x20\x20\x20//\x20time\x20version\x20was\x20created\x0a\x20\x20\x20\x20Update\x20\x20\x20\x20*Module\x20\x20\x20\x20\x20\x20//\x20available\x20update,\x20if\x20any\x20(with\x20-u)\x0a\x20\x20\x20\x20Main\x20\x20\x20\x20\x20\x20bool\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20is\x20this\x20the\x20main\x20module?\x0a\x20\x20\x20\x20Indirect\x20\x20bool\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20is\x20this\x20module\x20only\x20an\x20indirect\x20dependency\x20of\x20main\x20module?\x0a\x20\x20\x20\x20Dir\x20\x20\x20\x20\x20\x20\x20string\x20\x20\x20\x20\x20\x20\x20//\x20directory\x20holding\x20files\x20for\x20this\x20module,\x20if\x20any\x0a\x20\x20\x20\x20GoMod\x20\x20\x20\x20\x20string\x20\x20\x20\x20\x20\x20\x20//\x20path\x20to\x20go.mod\x20file\x20for\x20this\x20module,\x20if\x20any\x0a\x20\x20\x20\x20GoVersion\x20string\x20\x20\x20\x20\x20\x20\x20//\x20go\x20version\x20used\x20in\x20module\x0a\x20\x20\x20\x20Error\x20\x20\x20\x20\x20*ModuleError\x20//\x20error\x20loading\x20module\x0a}\x0a\x0atype\x20ModuleError\x20struct\x20{\x0a\x20\x20\x20\x20Err\x20string\x20//\x20the\x20error\x20itself\x0a}\x0a</code></pre>\x0a<p>The\x20default\x20output\x20is\x20to\x20print\x20the\x20module\x20path\x20and\x20then\x20information\x20about\x20the\x0aversion\x20and\x20replacement\x20if\x20any.\x20For\x20example,\x20<code>go\x20list\x20-m\x20all</code>\x20might\x20print:</p>\x0a<pre><code>example.com/main/module\x0agolang.org/x/text\x20v0.3.0\x20=&gt;\x20/tmp/text\x0arsc.io/pdf\x20v0.1.1\x0a</code></pre>\x0a<p>The\x20<code>Module</code>\x20struct\x20has\x20a\x20<code>String</code>\x20method\x20that\x20formats\x20this\x20line\x20of\x20output,\x20so\x0athat\x20the\x20default\x20format\x20is\x20equivalent\x20to\x20<code>-f\x20'{{.String}}'</code>.</p>\x0a<p>Note\x20that\x20when\x20a\x20module\x20has\x20been\x20replaced,\x20its\x20<code>Replace</code>\x20field\x20describes\x20the\x0areplacement\x20module\x20module,\x20and\x20its\x20<code>Dir</code>\x20field\x20is\x20set\x20to\x20the\x20replacement\x0amodule's\x20source\x20code,\x20if\x20present.\x20(That\x20is,\x20if\x20<code>Replace</code>\x20is\x20non-nil,\x20then\x20<code>Dir</code>\x0ais\x20set\x20to\x20<code>Replace.Dir</code>,\x20with\x20no\x20access\x20to\x20the\x20replaced\x20source\x20code.)</p>\x0a<p>The\x20<code>-u</code>\x20flag\x20adds\x20information\x20about\x20available\x20upgrades.\x20When\x20the\x20latest\x20version\x0aof\x20a\x20given\x20module\x20is\x20newer\x20than\x20the\x20current\x20one,\x20<code>list\x20-u</code>\x20sets\x20the\x20module's\x0a<code>Update</code>\x20field\x20to\x20information\x20about\x20the\x20newer\x20module.\x20The\x20module's\x20<code>String</code>\x0amethod\x20indicates\x20an\x20available\x20upgrade\x20by\x20formatting\x20the\x20newer\x20version\x20in\x0abrackets\x20after\x20the\x20current\x20version.\x20For\x20example,\x20<code>go\x20list\x20-m\x20-u\x20all</code>\x20might\x0aprint:</p>\x0a<pre><code>example.com/main/module\x0agolang.org/x/text\x20v0.3.0\x20[v0.4.0]\x20=&gt;\x20/tmp/text\x0arsc.io/pdf\x20v0.1.1\x20[v0.1.2]\x0a</code></pre>\x0a<p>(For\x20tools,\x20<code>go\x20list\x20-m\x20-u\x20-json\x20all</code>\x20may\x20be\x20more\x20convenient\x20to\x20parse.)</p>\x0a<p>The\x20<code>-versions</code>\x20flag\x20causes\x20<code>list</code>\x20to\x20set\x20the\x20module's\x20<code>Versions</code>\x20field\x20to\x20a\x0alist\x20of\x20all\x20known\x20versions\x20of\x20that\x20module,\x20ordered\x20according\x20to\x20semantic\x0aversioning,\x20lowest\x20to\x20highest.\x20The\x20flag\x20also\x20changes\x20the\x20default\x20output\x20format\x0ato\x20display\x20the\x20module\x20path\x20followed\x20by\x20the\x20space-separated\x20version\x20list.</p>\x0a<p>The\x20template\x20function\x20<code>module</code>\x20takes\x20a\x20single\x20string\x20argument\x20that\x20must\x20be\x20a\x0amodule\x20path\x20or\x20query\x20and\x20returns\x20the\x20specified\x20module\x20as\x20a\x20<code>Module</code>\x20struct.\x20If\x0aan\x20error\x20occurs,\x20the\x20result\x20will\x20be\x20a\x20<code>Module</code>\x20struct\x20with\x20a\x20non-nil\x20<code>Error</code>\x0afield.</p>\x0a<h3\x20id=\"go-mod-download\"><code>go\x20mod\x20download</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20download\x20[-json]\x20[-x]\x20[modules]\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>$\x20go\x20mod\x20download\x0a$\x20go\x20mod\x20download\x20golang.org/x/mod@v0.2.0\x0a</code></pre>\x0a<p>The\x20<code>go\x20mod\x20download</code>\x20command\x20downloads\x20the\x20named\x20modules\x20into\x20the\x20<a\x20href=\"#glos-module-cache\">module\x0acache</a>.\x20Arguments\x20can\x20be\x20module\x20paths\x20or\x20module\x0apatterns\x20selecting\x20dependencies\x20of\x20the\x20main\x20module\x20or\x20<a\x20href=\"#version-queries\">version\x0aqueries</a>\x20of\x20the\x20form\x20<code>path@version</code>.\x20With\x20no\x20arguments,\x0a<code>download</code>\x20applies\x20to\x20all\x20dependencies\x20of\x20the\x20<a\x20href=\"#glos-main-module\">main\x20module</a>.</p>\x0a<p>The\x20<code>go</code>\x20command\x20will\x20automatically\x20download\x20modules\x20as\x20needed\x20during\x20ordinary\x0aexecution.\x20The\x20<code>go\x20mod\x20download</code>\x20command\x20is\x20useful\x20mainly\x20for\x20pre-filling\x20the\x0amodule\x20cache\x20or\x20for\x20loading\x20data\x20to\x20be\x20served\x20by\x20a\x20<a\x20href=\"#glos-module-proxy\">module\x0aproxy</a>.</p>\x0a<p>By\x20default,\x20<code>download</code>\x20writes\x20nothing\x20to\x20standard\x20output.\x20It\x20prints\x20progress\x0amessages\x20and\x20errors\x20to\x20standard\x20error.</p>\x0a<p>The\x20<code>-json</code>\x20flag\x20causes\x20<code>download</code>\x20to\x20print\x20a\x20sequence\x20of\x20JSON\x20objects\x20to\x0astandard\x20output,\x20describing\x20each\x20downloaded\x20module\x20(or\x20failure),\x20corresponding\x0ato\x20this\x20Go\x20struct:</p>\x0a<pre><code>type\x20Module\x20struct\x20{\x0a\x20\x20\x20\x20Path\x20\x20\x20\x20\x20string\x20//\x20module\x20path\x0a\x20\x20\x20\x20Version\x20\x20string\x20//\x20module\x20version\x0a\x20\x20\x20\x20Error\x20\x20\x20\x20string\x20//\x20error\x20loading\x20module\x0a\x20\x20\x20\x20Info\x20\x20\x20\x20\x20string\x20//\x20absolute\x20path\x20to\x20cached\x20.info\x20file\x0a\x20\x20\x20\x20GoMod\x20\x20\x20\x20string\x20//\x20absolute\x20path\x20to\x20cached\x20.mod\x20file\x0a\x20\x20\x20\x20Zip\x20\x20\x20\x20\x20\x20string\x20//\x20absolute\x20path\x20to\x20cached\x20.zip\x20file\x0a\x20\x20\x20\x20Dir\x20\x20\x20\x20\x20\x20string\x20//\x20absolute\x20path\x20to\x20cached\x20source\x20root\x20directory\x0a\x20\x20\x20\x20Sum\x20\x20\x20\x20\x20\x20string\x20//\x20checksum\x20for\x20path,\x20version\x20(as\x20in\x20go.sum)\x0a\x20\x20\x20\x20GoModSum\x20string\x20//\x20checksum\x20for\x20go.mod\x20(as\x20in\x20go.sum)\x0a}\x0a</code></pre>\x0a<p>The\x20<code>-x</code>\x20flag\x20causes\x20<code>download</code>\x20to\x20print\x20the\x20commands\x20<code>download</code>\x20executes\x0ato\x20standard\x20error.</p>\x0a<h3\x20id=\"go-mod-edit\"><code>go\x20mod\x20edit</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20edit\x20[editing\x20flags]\x20[-fmt|-print|-json]\x20[go.mod]\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>#\x20Add\x20a\x20replace\x20directive.\x0a$\x20go\x20mod\x20edit\x20-replace\x20example.com/a@v1.0.0=./a\x0a\x0a#\x20Remove\x20a\x20replace\x20directive.\x0a$\x20go\x20mod\x20edit\x20-dropreplace\x20example.com/a@v1.0.0\x0a\x0a#\x20Set\x20the\x20go\x20version,\x20add\x20a\x20requirement,\x20and\x20print\x20the\x20file\x0a#\x20instead\x20of\x20writing\x20it\x20to\x20disk.\x0a$\x20go\x20mod\x20edit\x20-go=1.14\x20-require=example.com/m@v1.0.0\x20-print\x0a\x0a#\x20Format\x20the\x20go.mod\x20file.\x0a$\x20go\x20mod\x20edit\x20-fmt\x0a\x0a#\x20Format\x20and\x20print\x20a\x20different\x20.mod\x20file.\x0a$\x20go\x20mod\x20edit\x20-print\x20tools.mod\x0a\x0a#\x20Print\x20a\x20JSON\x20representation\x20of\x20the\x20go.mod\x20file.\x0a$\x20go\x20mod\x20edit\x20-json\x0a</code></pre>\x0a<p>The\x20<code>go\x20mod\x20edit</code>\x20command\x20provides\x20a\x20command-line\x20interface\x20for\x20editing\x20and\x0aformatting\x20<code>go.mod</code>\x20files,\x20for\x20use\x20primarily\x20by\x20tools\x20and\x20scripts.\x20<code>go\x20mod\x20edit</code>\x0areads\x20only\x20one\x20<code>go.mod</code>\x20file;\x20it\x20does\x20not\x20look\x20up\x20information\x20about\x20other\x0amodules.\x20By\x20default,\x20<code>go\x20mod\x20edit</code>\x20reads\x20and\x20writes\x20the\x20<code>go.mod</code>\x20file\x20of\x20the\x0amain\x20module,\x20but\x20a\x20different\x20target\x20file\x20can\x20be\x20specified\x20after\x20the\x20editing\x0aflags.</p>\x0a<p>The\x20editing\x20flags\x20specify\x20a\x20sequence\x20of\x20editing\x20operations.</p>\x0a<ul>\x0a<li>The\x20<code>-module</code>\x20flag\x20changes\x20the\x20module's\x20path\x20(the\x20<code>go.mod</code>\x20file's\x20module\x0aline).</li>\x0a<li>The\x20<code>-go=version</code>\x20flag\x20sets\x20the\x20expected\x20Go\x20language\x20version.</li>\x0a<li>The\x20<code>-require=path@version</code>\x20and\x20<code>-droprequire=path</code>\x20flags\x20add\x20and\x20drop\x20a\x0arequirement\x20on\x20the\x20given\x20module\x20path\x20and\x20version.\x20Note\x20that\x20<code>-require</code>\x0aoverrides\x20any\x20existing\x20requirements\x20on\x20<code>path</code>.\x20These\x20flags\x20are\x20mainly\x20for\x0atools\x20that\x20understand\x20the\x20module\x20graph.\x20Users\x20should\x20prefer\x20<code>go\x20get\x20path@version</code>\x20or\x20<code>go\x20get\x20path@none</code>,\x20which\x20make\x20other\x20<code>go.mod</code>\x20adjustments\x20as\x0aneeded\x20to\x20satisfy\x20constraints\x20imposed\x20by\x20other\x20modules.\x20See\x20<a\x20href=\"#go-get\"><code>go\x20get</code></a>.</li>\x0a<li>The\x20<code>-exclude=path@version</code>\x20and\x20<code>-dropexclude=path@version</code>\x20flags\x20add\x20and\x20drop\x0aan\x20exclusion\x20for\x20the\x20given\x20module\x20path\x20and\x20version.\x20Note\x20that\x0a<code>-exclude=path@version</code>\x20is\x20a\x20no-op\x20if\x20that\x20exclusion\x20already\x20exists.</li>\x0a<li>The\x20<code>-replace=old[@v]=new[@v]</code>\x20flag\x20adds\x20a\x20replacement\x20of\x20the\x20given\x20module\x0apath\x20and\x20version\x20pair.\x20If\x20the\x20<code>@v</code>\x20in\x20<code>old@v</code>\x20is\x20omitted,\x20a\x20replacement\x0awithout\x20a\x20version\x20on\x20the\x20left\x20side\x20is\x20added,\x20which\x20applies\x20to\x20all\x20versions\x20of\x0athe\x20old\x20module\x20path.\x20If\x20the\x20<code>@v</code>\x20in\x20<code>new@v</code>\x20is\x20omitted,\x20the\x20new\x20path\x20should\x20be\x0aa\x20local\x20module\x20root\x20directory,\x20not\x20a\x20module\x20path.\x20Note\x20that\x20<code>-replace</code>\x0aoverrides\x20any\x20redundant\x20replacements\x20for\x20<code>old[@v]</code>,\x20so\x20omitting\x20<code>@v</code>\x20will\x20drop\x0areplacements\x20for\x20specific\x20versions.</li>\x0a<li>The\x20<code>-dropreplace=old[@v]</code>\x20flag\x20drops\x20a\x20replacement\x20of\x20the\x20given\x20module\x20path\x0aand\x20version\x20pair.\x20If\x20the\x20<code>@v</code>\x20is\x20provided,\x20a\x20replacement\x20with\x20the\x20given\x0aversion\x20is\x20dropped.\x20An\x20existing\x20replacement\x20without\x20a\x20version\x20on\x20the\x20left\x20side\x0amay\x20still\x20replace\x20the\x20module.\x20If\x20the\x20<code>@v</code>\x20is\x20omitted,\x20a\x20replacement\x20without\x20a\x0aversion\x20is\x20dropped.</li>\x0a</ul>\x0a<p>The\x20editing\x20flags\x20may\x20be\x20repeated.\x20The\x20changes\x20are\x20applied\x20in\x20the\x20order\x20given.</p>\x0a<p><code>go\x20mod\x20edit</code>\x20has\x20additional\x20flags\x20that\x20control\x20its\x20output.</p>\x0a<ul>\x0a<li>The\x20<code>-fmt</code>\x20flag\x20reformats\x20the\x20<code>go.mod</code>\x20file\x20without\x20making\x20other\x20changes.\x0aThis\x20reformatting\x20is\x20also\x20implied\x20by\x20any\x20other\x20modifications\x20that\x20use\x20or\x0arewrite\x20the\x20<code>go.mod</code>\x20file.\x20The\x20only\x20time\x20this\x20flag\x20is\x20needed\x20is\x20if\x20no\x0aother\x20flags\x20are\x20specified,\x20as\x20in\x20<code>go\x20mod\x20edit\x20-fmt</code>.</li>\x0a<li>The\x20<code>-print</code>\x20flag\x20prints\x20the\x20final\x20<code>go.mod</code>\x20in\x20its\x20text\x20format\x20instead\x20of\x0awriting\x20it\x20back\x20to\x20disk.</li>\x0a<li>The\x20<code>-json</code>\x20flag\x20prints\x20the\x20final\x20<code>go.mod</code>\x20in\x20JSON\x20format\x20instead\x20of\x20writing\x0ait\x20back\x20to\x20disk\x20in\x20text\x20format.\x20The\x20JSON\x20output\x20corresponds\x20to\x20these\x20Go\x20types:</li>\x0a</ul>\x0a<pre><code>type\x20Module\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20Path\x20string\x0a\x20\x20\x20\x20\x20\x20\x20\x20Version\x20string\x0a}\x0a\x0atype\x20GoMod\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20Module\x20\x20Module\x0a\x20\x20\x20\x20\x20\x20\x20\x20Go\x20\x20\x20\x20\x20\x20string\x0a\x20\x20\x20\x20\x20\x20\x20\x20Require\x20[]Require\x0a\x20\x20\x20\x20\x20\x20\x20\x20Exclude\x20[]Module\x0a\x20\x20\x20\x20\x20\x20\x20\x20Replace\x20[]Replace\x0a}\x0a\x0atype\x20Require\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20Path\x20string\x0a\x20\x20\x20\x20\x20\x20\x20\x20Version\x20string\x0a\x20\x20\x20\x20\x20\x20\x20\x20Indirect\x20bool\x0a}\x0a\x0atype\x20Replace\x20struct\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20Old\x20Module\x0a\x20\x20\x20\x20\x20\x20\x20\x20New\x20Module\x0a}\x0a</code></pre>\x0a<p>Note\x20that\x20this\x20only\x20describes\x20the\x20<code>go.mod</code>\x20file\x20itself,\x20not\x20other\x20modules\x0areferred\x20to\x20indirectly.\x20For\x20the\x20full\x20set\x20of\x20modules\x20available\x20to\x20a\x20build,\x0ause\x20<code>go\x20list\x20-m\x20-json\x20all</code>.\x20See\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m</code></a>.</p>\x0a<p>For\x20example,\x20a\x20tool\x20can\x20obtain\x20the\x20<code>go.mod</code>\x20file\x20as\x20a\x20data\x20structure\x20by\x0aparsing\x20the\x20output\x20of\x20<code>go\x20mod\x20edit\x20-json</code>\x20and\x20can\x20then\x20make\x20changes\x20by\x20invoking\x0a<code>go\x20mod\x20edit</code>\x20with\x20<code>-require</code>,\x20<code>-exclude</code>,\x20and\x20so\x20on.</p>\x0a<p>Tools\x20may\x20also\x20use\x20the\x20package\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/modfile?tab=doc\"><code>golang.org/x/mod/modfile</code></a>\x0ato\x20parse,\x20edit,\x20and\x20format\x20<code>go.mod</code>\x20files.</p>\x0a<h3\x20id=\"go-mod-init\"><code>go\x20mod\x20init</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20init\x20[module-path]\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>go\x20mod\x20init\x0ago\x20mod\x20init\x20example.com/m\x0a</code></pre>\x0a<p>The\x20<code>go\x20mod\x20init</code>\x20command\x20initializes\x20and\x20writes\x20a\x20new\x20<code>go.mod</code>\x20file\x20in\x20the\x0acurrent\x20directory,\x20in\x20effect\x20creating\x20a\x20new\x20module\x20rooted\x20at\x20the\x20current\x0adirectory.\x20The\x20<code>go.mod</code>\x20file\x20must\x20not\x20already\x20exist.</p>\x0a<p><code>init</code>\x20accepts\x20one\x20optional\x20argument,\x20the\x20<a\x20href=\"#glos-module-path\">module\x20path</a>\x20for\x0athe\x20new\x20module.\x20See\x20<a\x20href=\"#module-path\">Module\x20paths</a>\x20for\x20instructions\x20on\x20choosing\x0aa\x20module\x20path.\x20If\x20the\x20module\x20path\x20argument\x20is\x20omitted,\x20<code>init</code>\x20will\x20attempt\x0ato\x20infer\x20the\x20module\x20path\x20using\x20import\x20comments\x20in\x20<code>.go</code>\x20files,\x20vendoring\x20tool\x0aconfiguration\x20files,\x20and\x20the\x20current\x20directory\x20(if\x20in\x20<code>GOPATH</code>).</p>\x0a<p>If\x20a\x20configuration\x20file\x20for\x20a\x20vendoring\x20tool\x20is\x20present,\x20<code>init</code>\x20will\x20attempt\x20to\x0aimport\x20module\x20requirements\x20from\x20it.\x20<code>init</code>\x20supports\x20the\x20following\x20configuration\x0afiles.</p>\x0a<ul>\x0a<li><code>GLOCKFILE</code>\x20(Glock)</li>\x0a<li><code>Godeps/Godeps.json</code>\x20(Godeps)</li>\x0a<li><code>Gopkg.lock</code>\x20(dep)</li>\x0a<li><code>dependencies.tsv</code>\x20(godeps)</li>\x0a<li><code>glide.lock</code>\x20(glide)</li>\x0a<li><code>vendor.conf</code>\x20(trash)</li>\x0a<li><code>vendor.yml</code>\x20(govend)</li>\x0a<li><code>vendor/manifest</code>\x20(gvt)</li>\x0a<li><code>vendor/vendor.json</code>\x20(govendor)</li>\x0a</ul>\x0a<p>Vendoring\x20tool\x20configuration\x20files\x20can't\x20always\x20be\x20translated\x20with\x20perfect\x0afidelity.\x20For\x20example,\x20if\x20multiple\x20packages\x20within\x20the\x20same\x20repository\x20are\x0aimported\x20at\x20different\x20versions,\x20and\x20the\x20repository\x20only\x20contains\x20one\x20module,\x20the\x0aimported\x20<code>go.mod</code>\x20can\x20only\x20require\x20the\x20module\x20at\x20one\x20version.\x20You\x20may\x20wish\x20to\x0arun\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m\x20all</code></a>\x20to\x20check\x20all\x20versions\x20in\x20the\x20<a\x20href=\"#glos-build-list\">build\x0alist</a>,\x20and\x20<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20tidy</code></a>\x20to\x20add\x20missing\x0arequirements\x20and\x20to\x20drop\x20unused\x20requirements.</p>\x0a<h3\x20id=\"go-mod-tidy\"><code>go\x20mod\x20tidy</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20tidy\x20[-v]\x0a</code></pre>\x0a<p><code>go\x20mod\x20tidy</code>\x20ensures\x20that\x20the\x20<code>go.mod</code>\x20file\x20matches\x20the\x20source\x20code\x20in\x20the\x0amodule.\x20It\x20adds\x20any\x20missing\x20module\x20requirements\x20necessary\x20to\x20build\x20the\x20current\x0amodule's\x20packages\x20and\x20dependencies,\x20and\x20it\x20removes\x20requirements\x20on\x20modules\x20that\x0adon't\x20provide\x20any\x20relevant\x20packages.\x20It\x20also\x20adds\x20any\x20missing\x20entries\x20to\x0a<code>go.sum</code>\x20and\x20removes\x20unnecessary\x20entries.</p>\x0a<p>The\x20<code>-v</code>\x20flag\x20causes\x20<code>go\x20mod\x20tidy</code>\x20to\x20print\x20information\x20about\x20removed\x20modules\x0ato\x20standard\x20error.</p>\x0a<p><code>go\x20mod\x20tidy</code>\x20works\x20by\x20loading\x20all\x20of\x20the\x20packages\x20in\x20the\x20<a\x20href=\"#glos-main-module\">main\x0amodule</a>\x20and\x20all\x20of\x20the\x20packages\x20they\x20import,\x0arecursively.\x20This\x20includes\x20packages\x20imported\x20by\x20tests\x20(including\x20tests\x20in\x20other\x0amodules).\x20<code>go\x20mod\x20tidy</code>\x20acts\x20as\x20if\x20all\x20build\x20tags\x20are\x20enabled,\x20so\x20it\x20will\x0aconsider\x20platform-specific\x20source\x20files\x20and\x20files\x20that\x20require\x20custom\x20build\x0atags,\x20even\x20if\x20those\x20source\x20files\x20wouldn't\x20normally\x20be\x20built.\x20There\x20is\x20one\x0aexception:\x20the\x20<code>ignore</code>\x20build\x20tag\x20is\x20not\x20enabled,\x20so\x20a\x20file\x20with\x20the\x20build\x0aconstraint\x20<code>//\x20+build\x20ignore</code>\x20will\x20not\x20be\x20considered.\x20Note\x20that\x20<code>go\x20mod\x20tidy</code>\x0awill\x20not\x20consider\x20packages\x20in\x20the\x20main\x20module\x20in\x20directories\x20named\x20<code>testdata</code>\x20or\x0awith\x20names\x20that\x20start\x20with\x20<code>.</code>\x20or\x20<code>_</code>\x20unless\x20those\x20packages\x20are\x20explicitly\x0aimported\x20by\x20other\x20packages.</p>\x0a<p>Once\x20<code>go\x20mod\x20tidy</code>\x20has\x20loaded\x20this\x20set\x20of\x20packages,\x20it\x20ensures\x20that\x20each\x20module\x0athat\x20provides\x20one\x20or\x20more\x20packages\x20either\x20has\x20a\x20<code>require</code>\x20directive\x20in\x20the\x20main\x0amodule's\x20<code>go.mod</code>\x20file\x20or\x20is\x20required\x20by\x20another\x20required\x20module.\x20\x20<code>go\x20mod\x20tidy</code>\x0awill\x20add\x20a\x20requirement\x20on\x20the\x20latest\x20version\x20on\x20each\x20missing\x20module\x20(see\x0a<a\x20href=\"#version-queries\">Version\x20queries</a>\x20for\x20the\x20definition\x20of\x20the\x20<code>latest</code>\x0aversion).\x20<code>go\x20mod\x20tidy</code>\x20will\x20remove\x20<code>require</code>\x20directives\x20for\x20modules\x20that\x20don't\x0aprovide\x20any\x20packages\x20in\x20the\x20set\x20described\x20above.</p>\x0a<p><code>go\x20mod\x20tidy</code>\x20may\x20also\x20add\x20or\x20remove\x20<code>//\x20indirect</code>\x20comments\x20on\x20<code>require</code>\x0adirectives.\x20An\x20<code>//\x20indirect</code>\x20comment\x20denotes\x20a\x20module\x20that\x20does\x20not\x20provide\x0apackages\x20imported\x20by\x20packages\x20in\x20the\x20main\x20module.\x20These\x20requirements\x20will\x20be\x0apresent\x20if\x20the\x20module\x20that\x20imports\x20packages\x20in\x20the\x20indirect\x20dependency\x20has\x0ano\x20<code>go.mod</code>\x20file.\x20They\x20may\x20also\x20be\x20present\x20if\x20the\x20indirect\x20dependency\x20is\x0arequired\x20at\x20a\x20higher\x20version\x20than\x20is\x20implied\x20by\x20the\x20module\x20graph;\x20this\x20usually\x0ahappens\x20after\x20running\x20a\x20command\x20like\x20<code>go\x20get\x20-u\x20./...</code>.</p>\x0a<h3\x20id=\"go-mod-vendor\"><code>go\x20mod\x20vendor</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20vendor\x20[-v]\x0a</code></pre>\x0a<p>The\x20<code>go\x20mod\x20vendor</code>\x20command\x20constructs\x20a\x20directory\x20named\x20<code>vendor</code>\x20in\x20the\x20<a\x20href=\"#glos-main-module\">main\x0amodule's</a>\x20root\x20directory\x20that\x20contains\x20copies\x20of\x20all\x20packages\x0aneeded\x20to\x20support\x20builds\x20and\x20tests\x20of\x20packages\x20in\x20the\x20main\x20module.\x20Packages\x0athat\x20are\x20only\x20imported\x20by\x20tests\x20of\x20packages\x20outside\x20the\x20main\x20module\x20are\x20not\x0aincluded.\x20As\x20with\x20<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20tidy</code></a>\x20and\x20other\x20module\x20commands,\x0a<a\x20href=\"#glos-build-constraint\">build\x20constraints</a>\x20except\x20for\x20<code>ignore</code>\x20are\x20not\x0aconsidered\x20when\x20constructing\x20the\x20<code>vendor</code>\x20directory.</p>\x0a<p>When\x20vendoring\x20is\x20enabled,\x20the\x20<code>go</code>\x20command\x20will\x20load\x20packages\x20from\x20the\x20<code>vendor</code>\x0adirectory\x20instead\x20of\x20downloading\x20modules\x20from\x20their\x20sources\x20into\x20the\x20module\x0acache\x20and\x20using\x20packages\x20those\x20downloaded\x20copies.\x20See\x20<a\x20href=\"#vendoring\">Vendoring</a>\x0afor\x20more\x20information.</p>\x0a<p><code>go\x20mod\x20vendor</code>\x20also\x20creates\x20the\x20file\x20<code>vendor/modules.txt</code>\x20that\x20contains\x20a\x20list\x0aof\x20vendored\x20packages\x20and\x20the\x20module\x20versions\x20they\x20were\x20copied\x20from.\x20When\x0avendoring\x20is\x20enabled,\x20this\x20manifest\x20is\x20used\x20as\x20a\x20source\x20of\x20module\x20version\x0ainformation,\x20as\x20reported\x20by\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m</code></a>\x20and\x20<a\x20href=\"#go-version-m\"><code>go\x20version\x20-m</code></a>.\x20When\x20the\x20<code>go</code>\x20command\x20reads\x20<code>vendor/modules.txt</code>,\x20it\x20checks\x0athat\x20the\x20module\x20versions\x20are\x20consistent\x20with\x20<code>go.mod</code>.\x20If\x20<code>go.mod</code>\x20changed\x20since\x0a<code>vendor/modules.txt</code>\x20was\x20generated,\x20<code>go\x20mod\x20vendor</code>\x20should\x20be\x20run\x20again.</p>\x0a<p>Note\x20that\x20<code>go\x20mod\x20vendor</code>\x20removes\x20the\x20<code>vendor</code>\x20directory\x20if\x20it\x20exists\x20before\x0are-constructing\x20it.\x20Local\x20changes\x20should\x20not\x20be\x20made\x20to\x20vendored\x20packages.\x0aThe\x20<code>go</code>\x20command\x20does\x20not\x20check\x20that\x20packages\x20in\x20the\x20<code>vendor</code>\x20directory\x20have\x0anot\x20been\x20modified,\x20but\x20one\x20can\x20verify\x20the\x20integrity\x20of\x20the\x20<code>vendor</code>\x20directory\x0aby\x20running\x20<code>go\x20mod\x20vendor</code>\x20and\x20checking\x20that\x20no\x20changes\x20were\x20made.</p>\x0a<p>The\x20<code>-v</code>\x20flag\x20causes\x20<code>go\x20mod\x20vendor</code>\x20to\x20print\x20the\x20names\x20of\x20vendored\x20modules\x0aand\x20packages\x20to\x20standard\x20error.</p>\x0a<h3\x20id=\"go-mod-verify\"><code>go\x20mod\x20verify</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20mod\x20verify\x0a</code></pre>\x0a<p><code>go\x20mod\x20verify</code>\x20checks\x20that\x20dependencies\x20of\x20the\x20<a\x20href=\"#glos-main-module\">main\x20module</a>\x0astored\x20in\x20the\x20<a\x20href=\"#glos-module-cache\">module\x20cache</a>\x20have\x20not\x20been\x20modified\x20since\x0athey\x20were\x20downloaded.\x20To\x20perform\x20this\x20check,\x20<code>go\x20mod\x20verify</code>\x20hashes\x20each\x0adownloaded\x20module\x20<a\x20href=\"#zip-files\"><code>.zip</code>\x20file</a>\x20and\x20extracted\x20directory,\x20then\x0acompares\x20those\x20hashes\x20with\x20a\x20hash\x20recorded\x20when\x20the\x20module\x20was\x20first\x0adownloaded.\x20<code>go\x20mod\x20verify</code>\x20checks\x20each\x20module\x20in\x20the\x20<a\x20href=\"#glos-build-list\">build\x0alist</a>\x20(which\x20may\x20be\x20printed\x20with\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m\x20all</code></a>).</p>\x0a<p>If\x20all\x20the\x20modules\x20are\x20unmodified,\x20<code>go\x20mod\x20verify</code>\x20prints\x20&quot;all\x20modules\x0averified&quot;.\x20Otherwise,\x20it\x20reports\x20which\x20modules\x20have\x20been\x20changed\x20and\x20exits\x20with\x0aa\x20non-zero\x20status.</p>\x0a<p>Note\x20that\x20all\x20module-aware\x20commands\x20verify\x20that\x20hashes\x20in\x20the\x20main\x20module's\x0a<code>go.sum</code>\x20file\x20match\x20hashes\x20recorded\x20for\x20modules\x20downloaded\x20into\x20the\x20module\x0acache.\x20If\x20a\x20hash\x20is\x20missing\x20from\x20<code>go.sum</code>\x20(for\x20example,\x20because\x20the\x20module\x20is\x0abeing\x20used\x20for\x20the\x20first\x20time),\x20the\x20<code>go</code>\x20command\x20verifies\x20its\x20hash\x20using\x20the\x0a<a\x20href=\"#checksum-database\">checksum\x20database</a>\x20(unless\x20the\x20module\x20path\x20is\x20matched\x20by\x0a<code>GOPRIVATE</code>\x20or\x20<code>GONOSUMDB</code>).\x20See\x20<a\x20href=\"#authenticating\">Authenticating\x20modules</a>\x20for\x0adetails.</p>\x0a<p>In\x20contrast,\x20<code>go\x20mod\x20verify</code>\x20checks\x20that\x20module\x20<code>.zip</code>\x20files\x20and\x20their\x20extracted\x0adirectories\x20have\x20hashes\x20that\x20match\x20hashes\x20recorded\x20in\x20the\x20module\x20cache\x20when\x20they\x0awere\x20first\x20downloaded.\x20This\x20is\x20useful\x20for\x20detecting\x20changes\x20to\x20files\x20in\x20the\x0amodule\x20cache\x20<em>after</em>\x20a\x20module\x20has\x20been\x20downloaded\x20and\x20verified.\x20<code>go\x20mod\x20verify</code>\x0adoes\x20not\x20download\x20content\x20for\x20modules\x20not\x20in\x20the\x20cache,\x20and\x20it\x20does\x20not\x20use\x0a<code>go.sum</code>\x20files\x20to\x20verify\x20module\x20content.\x20However,\x20<code>go\x20mod\x20verify</code>\x20may\x20download\x0a<code>go.mod</code>\x20files\x20in\x20order\x20to\x20perform\x20<a\x20href=\"#minimal-version-selection\">minimal\x20version\x0aselection</a>.\x20It\x20will\x20use\x20<code>go.sum</code>\x20to\x20verify\x20those\x0afiles,\x20and\x20it\x20may\x20add\x20<code>go.sum</code>\x20entries\x20for\x20missing\x20hashes.</p>\x0a<h3\x20id=\"go-version-m\"><code>go\x20version\x20-m</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20version\x20[-m]\x20[-v]\x20[file\x20...]\x0a</code></pre>\x0a<p>Example:</p>\x0a<pre><code>#\x20Print\x20Go\x20version\x20used\x20to\x20build\x20go.\x0a$\x20go\x20version\x0a\x0a#\x20Print\x20Go\x20version\x20used\x20to\x20build\x20a\x20specific\x20executable.\x0a$\x20go\x20version\x20~/go/bin/gopls\x0a\x0a#\x20Print\x20Go\x20version\x20and\x20module\x20versions\x20used\x20to\x20build\x20a\x20specific\x20executable.\x0a$\x20go\x20version\x20-m\x20~/go/bin/gopls\x0a\x0a#\x20Print\x20Go\x20version\x20and\x20module\x20versions\x20used\x20to\x20build\x20executables\x20in\x20a\x20directory.\x0a$\x20go\x20version\x20-m\x20~/go/bin/\x0a</code></pre>\x0a<p><code>go\x20version</code>\x20reports\x20the\x20Go\x20version\x20used\x20to\x20build\x20each\x20executable\x20file\x20named\x0aon\x20the\x20command\x20line.</p>\x0a<p>If\x20no\x20files\x20are\x20named\x20on\x20the\x20command\x20line,\x20<code>go\x20version</code>\x20prints\x20its\x20own\x20version\x0ainformation.</p>\x0a<p>If\x20a\x20directory\x20is\x20named,\x20<code>go\x20version</code>\x20walks\x20that\x20directory,\x20recursively,\x20looking\x0afor\x20recognized\x20Go\x20binaries\x20and\x20reporting\x20their\x20versions.\x20By\x20default,\x20<code>go\x20version</code>\x20does\x20not\x20report\x20unrecognized\x20files\x20found\x20during\x20a\x20directory\x20scan.\x20The\x0a<code>-v</code>\x20flag\x20causes\x20it\x20to\x20report\x20unrecognized\x20files.</p>\x0a<p>The\x20<code>-m</code>\x20flag\x20causes\x20<code>go\x20version</code>\x20to\x20print\x20each\x20executable's\x20embedded\x20module\x0aversion\x20information,\x20when\x20available.\x20For\x20each\x20executable,\x20<code>go\x20version\x20-m</code>\x20prints\x0aa\x20table\x20with\x20tab-separated\x20columns\x20like\x20the\x20one\x20below.</p>\x0a<pre><code>$\x20go\x20version\x20-m\x20~/go/bin/goimports\x0a/home/jrgopher/go/bin/goimports:\x20go1.14.3\x0a\x20\x20\x20\x20\x20\x20\x20\x20path\x20\x20\x20\x20golang.org/x/tools/cmd/goimports\x0a\x20\x20\x20\x20\x20\x20\x20\x20mod\x20\x20\x20\x20\x20golang.org/x/tools\x20\x20\x20\x20\x20\x20v0.0.0-20200518203908-8018eb2c26ba\x20\x20\x20\x20\x20\x20h1:0Lcy64USfQQL6GAJma8BdHCgeofcchQj+Z7j0SXYAzU=\x0a\x20\x20\x20\x20\x20\x20\x20\x20dep\x20\x20\x20\x20\x20golang.org/x/mod\x20\x20\x20\x20\x20\x20\x20\x20v0.2.0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=\x0a\x20\x20\x20\x20\x20\x20\x20\x20dep\x20\x20\x20\x20\x20golang.org/x/xerrors\x20\x20\x20\x20v0.0.0-20191204190536-9bdfabe68543\x20\x20\x20\x20\x20\x20h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=\x0a</code></pre>\x0a<p>The\x20format\x20of\x20the\x20table\x20may\x20change\x20in\x20the\x20future.\x20The\x20same\x20information\x20may\x20be\x0aobtained\x20from\x0a<a\x20href=\"https://pkg.go.dev/runtime/debug?tab=doc#ReadBuildInfo\"><code>runtime/debug.ReadBuildInfo</code></a>.</p>\x0a<p>The\x20meaning\x20of\x20each\x20row\x20in\x20the\x20table\x20is\x20determined\x20by\x20the\x20word\x20in\x20the\x20first\x0acolumn.</p>\x0a<ul>\x0a<li><strong><code>path</code></strong>:\x20the\x20path\x20of\x20the\x20<code>main</code>\x20package\x20used\x20to\x20build\x20the\x20executable.</li>\x0a<li><strong><code>mod</code></strong>:\x20the\x20module\x20containing\x20the\x20<code>main</code>\x20package.\x20The\x20columns\x20are\x20the\x0amodule\x20path,\x20version,\x20and\x20sum,\x20respectively.\x20The\x20<a\x20href=\"#glos-main-module\">main\x0amodule</a>\x20has\x20the\x20version\x20<code>(devel)</code>\x20and\x20no\x20sum.</li>\x0a<li><strong><code>dep</code></strong>:\x20a\x20module\x20that\x20provided\x20one\x20or\x20more\x20packages\x20linked\x20into\x20the\x0aexecutable.\x20Same\x20format\x20as\x20<code>mod</code>.</li>\x0a<li><strong><code>=&gt;</code></strong>:\x20a\x20<a\x20href=\"#go.mod-replace\">replacement</a>\x20for\x20the\x20module\x20on\x20the\x20previous\x0aline.\x20If\x20the\x20replacement\x20is\x20a\x20local\x20directory,\x20only\x20the\x20directory\x20path\x20is\x0alisted\x20(no\x20version\x20or\x20sum).\x20If\x20the\x20replacement\x20is\x20a\x20module\x20version,\x20the\x20path,\x0aversion,\x20and\x20sum\x20are\x20listed,\x20as\x20with\x20<code>mod</code>\x20and\x20<code>dep</code>.\x20A\x20replaced\x20module\x20has\x0ano\x20sum.</li>\x0a</ul>\x0a<h3\x20id=\"go-clean-modcache\"><code>go\x20clean\x20-modcache</code></h3>\x0a<p>Usage:</p>\x0a<pre><code>go\x20clean\x20[-modcache]\x0a</code></pre>\x0a<p>The\x20<code>-modcache</code>\x20flag\x20causes\x20<a\x20href=\"/cmd/go/#hdr-Remove_object_files_and_cached_files\"><code>go\x20clean</code></a>\x20to\x20remove\x20the\x20entire\x0a<a\x20href=\"#glos-module-cache\">module\x20cache</a>,\x20including\x20unpacked\x20source\x20code\x20of\x20versioned\x0adependencies.</p>\x0a<p>This\x20is\x20usually\x20the\x20best\x20way\x20to\x20remove\x20the\x20module\x20cache.\x20By\x20default,\x20most\x20files\x0aand\x20directories\x20in\x20the\x20module\x20cache\x20are\x20read-only\x20to\x20prevent\x20tests\x20and\x20editors\x0afrom\x20unintentionally\x20changing\x20files\x20after\x20they've\x20been\x0a<a\x20href=\"#authenticating\">authenticated</a>.\x20Unfortunately,\x20this\x20causes\x20commands\x20like\x0a<code>rm\x20-r</code>\x20to\x20fail,\x20since\x20files\x20can't\x20be\x20removed\x20without\x20first\x20making\x20their\x20parent\x0adirectories\x20writable.</p>\x0a<p>The\x20<code>-modcacherw</code>\x20flag\x20(accepted\x20by\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies\"><code>go\x20build</code></a>\x20and\x0aother\x20module-aware\x20commands)\x20causes\x20new\x20directories\x20in\x20the\x20module\x20cache\x20to\x0abe\x20writable.\x20To\x20pass\x20<code>-modcacherw</code>\x20to\x20all\x20module-aware\x20commands,\x20add\x20it\x20to\x20the\x0a<code>GOFLAGS</code>\x20variable.\x20<code>GOFLAGS</code>\x20may\x20be\x20set\x20in\x20the\x20environment\x20or\x20with\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Print_Go_environment_information\"><code>go\x20env\x20-w</code></a>.\x20For\x0aexample,\x20the\x20command\x20below\x20sets\x20it\x20permanently:</p>\x0a<pre><code>go\x20env\x20-w\x20GOFLAGS=-modcacherw\x0a</code></pre>\x0a<p><code>-modcacherw</code>\x20should\x20be\x20used\x20with\x20caution;\x20developers\x20should\x20be\x20careful\x20not\x0ato\x20make\x20changes\x20to\x20files\x20in\x20the\x20module\x20cache.\x20<a\x20href=\"#go-mod-verify\"><code>go\x20mod\x20verify</code></a>\x0amay\x20be\x20used\x20to\x20check\x20that\x20files\x20in\x20the\x20cache\x20match\x20hashes\x20in\x20the\x20main\x20module's\x0a<code>go.sum</code>\x20file.</p>\x0a<h3\x20id=\"version-queries\">Version\x20queries</h3>\x0a<p>Several\x20commands\x20allow\x20you\x20to\x20specify\x20a\x20version\x20of\x20a\x20module\x20using\x20a\x20<em>version\x0aquery</em>,\x20which\x20appears\x20after\x20an\x20<code>@</code>\x20character\x20following\x20a\x20module\x20or\x20package\x20path\x0aon\x20the\x20command\x20line.</p>\x0a<p>Examples:</p>\x0a<pre><code>go\x20get\x20example.com/m@latest\x0ago\x20mod\x20download\x20example.com/m@master\x0ago\x20list\x20-m\x20-json\x20example.com/m@e3702bed2\x0a</code></pre>\x0a<p>A\x20version\x20query\x20may\x20be\x20one\x20of\x20the\x20following:</p>\x0a<ul>\x0a<li>A\x20fully-specified\x20semantic\x20version,\x20such\x20as\x20<code>v1.2.3</code>,\x20which\x20selects\x20a\x0aspecific\x20version.\x20See\x20<a\x20href=\"#versions\">Versions</a>\x20for\x20syntax.</li>\x0a<li>A\x20semantic\x20version\x20prefix,\x20such\x20as\x20<code>v1</code>\x20or\x20<code>v1.2</code>,\x20which\x20selects\x20the\x20highest\x0aavailable\x20version\x20with\x20that\x20prefix.</li>\x0a<li>A\x20semantic\x20version\x20comparison,\x20such\x20as\x20<code>&lt;v1.2.3</code>\x20or\x20<code>&gt;=v1.5.6</code>,\x20which\x20selects\x0athe\x20nearest\x20available\x20version\x20to\x20the\x20comparison\x20target\x20(the\x20lowest\x20version\x0afor\x20<code>&gt;</code>\x20and\x20<code>&gt;=</code>,\x20and\x20the\x20highest\x20version\x20for\x20<code>&lt;</code>\x20and\x20<code>&lt;=</code>).</li>\x0a<li>A\x20revision\x20identifier\x20for\x20the\x20underlying\x20source\x20repository,\x20such\x20as\x20a\x20commit\x0ahash\x20prefix,\x20revision\x20tag,\x20or\x20branch\x20name.\x20If\x20the\x20revision\x20is\x20tagged\x20with\x20a\x0asemantic\x20version,\x20this\x20query\x20selects\x20that\x20version.\x20Otherwise,\x20this\x20query\x0aselects\x20a\x20<a\x20href=\"#glos-pseudo-version\">pseudo-version</a>\x20for\x20the\x20underlying\x0acommit.\x20Note\x20that\x20branches\x20and\x20tags\x20with\x20names\x20matched\x20by\x20other\x20version\x0aqueries\x20cannot\x20be\x20selected\x20this\x20way.\x20For\x20example,\x20the\x20query\x20<code>v2</code>\x20selects\x20the\x0alatest\x20version\x20starting\x20with\x20<code>v2</code>,\x20not\x20the\x20branch\x20named\x20<code>v2</code>.</li>\x0a<li>The\x20string\x20<code>latest</code>,\x20which\x20selects\x20the\x20highest\x20available\x20release\x20version.\x20If\x0athere\x20are\x20no\x20release\x20versions,\x20<code>latest</code>\x20selects\x20the\x20highest\x20pre-release\x0aversion.\x20\x20If\x20there\x20no\x20tagged\x20versions,\x20<code>latest</code>\x20selects\x20a\x20pseudo-version\x20for\x0athe\x20commit\x20at\x20the\x20tip\x20of\x20the\x20repository's\x20default\x20branch.</li>\x0a<li>The\x20string\x20<code>upgrade</code>,\x20which\x20is\x20like\x20<code>latest</code>\x20except\x20that\x20if\x20the\x20module\x20is\x0acurrently\x20required\x20at\x20a\x20higher\x20version\x20than\x20the\x20version\x20<code>latest</code>\x20would\x20select\x0a(for\x20example,\x20a\x20pre-release),\x20<code>upgrade</code>\x20will\x20select\x20the\x20current\x20version.</li>\x0a<li>The\x20string\x20<code>patch</code>,\x20which\x20selects\x20the\x20latest\x20available\x20version\x20with\x20the\x20same\x0amajor\x20and\x20minor\x20version\x20numbers\x20as\x20the\x20currently\x20required\x20version.\x20If\x20no\x0aversion\x20is\x20currently\x20required,\x20<code>patch</code>\x20is\x20equivalent\x20to\x20<code>latest</code>.</li>\x0a</ul>\x0a<p>Except\x20for\x20queries\x20for\x20specific\x20named\x20versions\x20or\x20revisions,\x20all\x20queries\x0aconsider\x20available\x20versions\x20reported\x20by\x20<code>go\x20list\x20-m\x20-versions</code>\x20(see\x20<a\x20href=\"#go-list-m\"><code>go\x20list\x20-m</code></a>).\x20This\x20list\x20contains\x20only\x20tagged\x20versions,\x20not\x20pseudo-versions.\x0aModule\x20versions\x20disallowed\x20by\x20<a\x20href=\"#go.mod-exclude\">exclude</a>\x20directives\x20in\x0athe\x20main\x20module's\x20<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x20file</a>\x20are\x20not\x20considered.</p>\x0a<p><a\x20href=\"#glos-release-version\">Release\x20versions</a>\x20are\x20preferred\x20over\x20pre-release\x0aversions.\x20For\x20example,\x20if\x20versions\x20<code>v1.2.2</code>\x20and\x20<code>v1.2.3-pre</code>\x20are\x20available,\x20the\x0a<code>latest</code>\x20query\x20will\x20select\x20<code>v1.2.2</code>,\x20even\x20though\x20<code>v1.2.3-pre</code>\x20is\x20higher.\x20The\x0a<code>&lt;v1.2.4</code>\x20query\x20would\x20also\x20select\x20<code>v1.2.2</code>,\x20even\x20though\x20<code>v1.2.3-pre</code>\x20is\x20closer\x0ato\x20<code>v1.2.4</code>.\x20If\x20no\x20release\x20or\x20pre-release\x20version\x20is\x20available,\x20the\x20<code>latest</code>,\x0a<code>upgrade</code>,\x20and\x20<code>patch</code>\x20queries\x20will\x20select\x20a\x20pseudo-version\x20for\x20the\x20commit\x0aat\x20the\x20tip\x20of\x20the\x20repository's\x20default\x20branch.\x20Other\x20queries\x20will\x20report\x0aan\x20error.</p>\x0a<h3\x20id=\"commands-outside\">Module\x20commands\x20outside\x20a\x20module</h3>\x0a<p>Module-aware\x20Go\x20commands\x20normally\x20run\x20in\x20the\x20context\x20of\x20a\x20<a\x20href=\"#glos-main-module\">main\x0amodule</a>\x20defined\x20by\x20a\x20<code>go.mod</code>\x20file\x20in\x20the\x20working\x20directory\x0aor\x20a\x20parent\x20directory.\x20Some\x20commands\x20may\x20be\x20run\x20in\x20module-aware\x20mode\x20without\x20a\x0a<code>go.mod</code>\x20file\x20by\x20setting\x20the\x20<code>GO111MODULE</code>\x20environment\x20variable\x20to\x20<code>on</code>.\x0aMost\x20commands\x20work\x20differently\x20when\x20no\x20<code>go.mod</code>\x20file\x20is\x20present.</p>\x0a<p>See\x20<a\x20href=\"#mod-commands\">Module-aware\x20commands</a>\x20for\x20information\x20on\x20enabling\x20and\x0adisabling\x20module-aware\x20mode.</p>\x0a<table\x20class=\"ModTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<th>Command</th>\x0a\x20\x20\x20\x20\x20\x20<th>Behavior</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20build</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20doc</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20fix</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20fmt</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20generate</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20install</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20list</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20run</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20test</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20vet</code>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Only\x20packages\x20in\x20the\x20standard\x20library\x20and\x20packages\x20specified\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>.go</code>\x20files\x20on\x20the\x20command\x20line\x20can\x20be\x20loaded,\x20imported,\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20built.\x20Packages\x20from\x20other\x20modules\x20cannot\x20be\x20built,\x20since\x20there\x20is\x20no\x0a\x20\x20\x20\x20\x20\x20\x20\x20place\x20to\x20record\x20module\x20requirements\x20and\x20ensure\x20deterministic\x20builds.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>go\x20get</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Packages\x20and\x20executables\x20may\x20be\x20built\x20and\x20installed\x20as\x20usual.\x20Note\x20that\x0a\x20\x20\x20\x20\x20\x20\x20\x20there\x20is\x20no\x20main\x20module\x20when\x20<code>go\x20get</code>\x20is\x20run\x20without\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go.mod</code>\x20file,\x20so\x20<code>replace</code>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>exclude</code>\x20directives\x20are\x20not\x20applied.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>go\x20list\x20-m</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Explicit\x20<a\x20href=\"#version-queries\">version\x20queries</a>\x20are\x20required\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20most\x20arguments,\x20except\x20when\x20the\x20<code>-versions</code>\x20flag\x20is\x20used.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>go\x20mod\x20download</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Explicit\x20<a\x20href=\"#version-queries\">version\x20queries</a>\x20are\x20required\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20most\x20arguments.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>go\x20mod\x20edit</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>An\x20explicit\x20file\x20argument\x20is\x20required.</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20graph</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20tidy</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20vendor</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20verify</code><br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20mod\x20why</code>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20These\x20commands\x20require\x20a\x20<code>go.mod</code>\x20file\x20and\x20will\x20report\x0a\x20\x20\x20\x20\x20\x20\x20\x20an\x20error\x20if\x20one\x20is\x20not\x20present.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</tbody>\x0a</table>\x0a<h2\x20id=\"module-proxy\">Module\x20proxies</h2>\x0a<h3\x20id=\"goproxy-protocol\"><code>GOPROXY</code>\x20protocol</h3>\x0a<p>A\x20<a\x20href=\"#glos-module-proxy\"><em>module\x20proxy</em></a>\x20is\x20an\x20HTTP\x20server\x20that\x20can\x20respond\x20to\x0a<code>GET</code>\x20requests\x20for\x20paths\x20specified\x20below.\x20The\x20requests\x20have\x20no\x20query\x20parameters,\x0aand\x20no\x20specific\x20headers\x20are\x20required,\x20so\x20even\x20a\x20site\x20serving\x20from\x20a\x20fixed\x20file\x0asystem\x20(including\x20a\x20<code>file://</code>\x20URL)\x20can\x20be\x20a\x20module\x20proxy.</p>\x0a<p>Successful\x20HTTP\x20responses\x20must\x20have\x20the\x20status\x20code\x20200\x20(OK).\x20Redirects\x20(3xx)\x0aare\x20followed.\x20Responses\x20with\x20status\x20codes\x204xx\x20and\x205xx\x20are\x20treated\x20as\x20errors.\x0aThe\x20error\x20codes\x20404\x20(Not\x20Found)\x20and\x20410\x20(Gone)\x20indicate\x20that\x20the\x0arequested\x20module\x20or\x20version\x20is\x20not\x20available\x20on\x20the\x20proxy,\x20but\x20it\x20may\x20be\x20found\x0aelsewhere.\x20Error\x20responses\x20should\x20have\x20content\x20type\x20<code>text/plain</code>\x20with\x0a<code>charset</code>\x20either\x20<code>utf-8</code>\x20or\x20<code>us-ascii</code>.</p>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20be\x20configured\x20to\x20contact\x20proxies\x20or\x20source\x20control\x20servers\x0ausing\x20the\x20<code>GOPROXY</code>\x20environment\x20variable,\x20which\x20is\x20a\x20comma-separated\x20list\x20of\x0aURLs\x20or\x20the\x20keywords\x20<code>direct</code>\x20or\x20<code>off</code>\x20(see\x20<a\x20href=\"#environment-variables\">Environment\x0avariables</a>\x20for\x20details).\x20When\x20the\x20<code>go</code>\x20command\x20receives\x0aa\x20404\x20or\x20410\x20response\x20from\x20a\x20proxy,\x20it\x20falls\x20back\x20to\x20later\x20proxies\x20in\x20the\x0alist.\x20The\x20<code>go</code>\x20command\x20does\x20not\x20fall\x20back\x20to\x20later\x20proxies\x20in\x20response\x20to\x20other\x0a4xx\x20and\x205xx\x20errors.\x20This\x20allows\x20a\x20proxy\x20to\x20act\x20as\x20a\x20gatekeeper,\x20for\x20example,\x20by\x0aresponding\x20with\x20error\x20403\x20(Forbidden)\x20for\x20modules\x20not\x20on\x20an\x20approved\x20list.</p>\x0a<!--\x20TODO(katiehockman):\x20why\x20only\x20fall\x20back\x20for\x20410/404?\x20Either\x20add\x20the\x20details\x0ahere,\x20or\x20write\x20a\x20blog\x20post\x20about\x20how\x20to\x20build\x20multiple\x20types\x20of\x20proxies.\x20e.g.\x0aa\x20\"privacy\x20preserving\x20one\"\x20and\x20an\x20\"authorization\x20one\"\x20-->\x0a<p>The\x20table\x20below\x20specifies\x20queries\x20that\x20a\x20module\x20proxy\x20must\x20respond\x20to.\x20For\x20each\x0apath,\x20<code>$base</code>\x20is\x20the\x20path\x20portion\x20of\x20a\x20proxy\x20URL,<code>$module</code>\x20is\x20a\x20module\x20path,\x20and\x0a<code>$version</code>\x20is\x20a\x20version.\x20For\x20example,\x20if\x20the\x20proxy\x20URL\x20is\x0a<code>https://example.com/mod</code>,\x20and\x20the\x20client\x20is\x20requesting\x20the\x20<code>go.mod</code>\x20file\x20for\x0athe\x20module\x20<code>golang.org/x/text</code>\x20at\x20version\x20<code>v0.3.2</code>,\x20the\x20client\x20would\x20send\x20a\x0a<code>GET</code>\x20request\x20for\x20<code>https://example.com/mod/golang.org/x/text/@v/v0.3.2.mod</code>.</p>\x0a<p>To\x20avoid\x20ambiguity\x20when\x20serving\x20from\x20case-insensitive\x20file\x20systems,\x0athe\x20<code>$module</code>\x20and\x20<code>$version</code>\x20elements\x20are\x20case-encoded\x20by\x20replacing\x20every\x0auppercase\x20letter\x20with\x20an\x20exclamation\x20mark\x20followed\x20by\x20the\x20corresponding\x0alower-case\x20letter.\x20This\x20allows\x20modules\x20<code>example.com/M</code>\x20and\x20<code>example.com/m</code>\x20to\x0aboth\x20be\x20stored\x20on\x20disk,\x20since\x20the\x20former\x20is\x20encoded\x20as\x20<code>example.com/!m</code>.</p>\x0a<!--\x20TODO(jayconrod):\x20This\x20table\x20has\x20multi-line\x20cells,\x20and\x20GitHub\x20Flavored\x0aMarkdown\x20doesn't\x20have\x20syntax\x20for\x20that,\x20so\x20we\x20use\x20raw\x20HTML.\x20Gitiles\x20doesn't\x0ainclude\x20this\x20table\x20in\x20the\x20rendered\x20HTML.\x20Once\x20x/website\x20has\x20a\x20Markdown\x20renderer,\x0aensure\x20this\x20table\x20is\x20readable.\x20If\x20the\x20cells\x20are\x20too\x20large,\x20and\x20it's\x20difficult\x0ato\x20scan,\x20use\x20paragraphs\x20or\x20sections\x20below.\x0a-->\x0a<table\x20class=\"ModTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<th>Path</th>\x0a\x20\x20\x20\x20\x20\x20<th>Description</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/$module/@v/list</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20a\x20list\x20of\x20known\x20versions\x20of\x20the\x20given\x20module\x20in\x20plain\x20text,\x20one\x0a\x20\x20\x20\x20\x20\x20\x20\x20per\x20line.\x20This\x20list\x20should\x20not\x20include\x20pseudo-versions.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/$module/@v/$version.info</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20JSON-formatted\x20metadata\x20about\x20a\x20specific\x20version\x20of\x20a\x20module.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20response\x20must\x20be\x20a\x20JSON\x20object\x20that\x20corresponds\x20to\x20the\x20Go\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20structure\x20below:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0atype\x20Info\x20struct\x20{\x0a\x20\x20\x20\x20Version\x20string\x20\x20\x20\x20//\x20version\x20string\x0a\x20\x20\x20\x20Time\x20\x20\x20\x20time.Time\x20//\x20commit\x20time\x0a}\x0a</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20<code>Version</code>\x20field\x20is\x20required\x20and\x20must\x20contain\x20a\x20valid,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#glos-canonical-version\">canonical\x20version</a>\x20(see\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#versions\">Versions</a>).\x20The\x20<code>$version</code>\x20in\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request\x20path\x20does\x20not\x20need\x20to\x20be\x20the\x20same\x20version\x20or\x20even\x20a\x20valid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20version;\x20this\x20endpoint\x20may\x20be\x20used\x20to\x20find\x20versions\x20for\x20branch\x20names\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20or\x20revision\x20identifiers.\x20However,\x20if\x20<code>$version</code>\x20is\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20canonical\x20version\x20with\x20a\x20major\x20version\x20compatible\x20with\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>$module</code>,\x20the\x20<code>Version</code>\x20field\x20in\x20a\x20successful\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20response\x20must\x20be\x20the\x20same.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20<code>Time</code>\x20field\x20is\x20optional.\x20If\x20present,\x20it\x20must\x20be\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20string\x20in\x20RFC\x203339\x20format.\x20It\x20indicates\x20the\x20time\x20when\x20the\x20version\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20was\x20created.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20More\x20fields\x20may\x20be\x20added\x20in\x20the\x20future,\x20so\x20other\x20names\x20are\x20reserved.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/$module/@v/$version.mod</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20the\x20<code>go.mod</code>\x20file\x20for\x20a\x20specific\x20version\x20of\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20module.\x20If\x20the\x20module\x20does\x20not\x20have\x20a\x20<code>go.mod</code>\x20file\x20at\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20requested\x20version,\x20a\x20file\x20containing\x20only\x20a\x20<code>module</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20statement\x20with\x20the\x20requested\x20module\x20path\x20must\x20be\x20returned.\x20Otherwise,\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20original,\x20unmodified\x20<code>go.mod</code>\x20file\x20must\x20be\x20returned.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/$module/@v/$version.zip</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20a\x20zip\x20file\x20containing\x20the\x20contents\x20of\x20a\x20specific\x20version\x20of\x0a\x20\x20\x20\x20\x20\x20\x20\x20a\x20module.\x20See\x20<a\x20href=\"#zip-files\">Module\x20zip\x20files</a>\x20for\x20details\x0a\x20\x20\x20\x20\x20\x20\x20\x20on\x20how\x20this\x20zip\x20file\x20must\x20be\x20formatted.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/$module/@latest</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20JSON-formatted\x20metadata\x20about\x20the\x20latest\x20known\x20version\x20of\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20module\x20in\x20the\x20same\x20format\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>$base/$module/@v/$version.info</code>.\x20The\x20latest\x20version\x20should\x0a\x20\x20\x20\x20\x20\x20\x20\x20be\x20the\x20version\x20of\x20the\x20module\x20that\x20the\x20<code>go</code>\x20command\x20should\x20use\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20<code>$base/$module/@v/list</code>\x20is\x20empty\x20or\x20no\x20listed\x20version\x20is\x0a\x20\x20\x20\x20\x20\x20\x20\x20suitable.\x20This\x20endpoint\x20is\x20optional,\x20and\x20module\x20proxies\x20are\x20not\x20required\x0a\x20\x20\x20\x20\x20\x20\x20\x20to\x20implement\x20it.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</tbody>\x0a</table>\x0a<p>When\x20resolving\x20the\x20latest\x20version\x20of\x20a\x20module,\x20the\x20<code>go</code>\x20command\x20will\x20request\x0a<code>$base/$module/@v/list</code>,\x20then,\x20if\x20no\x20suitable\x20versions\x20are\x20found,\x0a<code>$base/$module/@latest</code>.\x20The\x20<code>go</code>\x20command\x20prefers,\x20in\x20order:\x20the\x20semantically\x0ahighest\x20release\x20version,\x20the\x20semantically\x20highest\x20pre-release\x20version,\x20and\x20the\x0achronologically\x20most\x20recent\x20pseudo-version.\x20In\x20Go\x201.12\x20and\x20earlier,\x20the\x20<code>go</code>\x0acommand\x20considered\x20pseudo-versions\x20in\x20<code>$base/$module/@v/list</code>\x20to\x20be\x20pre-release\x0aversions,\x20but\x20this\x20is\x20no\x20longer\x20true\x20since\x20Go\x201.13.</p>\x0a<p>A\x20module\x20proxy\x20must\x20always\x20serve\x20the\x20same\x20content\x20for\x20successful\x0aresponses\x20for\x20<code>$base/$module/$version.mod</code>\x20and\x20<code>$base/$module/$version.zip</code>\x0aqueries.\x20This\x20content\x20is\x20<a\x20href=\"#authenticating\">cryptographically\x20authenticated</a>\x0ausing\x20<a\x20href=\"#go.sum-files\"><code>go.sum</code>\x20files</a>\x20and,\x20by\x20default,\x20the\x0a<a\x20href=\"#checksum-database\">checksum\x20database</a>.</p>\x0a<p>The\x20<code>go</code>\x20command\x20caches\x20most\x20content\x20it\x20downloads\x20from\x20module\x20proxies\x20in\x20its\x0amodule\x20cache\x20in\x20<code>$GOPATH/pkg/mod/cache/download</code>.\x20Even\x20when\x20downloading\x20directly\x0afrom\x20version\x20control\x20systems,\x20the\x20<code>go</code>\x20command\x20synthesizes\x20explicit\x20<code>info</code>,\x0a<code>mod</code>,\x20and\x20<code>zip</code>\x20files\x20and\x20stores\x20them\x20in\x20this\x20directory,\x20the\x20same\x20as\x20if\x20it\x20had\x0adownloaded\x20them\x20directly\x20from\x20a\x20proxy.\x20The\x20cache\x20layout\x20is\x20the\x20same\x20as\x20the\x20proxy\x0aURL\x20space,\x20so\x20serving\x20<code>$GOPATH/pkg/mod/cache/download</code>\x20at\x20(or\x20copying\x20it\x20to)\x0a<code>https://example.com/proxy</code>\x20would\x20let\x20users\x20access\x20cached\x20module\x20versions\x20by\x0asetting\x20<code>GOPROXY</code>\x20to\x20<code>https://example.com/proxy</code>.</p>\x0a<h3\x20id=\"communicating-with-proxies\">Communicating\x20with\x20proxies</h3>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20download\x20module\x20source\x20code\x20and\x20metadata\x20from\x20a\x20<a\x20href=\"#glos-module-proxy\">module\x0aproxy</a>.\x20The\x20<code>GOPROXY</code>\x20<a\x20href=\"#environment-variables\">environment\x0avariable</a>\x20may\x20be\x20used\x20to\x20configure\x20which\x20proxies\x20the\x0a<code>go</code>\x20command\x20may\x20connect\x20to\x20and\x20whether\x20it\x20may\x20communicate\x20directly\x20with\x0a<a\x20href=\"#vcs\">version\x20control\x20systems</a>.\x20Downloaded\x20module\x20data\x20is\x20saved\x20in\x20the\x20<a\x20href=\"#glos-module-cache\">module\x0acache</a>.\x20The\x20<code>go</code>\x20command\x20will\x20only\x20contact\x20a\x20proxy\x20when\x20it\x0aneeds\x20information\x20not\x20already\x20in\x20the\x20cache.</p>\x0a<p>The\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>\x20section\x20describes\x20requests\x20that\x0amay\x20be\x20sent\x20to\x20a\x20<code>GOPROXY</code>\x20server.\x20However,\x20it's\x20also\x20helpful\x20to\x20understand\x0awhen\x20the\x20<code>go</code>\x20command\x20makes\x20these\x20requests.\x20For\x20example,\x20<code>go\x20build</code>\x20follows\x0athe\x20procedure\x20below:</p>\x0a<ul>\x0a<li>Compute\x20the\x20<a\x20href=\"#glos-build-list\">build\x20list</a>\x20by\x20reading\x20<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x0afiles</a>\x20and\x20performing\x20<a\x20href=\"#glos-minimal-version-selection\">minimal\x20version\x20selection\x0a(MVS)</a>.</li>\x0a<li>Read\x20the\x20packages\x20named\x20on\x20the\x20command\x20line\x20and\x20the\x20packages\x20they\x20import.</li>\x0a<li>If\x20a\x20package\x20is\x20not\x20provided\x20by\x20any\x20module\x20in\x20the\x20build\x20list,\x20find\x20a\x20module\x0athat\x20provides\x20it.\x20Add\x20a\x20module\x20requirement\x20on\x20its\x20latest\x20version\x20to\x20<code>go.mod</code>,\x0aand\x20start\x20over.</li>\x0a<li>Build\x20packages\x20after\x20everything\x20is\x20loaded.</li>\x0a</ul>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20computes\x20the\x20build\x20list,\x20it\x20loads\x20the\x20<code>go.mod</code>\x20file\x20for\x0aeach\x20module\x20in\x20the\x20<a\x20href=\"#glos-module-graph\">module\x20graph</a>.\x20If\x20a\x20<code>go.mod</code>\x20file\x20is\x20not\x0ain\x20the\x20cache,\x20the\x20<code>go</code>\x20command\x20will\x20download\x20it\x20from\x20the\x20proxy\x20using\x20a\x0a<code>$module/@v/$version.mod</code>\x20request\x20(where\x20<code>$module</code>\x20is\x20the\x20module\x20path\x20and\x0a<code>$version</code>\x20is\x20the\x20version).\x20These\x20requests\x20can\x20be\x20tested\x20with\x20a\x20tool\x20like\x0a<code>curl</code>.\x20For\x20example,\x20the\x20command\x20below\x20downloads\x20the\x20<code>go.mod</code>\x20file\x20for\x0a<code>golang.org/x/mod</code>\x20at\x20version\x20<code>v0.2.0</code>:</p>\x0a<pre><code>$\x20curl\x20https://proxy.golang.org/golang.org/x/mod/@v/v0.2.0.mod\x0amodule\x20golang.org/x/mod\x0a\x0ago\x201.12\x0a\x0arequire\x20(\x0a\x09golang.org/x/crypto\x20v0.0.0-20191011191535-87dc89f01550\x0a\x09golang.org/x/tools\x20v0.0.0-20191119224855-298f0cb1881e\x0a\x09golang.org/x/xerrors\x20v0.0.0-20191011141410-1b5146add898\x0a)\x0a</code></pre>\x0a<p>In\x20order\x20to\x20load\x20a\x20package,\x20the\x20<code>go</code>\x20command\x20needs\x20the\x20source\x20code\x20for\x20the\x0amodule\x20that\x20provides\x20it.\x20Module\x20source\x20code\x20is\x20distributed\x20in\x20<code>.zip</code>\x20files\x20which\x0aare\x20extracted\x20into\x20the\x20module\x20cache.\x20If\x20a\x20module\x20<code>.zip</code>\x20is\x20not\x20in\x20the\x20cache,\x0athe\x20<code>go</code>\x20command\x20will\x20download\x20it\x20using\x20a\x20<code>$module/@v/$version.zip</code>\x20request.</p>\x0a<pre><code>$\x20curl\x20-O\x20https://proxy.golang.org/golang.org/x/mod/@v/v0.2.0.zip\x0a$\x20unzip\x20-l\x20v0.2.0.zip\x20|\x20head\x0aArchive:\x20\x20v0.2.0.zip\x0a\x20\x20Length\x20\x20\x20\x20\x20\x20Date\x20\x20\x20\x20Time\x20\x20\x20\x20Name\x0a---------\x20\x20----------\x20-----\x20\x20\x20----\x0a\x20\x20\x20\x20\x201479\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/LICENSE\x0a\x20\x20\x20\x20\x201303\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/PATENTS\x0a\x20\x20\x20\x20\x20\x20559\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/README\x0a\x20\x20\x20\x20\x20\x20\x2021\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/codereview.cfg\x0a\x20\x20\x20\x20\x20\x20214\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/go.mod\x0a\x20\x20\x20\x20\x201476\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/go.sum\x0a\x20\x20\x20\x20\x205224\x20\x2000-00-1980\x2000:00\x20\x20\x20golang.org/x/mod@v0.2.0/gosumcheck/main.go\x0a</code></pre>\x0a<p>Note\x20that\x20<code>.mod</code>\x20and\x20<code>.zip</code>\x20requests\x20are\x20separate,\x20even\x20though\x20<code>go.mod</code>\x20files\x0aare\x20usually\x20contained\x20within\x20<code>.zip</code>\x20files.\x20The\x20<code>go</code>\x20command\x20may\x20need\x20to\x20download\x0a<code>go.mod</code>\x20files\x20for\x20many\x20different\x20modules,\x20and\x20<code>.mod</code>\x20files\x20are\x20much\x20smaller\x0athan\x20<code>.zip</code>\x20files.\x20Additionally,\x20if\x20a\x20Go\x20project\x20does\x20not\x20have\x20a\x20<code>go.mod</code>\x20file,\x0athe\x20proxy\x20will\x20serve\x20a\x20synthetic\x20<code>go.mod</code>\x20file\x20that\x20only\x20contains\x20a\x20<a\x20href=\"#go.mod-module\"><code>module</code>\x0adirective</a>.\x20Synthetic\x20<code>go.mod</code>\x20files\x20are\x20generated\x20by\x20the\x20<code>go</code>\x0acommand\x20when\x20downloading\x20from\x20a\x20<a\x20href=\"#vcs\">version\x20control\x0asystem</a>.</p>\x0a<p>If\x20the\x20<code>go</code>\x20command\x20needs\x20to\x20load\x20a\x20package\x20not\x20provided\x20by\x20any\x20module\x20in\x20the\x0abuild\x20list,\x20it\x20will\x20attempt\x20to\x20find\x20a\x20new\x20module\x20that\x20provides\x20it.\x20The\x20section\x0a<a\x20href=\"#resolve-pkg-mod\">Resolving\x20a\x20package\x20to\x20a\x20module</a>\x20describes\x20this\x20process.\x20In\x0asummary,\x20the\x20<code>go</code>\x20command\x20requests\x20information\x20about\x20the\x20latest\x20version\x20of\x20each\x0amodule\x20path\x20that\x20could\x20possibly\x20contain\x20the\x20package.\x20For\x20example,\x20for\x20the\x0apackage\x20<code>golang.org/x/net/html</code>,\x20the\x20<code>go</code>\x20command\x20would\x20try\x20to\x20find\x20the\x20latest\x0aversions\x20of\x20the\x20modules\x20<code>golang.org/x/net/html</code>,\x20<code>golang.org/x/net</code>,\x0a<code>golang.org/x/</code>,\x20and\x20<code>golang.org</code>.\x20Only\x20<code>golang.org/x/net</code>\x20actually\x20exists\x20and\x0aprovides\x20that\x20package,\x20so\x20the\x20<code>go</code>\x20command\x20uses\x20the\x20latest\x20version\x20of\x20that\x0amodule.\x20If\x20more\x20than\x20one\x20module\x20provides\x20the\x20package,\x20the\x20<code>go</code>\x20command\x20will\x20use\x0athe\x20module\x20with\x20the\x20longest\x20path.</p>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20requests\x20the\x20latest\x20version\x20of\x20a\x20module,\x20it\x20first\x20sends\x20a\x0arequest\x20for\x20<code>$module/@v/list</code>.\x20If\x20the\x20list\x20is\x20empty\x20or\x20none\x20of\x20the\x20returned\x0aversions\x20can\x20be\x20used,\x20it\x20sends\x20a\x20request\x20for\x20<code>$module/@latest</code>.\x20Once\x20a\x20version\x0ais\x20chosen,\x20the\x20<code>go</code>\x20command\x20sends\x20a\x20<code>$module/@v/$version.info</code>\x20request\x20for\x0ametadata.\x20It\x20may\x20then\x20send\x20<code>$module/@v/$version.mod</code>\x20and\x0a<code>$module/@v/$version.zip</code>\x20requests\x20to\x20load\x20the\x20<code>go.mod</code>\x20file\x20and\x20source\x20code.</p>\x0a<pre><code>$\x20curl\x20https://proxy.golang.org/golang.org/x/mod/@v/list\x0av0.1.0\x0av0.2.0\x0a\x0a$\x20curl\x20https://proxy.golang.org/golang.org/x/mod/@v/v0.2.0.info\x0a{&quot;Version&quot;:&quot;v0.2.0&quot;,&quot;Time&quot;:&quot;2020-01-02T17:33:45Z&quot;}\x0a</code></pre>\x0a<p>After\x20downloading\x20a\x20<code>.mod</code>\x20or\x20<code>.zip</code>\x20file,\x20the\x20<code>go</code>\x20command\x20computes\x20a\x0acryptographic\x20hash\x20and\x20checks\x20that\x20it\x20matches\x20a\x20hash\x20in\x20the\x20main\x20module's\x0a<code>go.sum</code>\x20file.\x20If\x20the\x20hash\x20is\x20not\x20present\x20in\x20<code>go.sum</code>,\x20by\x20default,\x20the\x20<code>go</code>\x0acommand\x20retrieves\x20it\x20from\x20the\x20<a\x20href=\"#checksum-database\">checksum\x20database</a>.\x20If\x20the\x0acomputed\x20hash\x20does\x20not\x20match,\x20the\x20<code>go</code>\x20command\x20reports\x20a\x20security\x20error\x20and\x20does\x0anot\x20install\x20the\x20file\x20in\x20the\x20module\x20cache.\x20The\x20<code>GOPRIVATE</code>\x20and\x20<code>GONOSUMDB</code>\x0a<a\x20href=\"#environment-variables\">environment\x20variables</a>\x20may\x20be\x20used\x20to\x20disable\x20requests\x0ato\x20the\x20checksum\x20database\x20for\x20specific\x20modules.\x20The\x20<code>GOSUMDB</code>\x20environment\x0avariable\x20may\x20also\x20be\x20set\x20to\x20<code>off</code>\x20to\x20disable\x20requests\x20to\x20the\x20checksum\x20database\x0aentirely.\x20See\x20<a\x20href=\"#authenticating\">Authenticating\x20modules</a>\x20for\x20more\x0ainformation.\x20Note\x20that\x20version\x20lists\x20and\x20version\x20metadata\x20returned\x20for\x20<code>.info</code>\x0arequests\x20are\x20not\x20authenticated\x20and\x20may\x20change\x20over\x20time.</p>\x0a<h2\x20id=\"vcs\">Version\x20control\x20systems</h2>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20download\x20module\x20source\x20code\x20and\x20metadata\x20directly\x20from\x20a\x0aversion\x20control\x20repository.\x20Downloading\x20a\x20module\x20from\x20a\x0a<a\x20href=\"#communicating-with-proxies\">proxy</a>\x20is\x20usually\x20faster,\x20but\x20connecting\x20directly\x0ato\x20a\x20repository\x20is\x20necessary\x20if\x20a\x20proxy\x20is\x20not\x20available\x20or\x20if\x20a\x20module's\x0arepository\x20is\x20not\x20accessible\x20to\x20a\x20proxy\x20(frequently\x20true\x20for\x20private\x0arepositories).\x20Git,\x20Subversion,\x20Mercurial,\x20Bazaar,\x20and\x20Fossil\x20are\x20supported.\x20A\x0aversion\x20control\x20tool\x20must\x20be\x20installed\x20in\x20a\x20directory\x20in\x20<code>PATH</code>\x20in\x20order\x20for\x20the\x0a<code>go</code>\x20command\x20to\x20use\x20it.</p>\x0a<p>To\x20download\x20specific\x20modules\x20from\x20source\x20repositories\x20instead\x20of\x20a\x20proxy,\x20set\x0athe\x20<code>GOPRIVATE</code>\x20or\x20<code>GONOPROXY</code>\x20environment\x20variables.\x20To\x20configure\x20the\x20<code>go</code>\x0acommand\x20to\x20download\x20all\x20modules\x20directly\x20from\x20source\x20repositories,\x20set\x20<code>GOPROXY</code>\x0ato\x20<code>direct</code>.\x20See\x20<a\x20href=\"#environment-variables\">Environment\x20variables</a>\x20for\x20more\x0ainformation.</p>\x0a<h3\x20id=\"vcs-find\">Finding\x20a\x20repository\x20for\x20a\x20module\x20path</h3>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20downloads\x20a\x20module\x20in\x20<code>direct</code>\x20mode,\x20it\x20starts\x20by\x20locating\x0athe\x20repository\x20that\x20contains\x20the\x20module.\x20The\x20<code>go</code>\x20command\x20sends\x20an\x0aHTTP\x20<code>GET</code>\x20request\x20to\x20a\x20URL\x20derived\x20from\x20the\x20module\x20path\x20with\x20a\x0a<code>?go-get=1</code>\x20query\x20string.\x20For\x20example,\x20for\x20the\x20module\x20<code>golang.org/x/mod</code>,\x0athe\x20<code>go</code>\x20command\x20may\x20send\x20the\x20following\x20requests:</p>\x0a<pre><code>https://golang.org/x/mod?go-get=1\x20(preferred)\x0ahttp://golang.org/x/mod?go-get=1\x20\x20(fallback,\x20only\x20with\x20GOINSECURE)\x0a</code></pre>\x0a<p>The\x20<code>go</code>\x20command\x20will\x20follow\x20redirects\x20but\x20otherwise\x20ignores\x20response\x20status\x0acodes,\x20so\x20the\x20server\x20may\x20respond\x20with\x20a\x20404\x20or\x20any\x20other\x20error\x20status.\x20The\x0a<code>GOINSECURE</code>\x20environment\x20variable\x20may\x20be\x20set\x20to\x20allow\x20fallback\x20and\x20redirects\x20to\x0aunencrypted\x20HTTP\x20for\x20specific\x20modules.</p>\x0a<p>The\x20server\x20must\x20respond\x20with\x20an\x20HTML\x20document\x20containing\x20a\x20<code>&lt;meta&gt;</code>\x20tag\x20in\x20the\x0adocument's\x20<code>&lt;head&gt;</code>.\x20The\x20<code>&lt;meta&gt;</code>\x20tag\x20should\x20appear\x20early\x20in\x20the\x20document\x20to\x0aavoid\x20confusing\x20the\x20<code>go</code>\x20command's\x20restricted\x20parser.\x20In\x20particular,\x20it\x20should\x0aappear\x20before\x20any\x20raw\x20JavaScript\x20or\x20CSS.\x20The\x20<code>&lt;meta&gt;</code>\x20tag\x20must\x20have\x20the\x20form:</p>\x0a<pre><code>&lt;meta\x20name=&quot;go-import&quot;\x20content=&quot;root-path\x20vcs\x20repo-url&quot;&gt;\x0a</code></pre>\x0a<p><code>root-path</code>\x20is\x20the\x20repository\x20root\x20path,\x20the\x20portion\x20of\x20the\x20module\x20path\x20that\x0acorresponds\x20to\x20the\x20repository's\x20root\x20directory.\x20It\x20must\x20be\x20a\x20prefix\x20or\x20an\x20exact\x0amatch\x20of\x20the\x20requested\x20module\x20path.\x20If\x20it's\x20not\x20an\x20exact\x20match,\x20another\x20request\x0ais\x20made\x20for\x20the\x20prefix\x20to\x20verify\x20the\x20<code>&lt;meta&gt;</code>\x20tags\x20match.</p>\x0a<p><code>vcs</code>\x20is\x20the\x20version\x20control\x20system.\x20It\x20must\x20be\x20one\x20of\x20<code>bzr</code>,\x20<code>fossil</code>,\x20<code>git</code>,\x0a<code>hg</code>,\x20<code>svn</code>,\x20<code>mod</code>.\x20The\x20<code>mod</code>\x20scheme\x20instructs\x20the\x20<code>go</code>\x20command\x20to\x20download\x20the\x0amodule\x20from\x20the\x20given\x20URL\x20using\x20the\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x0aprotocol</a>.\x20This\x20allows\x20developers\x20to\x20distribute\x20modules\x0awithout\x20exposing\x20source\x20repositories.</p>\x0a<p><code>repo-url</code>\x20is\x20the\x20repository's\x20URL.\x20If\x20the\x20URL\x20does\x20not\x20include\x20a\x20scheme,\x20the\x0a<code>go</code>\x20command\x20will\x20try\x20each\x20protocol\x20supported\x20by\x20the\x20version\x20control\x20system.\x0aFor\x20example,\x20with\x20Git,\x20the\x20<code>go</code>\x20command\x20will\x20try\x20<code>https://</code>\x20then\x20<code>git+ssh://</code>.\x0aInsecure\x20protocols\x20may\x20only\x20be\x20used\x20if\x20the\x20module\x20path\x20is\x20matched\x20by\x20the\x0a<code>GOINSECURE</code>\x20environment\x20variable.</p>\x0a<p>As\x20an\x20example,\x20consider\x20<code>golang.org/x/mod</code>\x20again.\x20The\x20<code>go</code>\x20command\x20sends\x0aa\x20request\x20to\x20<code>https://golang.org/x/mod?go-get=1</code>.\x20The\x20server\x20responds\x0awith\x20an\x20HTML\x20document\x20containing\x20the\x20tag:</p>\x0a<pre><code>&lt;meta\x20name=&quot;go-import&quot;\x20content=&quot;golang.org/x/mod\x20git\x20https://go.googlesource.com/mod&quot;&gt;\x0a</code></pre>\x0a<p>From\x20this\x20response,\x20the\x20<code>go</code>\x20command\x20will\x20use\x20the\x20Git\x20repository\x20at\x0athe\x20remote\x20URL\x20<code>https://go.googlesource.com/mod</code>.</p>\x0a<p>GitHub\x20and\x20other\x20popular\x20hosting\x20services\x20respond\x20to\x20<code>?go-get=1</code>\x20queries\x20for\x0aall\x20repositories,\x20so\x20usually\x20no\x20server\x20configuration\x20is\x20necessary\x20for\x20modules\x0ahosted\x20at\x20those\x20sites.</p>\x0a<p>After\x20the\x20repository\x20URL\x20is\x20found,\x20the\x20<code>go</code>\x20command\x20will\x20clone\x20the\x20repository\x0ainto\x20the\x20module\x20cache.\x20In\x20general,\x20the\x20<code>go</code>\x20command\x20tries\x20to\x20avoid\x20fetching\x0aunneeded\x20data\x20from\x20a\x20repository.\x20However,\x20the\x20actual\x20commands\x20used\x20vary\x20by\x0aversion\x20control\x20system\x20and\x20may\x20change\x20over\x20time.\x20For\x20Git,\x20the\x20<code>go</code>\x20command\x20can\x0alist\x20most\x20available\x20versions\x20without\x20downloading\x20commits.\x20It\x20will\x20usually\x20fetch\x0acommits\x20without\x20downloading\x20ancestor\x20commits,\x20but\x20doing\x20so\x20is\x20sometimes\x0anecessary.</p>\x0a<h3\x20id=\"vcs-version\">Mapping\x20versions\x20to\x20commits</h3>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20check\x20out\x20a\x20module\x20within\x20a\x20repository\x20at\x20a\x20specific\x0a<a\x20href=\"#glos-canonical-version\">canonical\x20version</a>\x20like\x20<code>v1.2.3</code>,\x20<code>v2.4.0-beta</code>,\x20or\x0a<code>v3.0.0+incompatible</code>.\x20Each\x20module\x20version\x20should\x20have\x20a\x20<dfn>semantic\x20version\x0atag</dfn>\x20within\x20the\x20repository\x20that\x20indicates\x20which\x20revision\x20should\x20be\x20checked\x0aout\x20for\x20a\x20given\x20version.</p>\x0a<p>If\x20a\x20module\x20is\x20defined\x20in\x20the\x20repository\x20root\x20directory\x20or\x20in\x20a\x20major\x20version\x0asubdirectory\x20of\x20the\x20root\x20directory,\x20then\x20each\x20version\x20tag\x20name\x20is\x20equal\x20to\x20the\x0acorresponding\x20version.\x20For\x20example,\x20the\x20module\x20<code>golang.org/x/text</code>\x20is\x20defined\x20in\x0athe\x20root\x20directory\x20of\x20its\x20repository,\x20so\x20the\x20version\x20<code>v0.3.2</code>\x20has\x20the\x20tag\x0a<code>v0.3.2</code>\x20in\x20that\x20repository.\x20This\x20is\x20true\x20for\x20most\x20modules.</p>\x0a<p>If\x20a\x20module\x20is\x20defined\x20in\x20a\x20subdirectory\x20within\x20the\x20repository,\x20that\x20is,\x20the\x0a<a\x20href=\"#glos-module-subdirectory\">module\x20subdirectory</a>\x20portion\x20of\x20the\x20module\x20path\x20is\x0anot\x20empty,\x20then\x20each\x20tag\x20name\x20must\x20be\x20prefixed\x20with\x20the\x20module\x20subdirectory,\x0afollowed\x20by\x20a\x20slash.\x20For\x20example,\x20the\x20module\x20<code>golang.org/x/tools/gopls</code>\x20is\x0adefined\x20in\x20the\x20<code>gopls</code>\x20subdirectory\x20of\x20the\x20repository\x20with\x20root\x20path\x0a<code>golang.org/x/tools</code>.\x20The\x20version\x20<code>v0.4.0</code>\x20of\x20that\x20module\x20must\x20have\x20the\x20tag\x0anamed\x20<code>gopls/v0.4.0</code>\x20in\x20that\x20repository.</p>\x0a<p>The\x20major\x20version\x20number\x20of\x20a\x20semantic\x20version\x20tag\x20must\x20be\x20consistent\x20with\x20the\x0amodule\x20path's\x20major\x20version\x20suffix\x20(if\x20any).\x20For\x20example,\x20the\x20tag\x20<code>v1.0.0</code>\x20could\x0abelong\x20to\x20the\x20module\x20<code>example.com/mod</code>\x20but\x20not\x20<code>example.com/mod/v2</code>,\x20which\x20would\x0ahave\x20tags\x20like\x20<code>v2.0.0</code>.</p>\x0a<p>A\x20tag\x20with\x20major\x20version\x20<code>v2</code>\x20or\x20higher\x20may\x20belong\x20to\x20a\x20module\x20without\x20a\x20major\x0aversion\x20suffix\x20if\x20no\x20<code>go.mod</code>\x20file\x20is\x20present,\x20and\x20the\x20module\x20is\x20in\x20the\x0arepository\x20root\x20directory.\x20This\x20kind\x20of\x20version\x20is\x20denoted\x20with\x20the\x20suffix\x0a<code>+incompatible</code>.\x20The\x20version\x20tag\x20itself\x20must\x20not\x20have\x20the\x20suffix.\x20See\x0a<a\x20href=\"#non-module-compat\">Compatibility\x20with\x20non-module\x20repositories</a>.</p>\x0a<p>Once\x20a\x20tag\x20is\x20created,\x20it\x20should\x20not\x20be\x20deleted\x20or\x20changed\x20to\x20a\x20different\x0arevision.\x20Versions\x20are\x20<a\x20href=\"#authenticating\">authenticated</a>\x20to\x20ensure\x20safe,\x0arepeatable\x20builds.\x20If\x20a\x20tag\x20is\x20modified,\x20clients\x20may\x20see\x20a\x20security\x20error\x20when\x0adownloading\x20it.\x20Even\x20after\x20a\x20tag\x20is\x20deleted,\x20its\x20content\x20may\x20remain\x0aavailable\x20on\x20<a\x20href=\"#glos-module-proxy\">module\x20proxies</a>.</p>\x0a<h3\x20id=\"vcs-pseudo\">Mapping\x20pseudo-versions\x20to\x20commits</h3>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20check\x20out\x20a\x20module\x20within\x20a\x20repository\x20at\x20a\x20specific\x0arevision,\x20encoded\x20as\x20a\x20<a\x20href=\"#glos-pseudo-version\">pseudo-version</a>\x20like\x0a<code>v1.3.2-0.20191109021931-daa7c04131f5</code>.</p>\x0a<p>The\x20last\x2012\x20characters\x20of\x20the\x20pseudo-version\x20(<code>daa7c04131f5</code>\x20in\x20the\x20example\x0aabove)\x20indicate\x20a\x20revision\x20in\x20the\x20repository\x20to\x20check\x20out.\x20The\x20meaning\x20of\x20this\x0adepends\x20on\x20the\x20version\x20control\x20system.\x20For\x20Git\x20and\x20Mercurial,\x20this\x20is\x20a\x20prefix\x0aof\x20a\x20commit\x20hash.\x20For\x20Subversion,\x20this\x20is\x20a\x20zero-padded\x20revision\x20number.</p>\x0a<p>Before\x20checking\x20out\x20a\x20commit,\x20the\x20<code>go</code>\x20command\x20verifies\x20that\x20the\x20timestamp\x0a(<code>20191109021931</code>\x20above)\x20matches\x20the\x20commit\x20date.\x20It\x20also\x20verifies\x20that\x20the\x20base\x0aversion\x20(<code>v1.3.1</code>,\x20the\x20version\x20before\x20<code>v1.3.2</code>\x20in\x20the\x20example\x20above)\x20corresponds\x0ato\x20a\x20semantic\x20version\x20tag\x20that\x20is\x20an\x20ancestor\x20of\x20the\x20commit.\x20These\x20checks\x20ensure\x0athat\x20module\x20authors\x20have\x20full\x20control\x20over\x20how\x20pseudo-versions\x20compare\x20with\x0aother\x20released\x20versions.</p>\x0a<p>See\x20<a\x20href=\"#pseudo-versions\">Pseudo-versions</a>\x20for\x20more\x20information.</p>\x0a<h3\x20id=\"vcs-branch\">Mapping\x20branches\x20and\x20commits\x20to\x20versions</h3>\x0a<p>A\x20module\x20may\x20be\x20checked\x20out\x20at\x20a\x20specific\x20branch,\x20tag,\x20or\x20revision\x20using\x20a\x0a<a\x20href=\"#version-queries\">version\x20query</a>.</p>\x0a<pre><code>go\x20get\x20example.com/mod@master\x0a</code></pre>\x0a<p>The\x20<code>go</code>\x20command\x20converts\x20these\x20names\x20into\x20<a\x20href=\"#glos-canonical-version\">canonical\x0aversions</a>\x20that\x20can\x20be\x20used\x20with\x20<a\x20href=\"#minimal-version-selection\">minimal\x20version\x0aselection\x20(MVS)</a>.\x20MVS\x20depends\x20on\x20the\x20ability\x20to\x0aorder\x20versions\x20unambiguously.\x20Branch\x20names\x20and\x20revisions\x20can't\x20be\x20compared\x0areliably\x20over\x20time,\x20since\x20they\x20depend\x20on\x20repository\x20structure\x20which\x20may\x20change.</p>\x0a<p>If\x20a\x20revision\x20is\x20tagged\x20with\x20one\x20or\x20more\x20semantic\x20version\x20tags\x20like\x20<code>v1.2.3</code>,\x0athe\x20tag\x20for\x20the\x20highest\x20valid\x20version\x20will\x20be\x20used.\x20The\x20<code>go</code>\x20command\x20only\x0aconsiders\x20semantic\x20version\x20tags\x20that\x20could\x20belong\x20to\x20the\x20target\x20module;\x20for\x0aexample,\x20the\x20tag\x20<code>v1.5.2</code>\x20would\x20not\x20be\x20considered\x20for\x20<code>example.com/mod/v2</code>\x20since\x0athe\x20major\x20version\x20doesn't\x20match\x20the\x20module\x20path's\x20suffix.</p>\x0a<p>If\x20a\x20revision\x20is\x20not\x20tagged\x20with\x20a\x20valid\x20semantic\x20version\x20tag,\x20the\x20<code>go</code>\x20command\x0awill\x20generate\x20a\x20<a\x20href=\"#glos-pseudo-version\">pseudo-version</a>.\x20If\x20the\x20revision\x20has\x0aancestors\x20with\x20valid\x20semantic\x20version\x20tags,\x20the\x20highest\x20ancestor\x20version\x20will\x20be\x0aused\x20as\x20the\x20pseudo-version\x20base.\x20See\x20<a\x20href=\"#pseudo-versions\">Pseudo-versions</a>.</p>\x0a<h3\x20id=\"vcs-dir\">Module\x20directories\x20within\x20a\x20repository</h3>\x0a<p>Once\x20a\x20module's\x20repository\x20has\x20been\x20checked\x20out\x20at\x20a\x20specific\x20revision,\x20the\x20<code>go</code>\x0acommand\x20must\x20locate\x20the\x20directory\x20that\x20contains\x20the\x20module's\x20<code>go.mod</code>\x20file\x0a(the\x20module's\x20root\x20directory).</p>\x0a<p>Recall\x20that\x20a\x20<a\x20href=\"#module-path\">module\x20path</a>\x20consists\x20of\x20three\x20parts:\x20a\x0arepository\x20root\x20path\x20(corresponding\x20to\x20the\x20repository\x20root\x20directory),\x0aa\x20module\x20subdirectory,\x20and\x20a\x20major\x20version\x20suffix\x20(only\x20for\x20modules\x20released\x20at\x0a<code>v2</code>\x20or\x20higher).</p>\x0a<p>For\x20most\x20modules,\x20the\x20module\x20path\x20is\x20equal\x20to\x20the\x20repository\x20root\x20path,\x20so\x0athe\x20module's\x20root\x20directory\x20is\x20the\x20repository's\x20root\x20directory.</p>\x0a<p>Modules\x20are\x20sometimes\x20defined\x20in\x20repository\x20subdirectories.\x20This\x20is\x20typically\x0adone\x20for\x20large\x20repositories\x20with\x20multiple\x20components\x20that\x20need\x20to\x20be\x20released\x0aand\x20versioned\x20indepently.\x20Such\x20a\x20module\x20is\x20expected\x20to\x20be\x20found\x20in\x20a\x0asubdirectory\x20that\x20matches\x20the\x20part\x20of\x20the\x20module's\x20path\x20after\x20the\x20repository\x0aroot\x20path.\x20\x20For\x20example,\x20suppose\x20the\x20module\x20<code>example.com/monorepo/foo/bar</code>\x20is\x20in\x0athe\x20repository\x20with\x20root\x20path\x20<code>example.com/monorepo</code>.\x20Its\x20<code>go.mod</code>\x20file\x20must\x20be\x0ain\x20the\x20<code>foo/bar</code>\x20subdirectory.</p>\x0a<p>If\x20a\x20module\x20is\x20released\x20at\x20major\x20version\x20<code>v2</code>\x20or\x20higher,\x20its\x20path\x20must\x20have\x20a\x0a<a\x20href=\"#major-version-suffixes\">major\x20version\x20suffix</a>.\x20A\x20module\x20with\x20a\x20major\x20version\x0asuffix\x20may\x20be\x20defined\x20in\x20one\x20of\x20two\x20subdirectories:\x20one\x20with\x20the\x20suffix,\x0aand\x20one\x20without.\x20For\x20example,\x20suppose\x20a\x20new\x20version\x20of\x20the\x20module\x20above\x20is\x0areleased\x20with\x20the\x20path\x20<code>example.com/monorepo/foo/bar/v2</code>.\x20Its\x20<code>go.mod</code>\x20file\x0amay\x20be\x20in\x20either\x20<code>foo/bar</code>\x20or\x20<code>foo/bar/v2</code>.</p>\x0a<p>Subdirectories\x20with\x20a\x20major\x20version\x20suffix\x20are\x20<dfn>major\x20version\x0asubdirectories</dfn>.\x20They\x20may\x20be\x20used\x20to\x20develop\x20multiple\x20major\x20versions\x20of\x20a\x0amodule\x20on\x20a\x20single\x20branch.\x20This\x20may\x20be\x20unnecessary\x20when\x20development\x20of\x20multiple\x0amajor\x20versions\x20proceeds\x20on\x20separate\x20branches.\x20However,\x20major\x20version\x0asubdirectories\x20have\x20an\x20important\x20property:\x20in\x20<code>GOPATH</code>\x20mode,\x20package\x20import\x0apaths\x20exactly\x20match\x20directories\x20under\x20<code>GOPATH/src</code>.\x20The\x20<code>go</code>\x20command\x20provides\x0aminimal\x20module\x20compatibility\x20in\x20<code>GOPATH</code>\x20mode\x20(see\x20<a\x20href=\"#non-module-compat\">Compatibility\x20with\x0anon-module\x20repositories</a>),\x20so\x20major\x20version\x0asubdirectories\x20aren't\x20always\x20necessary\x20for\x20compatibility\x20with\x20projects\x20built\x20in\x0a<code>GOPATH</code>\x20mode.\x20Older\x20tools\x20that\x20don't\x20support\x20minimal\x20module\x20compatibility\x0amay\x20have\x20problems\x20though.</p>\x0a<p>Once\x20the\x20<code>go</code>\x20command\x20has\x20found\x20the\x20module\x20root\x20directory,\x20it\x20creates\x20a\x20<code>.zip</code>\x0afile\x20of\x20the\x20contents\x20of\x20the\x20directory,\x20then\x20extracts\x20the\x20<code>.zip</code>\x20file\x20into\x20the\x0amodule\x20cache.\x20See\x20<a\x20href=\"#zip-path-size-constraints\">File\x20path\x20and\x20size\x20constraints</a>)\x0afor\x20details\x20on\x20what\x20files\x20may\x20be\x20included\x20in\x20the\x20<code>.zip</code>\x20file.\x20The\x20contents\x20of\x0athe\x20<code>.zip</code>\x20file\x20are\x20<a\x20href=\"#authenticating\">authenticated</a>\x20before\x20extraction\x20into\x20the\x0amodule\x20cache\x20the\x20same\x20way\x20they\x20would\x20be\x20if\x20the\x20<code>.zip</code>\x20file\x20were\x20downloaded\x20from\x0aa\x20proxy.</p>\x0a<h2\x20id=\"zip-files\">Module\x20zip\x20files</h2>\x0a<p>Module\x20versions\x20are\x20distributed\x20as\x20<code>.zip</code>\x20files.\x20There\x20is\x20rarely\x20any\x20need\x20to\x0ainteract\x20directly\x20with\x20these\x20files,\x20since\x20the\x20<code>go</code>\x20command\x20creates,\x20downloads,\x0aand\x20extracts\x20them\x20automatically\x20from\x20<a\x20href=\"#glos-module-proxy\">module\x20proxies</a>\x20and\x0aversion\x20control\x20repositories.\x20However,\x20it's\x20still\x20useful\x20to\x20know\x20about\x20these\x0afiles\x20to\x20understand\x20cross-platform\x20compatibility\x20constraints\x20or\x20when\x0aimplementing\x20a\x20module\x20proxy.</p>\x0a<p>The\x20<a\x20href=\"#go-mod-download\"><code>go\x20mod\x20download</code></a>\x20command\x20downloads\x20zip\x20files\x0afor\x20one\x20or\x20more\x20modules,\x20then\x20extracts\x20those\x20files\x20into\x20the\x20<a\x20href=\"#glos-module-cache\">module\x0acache</a>.\x20Depending\x20on\x20<code>GOPROXY</code>\x20and\x20other\x20<a\x20href=\"#environment-variables\">environment\x0avariables</a>,\x20the\x20<code>go</code>\x20command\x20may\x20either\x20download\x0azip\x20files\x20from\x20a\x20proxy\x20or\x20clone\x20source\x20control\x20repositories\x20and\x20create\x0azip\x20files\x20from\x20them.\x20The\x20<code>-json</code>\x20flag\x20may\x20be\x20used\x20to\x20find\x20the\x20location\x20of\x0adownload\x20zip\x20files\x20and\x20their\x20extracted\x20contents\x20in\x20the\x20module\x20cache.</p>\x0a<p>The\x20<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/zip?tab=doc\"><code>golang.org/x/mod/zip</code></a>\x0apackage\x20may\x20be\x20used\x20to\x20create,\x20extract,\x20or\x20check\x20contents\x20of\x20zip\x20files\x0aprogrammatically.</p>\x0a<h3\x20id=\"zip-path-size-constraints\">File\x20path\x20and\x20size\x20constraints</h3>\x0a<p>There\x20are\x20a\x20number\x20of\x20restrictions\x20on\x20the\x20content\x20of\x20module\x20zip\x20files.\x20These\x0aconstraints\x20ensure\x20that\x20zip\x20files\x20can\x20be\x20extracted\x20safely\x20and\x20consistently\x20on\x0aa\x20wide\x20range\x20of\x20platforms.</p>\x0a<ul>\x0a<li>A\x20module\x20zip\x20file\x20may\x20be\x20at\x20most\x20500\x20MiB\x20in\x20size.\x20The\x20total\x20uncompressed\x20size\x0aof\x20its\x20files\x20is\x20also\x20limited\x20to\x20500\x20MiB.\x20<code>go.mod</code>\x20files\x20are\x20limited\x20to\x2016\x20MiB.\x0a<code>LICENSE</code>\x20files\x20are\x20also\x20limited\x20to\x2016\x20MiB.\x20These\x20limits\x20exist\x20to\x20mitigate\x0adenial\x20of\x20service\x20attacks\x20on\x20users,\x20proxies,\x20and\x20other\x20parts\x20of\x20the\x20module\x0aecosystem.\x20Repositories\x20that\x20contain\x20more\x20than\x20500\x20MiB\x20of\x20files\x20in\x20a\x20module\x0adirectory\x20tree\x20should\x20tag\x20module\x20versions\x20at\x20commits\x20that\x20only\x20include\x20files\x0aneeded\x20to\x20build\x20the\x20module's\x20packages;\x20videos,\x20models,\x20and\x20other\x20large\x20assets\x0aare\x20usually\x20not\x20needed\x20for\x20builds.</li>\x0a<li>Each\x20file\x20within\x20a\x20module\x20zip\x20file\x20must\x20begin\x20with\x20the\x20prefix\x0a<code>$module@$version/</code>\x20where\x20<code>$module</code>\x20is\x20the\x20module\x20path\x20and\x20<code>$version</code>\x20is\x20the\x0aversion,\x20for\x20example,\x20<code>golang.org/x/mod@v0.3.0/</code>.\x20The\x20module\x20path\x20must\x20be\x0avalid,\x20the\x20version\x20must\x20be\x20valid\x20and\x20canonical,\x20and\x20the\x20version\x20must\x20match\x20the\x0amodule\x20path's\x20major\x20version\x20suffix.\x20See\x20<a\x20href=\"#go.mod-ident\">Module\x20paths\x20and\x0aversions</a>\x20for\x20specific\x20definitions\x20and\x20restrictions.</li>\x0a<li>File\x20modes,\x20timestamps,\x20and\x20other\x20metadata\x20are\x20ignored.</li>\x0a<li>Empty\x20directories\x20(entries\x20with\x20paths\x20ending\x20with\x20a\x20slash)\x20may\x20be\x20included\x0ain\x20module\x20zip\x20files\x20but\x20are\x20not\x20extracted.\x20The\x20<code>go</code>\x20command\x20does\x20not\x20include\x0aempty\x20directories\x20in\x20zip\x20files\x20it\x20creates.</li>\x0a<li>Symbolic\x20links\x20and\x20other\x20irregular\x20files\x20are\x20ignored\x20when\x20creating\x20zip\x20files,\x0asince\x20they\x20aren't\x20portable\x20across\x20operating\x20systems\x20and\x20file\x20systems,\x20and\x0athere's\x20no\x20portable\x20way\x20to\x20represent\x20them\x20in\x20the\x20zip\x20file\x20format.</li>\x0a<li>No\x20two\x20files\x20within\x20a\x20zip\x20file\x20may\x20have\x20paths\x20equal\x20under\x20Unicode\x20case-folding\x0a(see\x20<a\x20href=\"https://pkg.go.dev/strings?tab=doc#EqualFold\"><code>strings.EqualFold</code></a>).\x0aThis\x20ensures\x20that\x20zip\x20files\x20can\x20be\x20extracted\x20on\x20case-insensitive\x20file\x20systems\x0awithout\x20collisions.</li>\x0a<li>A\x20<code>go.mod</code>\x20file\x20may\x20or\x20may\x20not\x20appear\x20in\x20the\x20top-level\x20directory\x0a(<code>$module@$version/go.mod</code>).\x20If\x20present,\x20it\x20must\x20have\x20the\x20name\x20<code>go.mod</code>\x20(all\x0alowercase).\x20Files\x20named\x20<code>go.mod</code>\x20are\x20not\x20allowed\x20in\x20any\x20other\x20directory.</li>\x0a<li>File\x20and\x20directory\x20names\x20within\x20a\x20module\x20may\x20consist\x20of\x20Unicode\x20letters,\x20ASCII\x0adigits,\x20the\x20ASCII\x20space\x20character\x20(U+0020),\x20and\x20the\x20ASCII\x20punctuation\x0acharacters\x20<code>!#$%&amp;()+,-.=@[]^_{}~</code>.\x20Note\x20that\x20package\x20paths\x20may\x20not\x20contain\x20all\x0athese\x20all\x20these\x20characters.\x20See\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/module?tab=doc#CheckFilePath\"><code>module.CheckFilePath</code></a>\x0aand\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/module?tab=doc#CheckImportPath\"><code>module.CheckImportPath</code></a>\x0afor\x20the\x20differences.</li>\x0a<li>A\x20file\x20or\x20directory\x20name\x20up\x20to\x20the\x20first\x20dot\x20must\x20not\x20be\x20a\x20reserved\x20file\x20name\x0aon\x20Windows,\x20regardless\x20of\x20case\x20(<code>CON</code>,\x20<code>com1</code>,\x20<code>NuL</code>,\x20and\x20so\x20on).</li>\x0a</ul>\x0a<h2\x20id=\"private-modules\">Private\x20modules</h2>\x0a<p>Go\x20modules\x20are\x20frequently\x20developed\x20and\x20distributed\x20on\x20version\x20control\x20servers\x0aand\x20module\x20proxies\x20that\x20aren't\x20available\x20on\x20the\x20public\x20internet.\x20The\x20<code>go</code>\x0acommand\x20can\x20download\x20and\x20build\x20modules\x20from\x20private\x20sources,\x20though\x20it\x20usually\x0arequires\x20some\x20configuration.</p>\x0a<p>The\x20environment\x20variables\x20below\x20may\x20be\x20used\x20to\x20configure\x20access\x20to\x20private\x0amodules.\x20See\x20<a\x20href=\"#environment-variables\">Environment\x20variables</a>\x20for\x20details.\x20See\x0aalso\x20<a\x20href=\"#privacy\">Privacy</a>\x20for\x20information\x20on\x20controlling\x20information\x20sent\x20to\x0apublic\x20servers.</p>\x0a<ul>\x0a<li><code>GOPROXY</code>\x20\xe2\x80\x94\x20list\x20of\x20module\x20proxy\x20URLs.\x20The\x20<code>go</code>\x20command\x20will\x20attempt\x20to\x0adownload\x20modules\x20from\x20each\x20server\x20in\x20sequence.\x20The\x20keyword\x20<code>direct</code>\x20instructs\x0athe\x20<code>go</code>\x20command\x20to\x20download\x20modules\x20from\x20version\x20control\x20repositories\x0awhere\x20they're\x20developed\x20instead\x20of\x20using\x20a\x20proxy.</li>\x0a<li><code>GOPRIVATE</code>\x20\xe2\x80\x94\x20list\x20of\x20glob\x20patterns\x20of\x20module\x20path\x20prefixes\x20that\x20should\x20be\x0aconsidered\x20private.\x20Acts\x20as\x20a\x20default\x20value\x20for\x20<code>GONOPROXY</code>\x20and\x20<code>GONOSUMDB</code>.</li>\x0a<li><code>GONOPROXY</code>\x20\xe2\x80\x94\x20list\x20of\x20glob\x20patterns\x20of\x20module\x20path\x20prefixes\x20that\x20should\x20not\x20be\x0adownloaded\x20from\x20a\x20proxy.\x20The\x20<code>go</code>\x20command\x20will\x20download\x20matching\x20modules\x20from\x0aversion\x20control\x20repositories\x20where\x20they're\x20developed,\x20regardless\x20of\x20<code>GOPROXY</code>.</li>\x0a<li><code>GONOSUMDB</code>\x20\xe2\x80\x94\x20list\x20of\x20glob\x20patterns\x20of\x20module\x20path\x20prefixes\x20that\x20should\x20not\x20be\x0achecked\x20using\x20the\x20public\x20checksum\x20database,\x0a<a\x20href=\"https://sum.golang.org\">sum.golang.org</a>.</li>\x0a<li><code>GOINSECURE</code>\x20\xe2\x80\x94\x20list\x20of\x20glob\x20patterns\x20of\x20module\x20path\x20prefixes\x20that\x20may\x20be\x0aretrieved\x20over\x20HTTP\x20and\x20other\x20insecure\x20protocols.</li>\x0a</ul>\x0a<p>These\x20variables\x20may\x20be\x20set\x20in\x20the\x20development\x20environment\x20(for\x20example,\x20in\x20a\x0a<code>.profile</code>\x20file),\x20or\x20they\x20may\x20be\x20set\x20permanently\x20with\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Print_Go_environment_information\"><code>go\x20env\x20-w</code></a>.</p>\x0a<p>The\x20rest\x20of\x20this\x20section\x20describes\x20common\x20patterns\x20for\x20providing\x20access\x20to\x0aprivate\x20module\x20proxies\x20and\x20version\x20control\x20repositories.</p>\x0a<h3\x20id=\"private-module-proxy-all\">Private\x20proxy\x20serving\x20all\x20modules</h3>\x0a<p>A\x20central\x20private\x20proxy\x20server\x20that\x20serves\x20all\x20modules\x20(public\x20and\x20private)\x0aprovides\x20the\x20most\x20control\x20for\x20administrators\x20and\x20requires\x20the\x20least\x0aconfiguration\x20for\x20individual\x20developers.</p>\x0a<p>To\x20configure\x20the\x20<code>go</code>\x20command\x20to\x20use\x20such\x20a\x20server,\x20set\x20the\x20following\x0aenvironment\x20variables,\x20replacing\x20<code>https://proxy.corp.example.com</code>\x20with\x20your\x0aproxy\x20URL\x20and\x20<code>corp.example.com</code>\x20with\x20your\x20module\x20prefix:</p>\x0a<pre><code>GOPROXY=https://proxy.corp.example.com\x0aGONOSUMDB=corp.example.com\x0a</code></pre>\x0a<p>The\x20<code>GOPROXY</code>\x20setting\x20instructs\x20the\x20<code>go</code>\x20command\x20to\x20only\x20download\x20modules\x20from\x0a<code>https://proxy.corp.example.com</code>;\x20the\x20<code>go</code>\x20command\x20will\x20not\x20connect\x20to\x20other\x0aproxies\x20or\x20version\x20control\x20repositories.</p>\x0a<p>The\x20<code>GONOSUMDB</code>\x20setting\x20instructs\x20the\x20<code>go</code>\x20command\x20not\x20to\x20use\x20the\x20public\x0achecksum\x20database\x20to\x20authenticate\x20modules\x20with\x20paths\x20starting\x20with\x0a<code>corp.example.com</code>.</p>\x0a<p>A\x20proxy\x20running\x20in\x20this\x20configuration\x20will\x20likely\x20need\x20read\x20access\x20to\x0aprivate\x20version\x20control\x20servers.\x20It\x20will\x20also\x20need\x20access\x20to\x20the\x20public\x20internet\x0ato\x20download\x20new\x20versions\x20of\x20public\x20modules.</p>\x0a<p>There\x20are\x20several\x20existing\x20implementations\x20of\x20<code>GOPROXY</code>\x20servers\x20that\x20may\x20be\x20used\x0athis\x20way.\x20A\x20minimal\x20implementation\x20would\x20serve\x20files\x20from\x20a\x20<a\x20href=\"#glos-module-cache\">module\x0acache</a>\x20directory\x20and\x20would\x20use\x20<a\x20href=\"#go-mod-download\"><code>go\x20mod\x20download</code></a>\x20(with\x20suitable\x20configuration)\x20to\x20retrieve\x20missing\x0amodules.</p>\x0a<h3\x20id=\"private-module-proxy-private\">Private\x20proxy\x20serving\x20private\x20modules</h3>\x0a<p>A\x20private\x20proxy\x20server\x20may\x20serve\x20private\x20modules\x20without\x20also\x20serving\x20publicly\x0aavailable\x20modules.\x20The\x20<code>go</code>\x20command\x20can\x20be\x20configured\x20to\x20fall\x20back\x20to\x0apublic\x20sources\x20for\x20modules\x20that\x20aren't\x20available\x20on\x20the\x20private\x20server.</p>\x0a<p>To\x20configure\x20the\x20<code>go</code>\x20command\x20to\x20work\x20this\x20way,\x20set\x20the\x20following\x20environment\x0avariables,\x20replacing\x20<code>https://proxy.corp.example.com</code>\x20with\x20the\x20proxy\x20URL\x20and\x0a<code>corp.example.com</code>\x20with\x20the\x20module\x20prefix:</p>\x0a<pre><code>GOPROXY=https://proxy.corp.example.com,https://proxy.golang.org,direct\x0aGONOSUMDB=corp.example.com\x0a</code></pre>\x0a<p>The\x20<code>GOPROXY</code>\x20setting\x20instructs\x20the\x20<code>go</code>\x20command\x20to\x20try\x20to\x20download\x20modules\x20from\x0a<code>https://proxy.corp.example.com</code>\x20first.\x20If\x20that\x20server\x20responds\x20with\x20404\x20(Not\x0aFound)\x20or\x20410\x20(Gone),\x20the\x20<code>go</code>\x20command\x20will\x20fall\x20back\x20to\x0a<code>https://proxy.golang.org</code>,\x20then\x20to\x20direct\x20connections\x20to\x20repositories.</p>\x0a<p>The\x20<code>GONOSUMDB</code>\x20setting\x20instructs\x20the\x20<code>go</code>\x20command\x20not\x20to\x20use\x20the\x20public\x20checksum\x0adatabase\x20to\x20authenticate\x20modules\x20whose\x20paths\x20start\x20with\x20<code>corp.example.com</code>.</p>\x0a<p>Note\x20that\x20a\x20proxy\x20used\x20in\x20this\x20configuration\x20may\x20still\x20control\x20access\x20to\x20public\x0amodules,\x20even\x20though\x20it\x20doesn't\x20serve\x20them.\x20If\x20the\x20proxy\x20responds\x20to\x20a\x20request\x0awith\x20an\x20error\x20status\x20other\x20than\x20404\x20or\x20410,\x20the\x20<code>go</code>\x20command\x20will\x20not\x20fall\x20back\x0ato\x20later\x20entries\x20in\x20the\x20<code>GOPROXY</code>\x20list.\x20For\x20example,\x20the\x20proxy\x20could\x20respond\x0awith\x20403\x20(Forbidden)\x20for\x20a\x20module\x20with\x20an\x20unsuitable\x20license\x20or\x20with\x20known\x0asecurity\x20vulnerabilities.</p>\x0a<h3\x20id=\"private-module-proxy-direct\">Direct\x20access\x20to\x20private\x20modules</h3>\x0a<p>The\x20<code>go</code>\x20command\x20may\x20be\x20configured\x20to\x20bypass\x20public\x20proxies\x20and\x20download\x20private\x0amodules\x20directly\x20from\x20version\x20control\x20servers.\x20This\x20is\x20useful\x20when\x20running\x20a\x0aprivate\x20proxy\x20server\x20is\x20not\x20feasible.</p>\x0a<p>To\x20configure\x20the\x20<code>go</code>\x20command\x20to\x20work\x20this\x20way,\x20set\x20<code>GOPRIVATE</code>,\x20replacing\x0a<code>corp.example.com</code>\x20the\x20private\x20module\x20prefix:</p>\x0a<pre><code>GOPRIVATE=corp.example.com\x0a</code></pre>\x0a<p>The\x20<code>GOPROXY</code>\x20variable\x20does\x20not\x20need\x20to\x20be\x20changed\x20in\x20this\x20situation.\x20It\x0adefaults\x20to\x20<code>https://proxy.golang.org,direct</code>,\x20which\x20instructs\x20the\x20<code>go</code>\x20command\x0ato\x20attempt\x20to\x20download\x20modules\x20from\x20<code>https://proxy.golang.org</code>\x20first,\x20then\x20fall\x0aback\x20to\x20a\x20direct\x20connection\x20if\x20that\x20proxy\x20responds\x20with\x20404\x20(Not\x20Found)\x20or\x20410\x0a(Gone).</p>\x0a<p>The\x20<code>GOPRIVATE</code>\x20setting\x20instructs\x20the\x20<code>go</code>\x20command\x20not\x20to\x20connect\x20to\x20a\x20proxy\x20or\x0ato\x20the\x20checksum\x20database\x20for\x20modules\x20starting\x20with\x20<code>corp.example.com</code>.</p>\x0a<p>An\x20internal\x20HTTP\x20server\x20may\x20still\x20be\x20needed\x20to\x20<a\x20href=\"#vcs-find\">resolve\x20module\x20paths\x20to\x0arepository\x20URLs</a>.\x20For\x20example,\x20when\x20the\x20<code>go</code>\x20command\x20downloads\x20the\x0amodule\x20<code>corp.example.com/mod</code>,\x20it\x20will\x20send\x20a\x20GET\x20request\x20to\x0a<code>https://corp.example.com/mod?go-get=1</code>,\x20and\x20it\x20will\x20look\x20for\x20the\x20repository\x20URL\x0ain\x20the\x20response.\x20To\x20avoid\x20this\x20requirement,\x20ensure\x20that\x20each\x20private\x20module\x20path\x0ahas\x20a\x20VCS\x20suffix\x20(like\x20<code>.git</code>)\x20marking\x20the\x20repository\x20root\x20prefix.\x20For\x20example,\x0awhen\x20the\x20<code>go</code>\x20command\x20downloads\x20the\x20module\x20<code>corp.example.com/repo.git/mod</code>,\x20it\x0awill\x20clone\x20the\x20Git\x20repository\x20at\x20<code>https://corp.example.com/repo.git</code>\x20or\x0a<code>ssh://corp.example.com/repo.git</code>\x20without\x20needing\x20to\x20make\x20additional\x20requests.</p>\x0a<p>Developers\x20will\x20need\x20read\x20access\x20to\x20repositories\x20containing\x20private\x20modules.\x0aThis\x20may\x20be\x20configured\x20in\x20global\x20VCS\x20configuration\x20files\x20like\x20<code>.gitconfig</code>.\x0aIt's\x20best\x20if\x20VCS\x20tools\x20are\x20configured\x20not\x20to\x20need\x20interactive\x20authentication\x0aprompts.\x20By\x20default,\x20when\x20invoking\x20Git,\x20the\x20<code>go</code>\x20command\x20disables\x20interactive\x0aprompts\x20by\x20setting\x20<code>GIT_TERMINAL_PROMPT=0</code>,\x20but\x20it\x20respects\x20explicit\x20settings.</p>\x0a<h3\x20id=\"private-module-proxy-auth\">Passing\x20credentials\x20to\x20private\x20proxies</h3>\x0a<p>The\x20<code>go</code>\x20command\x20supports\x20HTTP\x20<a\x20href=\"https://en.wikipedia.org/wiki/Basic_access_authentication\">basic\x0aauthentication</a>\x20when\x0acommunicating\x20with\x20proxy\x20servers.</p>\x0a<p>Credentials\x20may\x20be\x20specified\x20in\x20a\x20<a\x20href=\"https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html\"><code>.netrc</code>\x0afile</a>.\x0aFor\x20example,\x20a\x20<code>.netrc</code>\x20file\x20containing\x20the\x20lines\x20below\x20would\x20configure\x20the\x20<code>go</code>\x0acommand\x20to\x20connect\x20to\x20the\x20machine\x20<code>proxy.corp.example.com</code>\x20with\x20the\x20given\x0ausername\x20and\x20password.</p>\x0a<pre><code>machine\x20proxy.corp.example.com\x0alogin\x20jrgopher\x0apassword\x20hunter2\x0a</code></pre>\x0a<p>The\x20location\x20of\x20the\x20file\x20may\x20be\x20set\x20with\x20the\x20<code>NETRC</code>\x20environment\x20variable.\x20If\x0a<code>NETRC</code>\x20is\x20not\x20set,\x20the\x20<code>go</code>\x20command\x20will\x20read\x20<code>$HOME/.netrc</code>\x20on\x20UNIX-like\x0aplatforms\x20or\x20<code>%USERPROFILE%\\_netrc</code>\x20on\x20Windows.</p>\x0a<p>Fields\x20in\x20<code>.netrc</code>\x20are\x20separated\x20with\x20spaces,\x20tabs,\x20and\x20newlines.\x20Unfortunately,\x0athese\x20characters\x20cannot\x20be\x20used\x20in\x20usernames\x20or\x20passwords.\x20Note\x20also\x20that\x20the\x0amachine\x20name\x20cannot\x20be\x20a\x20full\x20URL,\x20so\x20it's\x20not\x20possible\x20to\x20specify\x20different\x0ausernames\x20and\x20passwords\x20for\x20different\x20paths\x20on\x20the\x20same\x20machine.</p>\x0a<p>Alternatively,\x20credentials\x20may\x20be\x20specified\x20directly\x20in\x20<code>GOPROXY</code>\x20URLs.\x20For\x0aexample:</p>\x0a<pre><code>GOPROXY=https://jrgopher:hunter2@proxy.corp.example.com\x0a</code></pre>\x0a<p>Use\x20caution\x20when\x20taking\x20this\x20approach:\x20environment\x20variables\x20may\x20be\x20appear\x0ain\x20shell\x20history\x20and\x20in\x20logs.</p>\x0a<h2\x20id=\"module-cache\">Module\x20cache</h2>\x0a<p>The\x20<dfn>module\x20cache</dfn>\x20is\x20the\x20directory\x20where\x20the\x20<code>go</code>\x20command\x20stores\x0adownloaded\x20module\x20files.\x20The\x20module\x20cache\x20is\x20distinct\x20from\x20the\x20build\x20cache,\x0awhich\x20contains\x20compiled\x20packages\x20and\x20other\x20build\x20artifacts.</p>\x0a<p>The\x20default\x20location\x20of\x20the\x20module\x20cache\x20is\x20<code>$GOPATH/pkg/mod</code>.\x20To\x20use\x20a\x0adifferent\x20location,\x20set\x20the\x20<code>GOMODCACHE</code>\x20<a\x20href=\"#environment-variables\">environment\x0avariable</a>.</p>\x0a<p>The\x20module\x20cache\x20has\x20no\x20maximum\x20size,\x20and\x20the\x20<code>go</code>\x20command\x20does\x20not\x20remove\x20its\x0acontents\x20automatically.</p>\x0a<p>The\x20cache\x20may\x20be\x20shared\x20by\x20multiple\x20Go\x20projects\x20developed\x20on\x20the\x20same\x20machine.\x0aThe\x20<code>go</code>\x20command\x20will\x20use\x20the\x20same\x20cache\x20regardless\x20of\x20the\x20location\x20of\x20the\x0amain\x20module.\x20Multiple\x20instances\x20of\x20the\x20<code>go</code>\x20command\x20may\x20safely\x20access\x20the\x0asame\x20module\x20cache\x20at\x20the\x20same\x20time.</p>\x0a<p>The\x20<code>go</code>\x20command\x20creates\x20module\x20source\x20files\x20and\x20directories\x20in\x20the\x20cache\x20with\x0aread-only\x20permissions\x20to\x20prevent\x20accidental\x20changes\x20to\x20modules\x20after\x20they're\x0adownloaded.\x20This\x20has\x20the\x20unfortunate\x20side-effect\x20of\x20making\x20the\x20cache\x20difficult\x0ato\x20delete\x20with\x20commands\x20like\x20<code>rm\x20-rf</code>.\x20The\x20cache\x20may\x20instead\x20be\x20deleted\x20with\x0a<a\x20href=\"#go-clean-modcache\"><code>go\x20clean\x20-modcache</code></a>.\x20Alternatively,\x20when\x20the\x0a<code>-modcacherw</code>\x20flag\x20is\x20used,\x20the\x20<code>go</code>\x20command\x20will\x20create\x20new\x20directories\x20with\x0aread-write\x20permissions.\x20This\x20increases\x20the\x20risk\x20of\x20editors,\x20tests,\x20and\x20other\x0aprograms\x20modifying\x20files\x20in\x20the\x20module\x20cache.\x20The\x20<a\x20href=\"#go-mod-verify\"><code>go\x20mod\x20verify</code></a>\x20command\x20may\x20be\x20used\x20to\x20detect\x20modifications\x20to\x0adependencies\x20of\x20the\x20main\x20module.\x20It\x20scans\x20the\x20extracted\x20contents\x20of\x20each\x0amodule\x20dependency\x20and\x20confirms\x20they\x20match\x20the\x20expected\x20hash\x20in\x20<code>go.sum</code>.</p>\x0a<p>The\x20table\x20below\x20explains\x20the\x20purpose\x20of\x20most\x20files\x20in\x20the\x20module\x20cache.\x20Some\x0atransient\x20files\x20(lock\x20files,\x20temporary\x20directories)\x20are\x20omitted.\x20For\x20each\x20path,\x0a<code>$module</code>\x20is\x20a\x20module\x20path,\x20and\x20<code>$version</code>\x20is\x20a\x20version.\x20Paths\x20ending\x20with\x0aslashes\x20(<code>/</code>)\x20are\x20directories.\x20Capital\x20letters\x20in\x20module\x20paths\x20and\x20versions\x20are\x0aescaped\x20using\x20exclamation\x20points\x20(<code>Azure</code>\x20is\x20escaped\x20as\x20<code>!azure</code>)\x20to\x20avoid\x0aconflicts\x20on\x20case-insensitive\x20file\x20systems.</p>\x0a<table\x20class=\"ModTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<th>Path</th>\x0a\x20\x20\x20\x20\x20\x20<th>Description</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$module@$version/</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Directory\x20containing\x20extracted\x20contents\x20of\x20a\x20module\x20<code>.zip</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20file.\x20This\x20serves\x20as\x20a\x20module\x20root\x20directory\x20for\x20a\x20downloaded\x20module.\x20It\x0a\x20\x20\x20\x20\x20\x20\x20\x20won't\x20contain\x20contain\x20a\x20<code>go.mod</code>\x20file\x20if\x20the\x20original\x20module\x0a\x20\x20\x20\x20\x20\x20\x20\x20didn't\x20have\x20one.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Directory\x20containing\x20files\x20downloaded\x20from\x20module\x20proxies\x20and\x20files\x0a\x20\x20\x20\x20\x20\x20\x20\x20derived\x20from\x20<a\x20href=\"#vcs\">version\x20control\x20systems</a>.\x20The\x20layout\x20of\x0a\x20\x20\x20\x20\x20\x20\x20\x20this\x20directory\x20follows\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>,\x20so\x0a\x20\x20\x20\x20\x20\x20\x20\x20this\x20directory\x20may\x20be\x20used\x20as\x20a\x20proxy\x20when\x20served\x20by\x20an\x20HTTP\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20server\x20or\x20when\x20referenced\x20with\x20a\x20<code>file://</code>\x20URL.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/$module/@v/list</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20List\x20of\x20known\x20versions\x20(see\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>).\x20This\x0a\x20\x20\x20\x20\x20\x20\x20\x20may\x20change\x20over\x20time,\x20so\x20the\x20<code>go</code>\x20command\x20usually\x20fetches\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20new\x20copy\x20instead\x20of\x20re-using\x20this\x20file.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/$module/@v/$version.info</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20JSON\x20metadata\x20about\x20the\x20version.\x20(see\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>).\x20This\x0a\x20\x20\x20\x20\x20\x20\x20\x20may\x20change\x20over\x20time,\x20so\x20the\x20<code>go</code>\x20command\x20usually\x20fetches\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20new\x20copy\x20instead\x20of\x20re-using\x20this\x20file.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/$module/@v/$version.mod</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20The\x20<code>go.mod</code>\x20file\x20for\x20this\x20version\x20(see\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>).\x20If\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20original\x20module\x20did\x20not\x20have\x20a\x20<code>go.mod</code>\x20file,\x20this\x20is\x0a\x20\x20\x20\x20\x20\x20\x20\x20a\x20synthesized\x20file\x20with\x20no\x20requirements.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/$module/@v/$version.zip</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20The\x20zipped\x20contents\x20of\x20the\x20module\x20(see\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x20protocol</a>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#zip-files\">Module\x20zip\x20files</a>).\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/$module/@v/$version.ziphash</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20A\x20cryptographic\x20hash\x20of\x20the\x20files\x20in\x20the\x20<code>.zip</code>\x20file.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Note\x20that\x20the\x20<code>.zip</code>\x20file\x20itself\x20is\x20not\x20hashed,\x20so\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20order,\x20compression,\x20alignment,\x20and\x20metadata\x20don't\x20affect\x20the\x20hash.\x0a\x20\x20\x20\x20\x20\x20\x20\x20When\x20using\x20a\x20module,\x20the\x20<code>go</code>\x20command\x20verifies\x20this\x20hash\x0a\x20\x20\x20\x20\x20\x20\x20\x20matches\x20the\x20corresponding\x20line\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#go.sum-files\"><code>go.sum</code></a>.\x20The\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#go-mod-verify\"><code>go\x20mod\x20verify</code></a>\x20command\x20checks\x0a\x20\x20\x20\x20\x20\x20\x20\x20that\x20the\x20hashes\x20of\x20module\x20<code>.zip</code>\x20files\x20and\x20extracted\x0a\x20\x20\x20\x20\x20\x20\x20\x20directories\x20match\x20these\x20files.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/download/sumdb/</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Directory\x20containing\x20files\x20downloaded\x20from\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#checksum-database\">checksum\x20database</a>\x20(typically\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>sum.golang.org</code>).\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>cache/vcs/</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Contains\x20cloned\x20version\x20control\x20repositories\x20for\x20modules\x20fetched\x0a\x20\x20\x20\x20\x20\x20\x20\x20directly\x20from\x20their\x20sources.\x20Directory\x20names\x20are\x20hex-encoded\x20hashes\x0a\x20\x20\x20\x20\x20\x20\x20\x20derived\x20from\x20the\x20repository\x20type\x20and\x20URL.\x20Repositories\x20are\x20optimized\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20size\x20on\x20disk.\x20For\x20example,\x20cloned\x20Git\x20repositories\x20are\x20bare\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20shallow\x20when\x20possible.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</tbody>\x0a</table>\x0a<h2\x20id=\"authenticating\">Authenticating\x20modules</h2>\x0a<!--\x20TODO:\x20continue\x20this\x20section\x20-->\x0a<p>When\x20deciding\x20whether\x20to\x20trust\x20the\x20source\x20code\x20for\x20a\x20module\x20version\x20just\x0afetched\x20from\x20a\x20proxy\x20or\x20origin\x20server,\x20the\x20<code>go</code>\x20command\x20first\x20consults\x20the\x0a<code>go.sum</code>\x20lines\x20in\x20the\x20<code>go.sum</code>\x20file\x20of\x20the\x20current\x20module.\x20If\x20the\x20<code>go.sum</code>\x20file\x0adoes\x20not\x20contain\x20an\x20entry\x20for\x20that\x20module\x20version,\x20then\x20it\x20may\x20consult\x20the\x0achecksum\x20database.</p>\x0a<h3\x20id=\"go\"\x20class=\"sum-files\">go.sum\x20files</h3>\x0a<p>A\x20module\x20may\x20have\x20a\x20text\x20file\x20named\x20<code>go.sum</code>\x20in\x20its\x20root\x20directory,\x20alongside\x0aits\x20<code>go.mod</code>\x20file.\x20The\x20<code>go.sum</code>\x20file\x20contains\x20cryptographic\x20hashes\x20of\x20the\x0amodule's\x20direct\x20and\x20indirect\x20dependencies.\x20<code>go.sum</code>\x20may\x20be\x20empty\x20or\x20absent\x0aif\x20the\x20module\x20has\x20no\x20dependencies\x20or\x20if\x20all\x20dependencies\x20are\x20replaced\x20with\x0alocal\x20directories\x20using\x20<a\x20href=\"#go.mod-replace\"><code>replace</code>\x20directives</a>.</p>\x0a<p>Each\x20line\x20in\x20<code>go.sum</code>\x20has\x20three\x20fields\x20separated\x20by\x20spaces:\x20a\x20module\x20path,\x0aa\x20version\x20(possibly\x20ending\x20with\x20<code>/go.mod</code>),\x20and\x20a\x20hash.</p>\x0a<ul>\x0a<li>The\x20module\x20path\x20is\x20the\x20name\x20of\x20the\x20module\x20the\x20hash\x20belongs\x20to.</li>\x0a<li>The\x20version\x20is\x20the\x20version\x20of\x20the\x20module\x20the\x20hash\x20belongs\x20to.\x20If\x20the\x20version\x0aends\x20with\x20<code>/go.mod</code>,\x20the\x20hash\x20is\x20for\x20the\x20module's\x20<code>go.mod</code>\x20file\x20only;\x0aotherwise,\x20the\x20hash\x20is\x20for\x20the\x20files\x20within\x20the\x20module's\x20<code>.zip</code>\x20file.</li>\x0a<li>The\x20hash\x20column\x20consists\x20of\x20an\x20algorithm\x20name\x20(like\x20<code>h1</code>)\x20and\x20a\x20base64-encoded\x0acryptographic\x20hash,\x20separated\x20by\x20a\x20colon\x20(<code>:</code>).\x20Currently,\x20SHA-256\x20(<code>h1</code>)\x20is\x0athe\x20only\x20supported\x20hash\x20algorithm.\x20If\x20a\x20vulnerability\x20in\x20SHA-256\x20is\x20discovered\x0ain\x20the\x20future,\x20support\x20will\x20be\x20added\x20for\x20another\x20algorithm\x20(named\x20<code>h2</code>\x20and\x0aso\x20on).</li>\x0a</ul>\x0a<p>When\x20the\x20<code>go</code>\x20command\x20downloads\x20a\x20module\x20<code>.mod</code>\x20or\x20<code>.zip</code>\x20file\x20into\x20the\x20<a\x20href=\"#module-cache\">module\x0acache</a>,\x20it\x20computes\x20a\x20hash\x20and\x20checks\x20that\x20the\x20hash\x20matches\x20the\x0acorresponding\x20hash\x20in\x20the\x20main\x20module's\x20<code>go.sum</code>\x20file.\x20For\x20<code>.mod</code>\x20files,\x20the\x0afile\x20contents\x20are\x20hashed.\x20For\x20<code>.zip</code>\x20files,\x20the\x20files\x20within\x20the\x20archive\x20are\x0ahashed.\x20The\x20hash\x20is\x20not\x20affected\x20by\x20file\x20ordering,\x20compression,\x20alignment,\x20or\x0ametadata.\x20See\x20<a\x20href=\"#zip-files\">Module\x20zip\x20files</a>\x20for\x20information\x20on\x20which\x20files\x20are\x0aincluded.\x20See\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/sumdb/dirhash?tab=doc\"><code>golang.org/x/mod/sumdb/dirhash</code></a>\x0afor\x20hash\x20implementation\x20details.</p>\x0a<p>If\x20the\x20computed\x20hash\x20does\x20not\x20match\x20the\x20corresponding\x20hash\x20in\x20<code>go.sum</code>,\x20the\x20<code>go</code>\x0acommand\x20reports\x20a\x20security\x20error.\x20If\x20the\x20hash\x20is\x20not\x20present\x20in\x20<code>go.sum</code>,\x20the\x0a<code>go</code>\x20command\x20looks\x20up\x20the\x20correct\x20hash\x20in\x20the\x20<a\x20href=\"#checksum-database\">checksum\x0adatabase</a>\x20(unless\x20the\x20module\x20matches\x20<code>GONOSUMDB</code>\x20or\x0a<code>GOSUMDB</code>\x20is\x20set\x20to\x20<code>off</code>;\x20see\x20<a\x20href=\"#environment-variables\">Environment\x0avariables</a>).\x20If\x20no\x20mismatch\x20is\x20detected,\x20the\x20<code>go</code>\x0acommand\x20adds\x20the\x20hash\x20to\x20<code>go.sum</code>.</p>\x0a<p>The\x20<code>go</code>\x20command\x20does\x20not\x20automatically\x20verify\x20modules\x20already\x20in\x20the\x20cache.\x20By\x0adefault,\x20files\x20and\x20directories\x20in\x20the\x20module\x20cache\x20have\x20read-only\x20permissions\x20to\x0aprevent\x20accidental\x20changes.\x20The\x20<a\x20href=\"#go-mod-verify\"><code>go\x20mod\x20verify</code></a>\x20command\x20may\x20be\x0aused\x20to\x20check\x20that\x20<code>.zip</code>\x20files\x20and\x20extracted\x20directories\x20in\x20the\x20module\x20cache\x0amatch\x20hashes\x20recorded\x20when\x20they\x20were\x20downloaded.</p>\x0a<p>The\x20<code>go.sum</code>\x20file\x20may\x20contain\x20hashes\x20for\x20multiple\x20versions\x20of\x20a\x20module.\x20The\x20<code>go</code>\x0acommand\x20may\x20need\x20to\x20load\x20<code>go.mod</code>\x20files\x20from\x20multiple\x20versions\x20of\x20a\x20dependency\x0ain\x20order\x20to\x20perform\x20<a\x20href=\"#minimal-version-selection\">minimal\x20version\x20selection</a>.\x0a<code>go.sum</code>\x20may\x20also\x20contain\x20hashes\x20for\x20module\x20versions\x20that\x20aren't\x20needed\x20anymore\x0a(for\x20example,\x20after\x20an\x20upgrade).\x20<a\x20href=\"#go-mod-tidy\"><code>go\x20mod\x20tidy</code></a>\x20will\x20add\x20missing\x0ahashes\x20and\x20will\x20remove\x20unnecessary\x20hashes\x20from\x20<code>go.sum</code>.</p>\x0a<h3\x20id=\"checksum-database\">Checksum\x20database</h3>\x0a<p>The\x20checksum\x20database\x20is\x20a\x20global\x20source\x20of\x20<code>go.sum</code>\x20lines.\x20The\x20<code>go</code>\x20command\x20can\x0ause\x20this\x20in\x20many\x20situations\x20to\x20detect\x20misbehavior\x20by\x20proxies\x20or\x20origin\x20servers.</p>\x0a<p>The\x20checksum\x20database\x20allows\x20for\x20global\x20consistency\x20and\x20reliability\x20for\x20all\x0apublicly\x20available\x20module\x20versions.\x20It\x20makes\x20untrusted\x20proxies\x20possible\x20since\x0athey\x20can't\x20serve\x20the\x20wrong\x20code\x20without\x20it\x20going\x20unnoticed.\x20It\x20also\x20ensures\x0athat\x20the\x20bits\x20associated\x20with\x20a\x20specific\x20version\x20do\x20not\x20change\x20from\x20one\x20day\x20to\x0athe\x20next,\x20even\x20if\x20the\x20module's\x20author\x20subsequently\x20alters\x20the\x20tags\x20in\x20their\x0arepository.</p>\x0a<p>The\x20checksum\x20database\x20is\x20served\x20by\x20<a\x20href=\"https://sum.golang.org\">sum.golang.org</a>,\x0awhich\x20is\x20run\x20by\x20Google.\x20It\x20is\x20a\x20<a\x20href=\"https://research.swtch.com/tlog\">Transparent\x0aLog</a>\x20(or\x20\xe2\x80\x9cMerkle\x20Tree\xe2\x80\x9d)\x20of\x20<code>go.sum</code>\x20line\x0ahashes,\x20which\x20is\x20backed\x20by\x20<a\x20href=\"https://github.com/google/trillian\">Trillian</a>.\x20The\x0amain\x20advantage\x20of\x20a\x20Merkle\x20tree\x20is\x20that\x20independent\x20auditors\x20can\x20verify\x20that\x20it\x0ahasn't\x20been\x20tampered\x20with,\x20so\x20it\x20is\x20more\x20trustworthy\x20than\x20a\x20simple\x20database.</p>\x0a<p>The\x20<code>go</code>\x20command\x20interacts\x20with\x20the\x20checksum\x20database\x20using\x20the\x20protocol\x0aoriginally\x20outlined\x20in\x20<a\x20href=\"https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#checksum-database\">Proposal:\x20Secure\x20the\x20Public\x20Go\x20Module\x0aEcosystem</a>.</p>\x0a<p>The\x20table\x20below\x20specifies\x20queries\x20that\x20the\x20checksum\x20database\x20must\x20respond\x20to.\x0aFor\x20each\x20path,\x20<code>$base</code>\x20is\x20the\x20path\x20portion\x20of\x20the\x20checksum\x20database\x20URL,\x0a<code>$module</code>\x20is\x20a\x20module\x20path,\x20and\x20<code>$version</code>\x20is\x20a\x20version.\x20For\x20example,\x20if\x20the\x0achecksum\x20database\x20URL\x20is\x20<code>https://sum.golang.org</code>,\x20and\x20the\x20client\x20is\x20requesting\x0athe\x20record\x20for\x20the\x20module\x20<code>golang.org/x/text</code>\x20at\x20version\x20<code>v0.3.2</code>,\x20the\x20client\x0awould\x20send\x20a\x20<code>GET</code>\x20request\x20for\x0a<code>https://sum.golang.org/lookup/golang.org/x/text@v0.3.2</code>.</p>\x0a<p>To\x20avoid\x20ambiguity\x20when\x20serving\x20from\x20case-insensitive\x20file\x20systems,\x0athe\x20<code>$module</code>\x20and\x20<code>$version</code>\x20elements\x20are\x0a<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/module#EscapePath\">case-encoded</a>\x0aby\x20replacing\x20every\x20uppercase\x20letter\x20with\x20an\x20exclamation\x20mark\x20followed\x20by\x20the\x0acorresponding\x20lower-case\x20letter.\x20This\x20allows\x20modules\x20<code>example.com/M</code>\x20and\x0a<code>example.com/m</code>\x20to\x20both\x20be\x20stored\x20on\x20disk,\x20since\x20the\x20former\x20is\x20encoded\x20as\x0a<code>example.com/!m</code>.</p>\x0a<p>Parts\x20of\x20the\x20path\x20surrounded\x20by\x20square\x20brakets,\x20like\x20<code>[.p/$W]</code>\x20denote\x20optional\x0avalues.</p>\x0a<table\x20class=\"ModTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<th>Path</th>\x0a\x20\x20\x20\x20\x20\x20<th>Description</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/latest</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20a\x20signed,\x20encoded\x20tree\x20description\x20for\x20the\x20latest\x20log.\x20This\x0a\x20\x20\x20\x20\x20\x20\x20\x20signed\x20description\x20is\x20in\x20the\x20form\x20of\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://pkg.go.dev/golang.org/x/mod/sumdb/note\">note</a>,\x0a\x20\x20\x20\x20\x20\x20\x20\x20which\x20is\x20text\x20that\x20has\x20been\x20signed\x20by\x20one\x20or\x20more\x20server\x20keys\x20and\x20can\x0a\x20\x20\x20\x20\x20\x20\x20\x20be\x20verified\x20using\x20the\x20server's\x20public\x20key.\x20The\x20tree\x20description\x0a\x20\x20\x20\x20\x20\x20\x20\x20provides\x20the\x20size\x20of\x20the\x20tree\x20and\x20the\x20hash\x20of\x20the\x20tree\x20head\x20at\x20that\x0a\x20\x20\x20\x20\x20\x20\x20\x20size.\x20This\x20encoding\x20is\x20described\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code><a\x20href=\"https://pkg.go.dev/golang.org/x/mod/sumdb/tlog#FormatTree\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20golang.org/x/mod/sumdb/tlog#FormatTree</a></code>.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/lookup/$module@$version</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20the\x20log\x20record\x20number\x20for\x20the\x20entry\x20about\x20<code>$module</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20at\x20<code>$version</code>,\x20followed\x20by\x20the\x20data\x20for\x20the\x20record\x20(that\x20is,\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20<code>go.sum</code>\x20lines\x20for\x20<code>$module</code>\x20at\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>$version</code>)\x20and\x20a\x20signed,\x20encoded\x20tree\x20description\x20that\x0a\x20\x20\x20\x20\x20\x20\x20\x20contains\x20the\x20record.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/tile/$H/$L/$K[.p/$W]</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20a\x20[log\x20tile](https://research.swtch.com/tlog#serving_tiles),\x0a\x20\x20\x20\x20\x20\x20\x20\x20which\x20is\x20a\x20set\x20of\x20hashes\x20that\x20make\x20up\x20a\x20section\x20of\x20the\x20log.\x20Each\x20tile\x0a\x20\x20\x20\x20\x20\x20\x20\x20is\x20defined\x20in\x20a\x20two-dimensional\x20coordinate\x20at\x20tile\x20level\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>$L</code>,\x20<code>$K</code>th\x20from\x20the\x20left,\x20with\x20a\x20tile\x20height\x20of\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>$H</code>.\x20The\x20optional\x20<code>.p/$W</code>\x20suffix\x20indicates\x20a\x0a\x20\x20\x20\x20\x20\x20\x20\x20partial\x20log\x20tile\x20with\x20only\x20<code>$W</code>\x20hashes.\x20Clients\x20must\x20fall\x0a\x20\x20\x20\x20\x20\x20\x20\x20back\x20to\x20fetching\x20the\x20full\x20tile\x20if\x20a\x20partial\x20tile\x20is\x20not\x20found.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>$base/tile/$H/data/$K[.p/$W]</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Returns\x20the\x20record\x20data\x20for\x20the\x20leaf\x20hashes\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>/tile/$H/0/$K[.p/$W]</code>\x20(with\x20a\x20literal\x20<code>data</code>\x20path\x0a\x20\x20\x20\x20\x20\x20\x20\x20element).\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20</tbody>\x0a</table>\x0a<p>If\x20the\x20<code>go</code>\x20command\x20consults\x20the\x20checksum\x20database,\x20then\x20the\x20first\x0astep\x20is\x20to\x20retrieve\x20the\x20record\x20data\x20through\x20the\x20<code>/lookup</code>\x20endpoint.\x20If\x20the\x0amodule\x20version\x20is\x20not\x20yet\x20recorded\x20in\x20the\x20log,\x20the\x20checksum\x20database\x20will\x20try\x0ato\x20fetch\x20it\x20from\x20the\x20origin\x20server\x20before\x20replying.\x20This\x20<code>/lookup</code>\x20data\x0aprovides\x20the\x20sum\x20for\x20this\x20module\x20version\x20as\x20well\x20as\x20its\x20position\x20in\x20the\x20log,\x0awhich\x20informs\x20the\x20client\x20of\x20which\x20tiles\x20should\x20be\x20fetched\x20to\x20perform\x20proofs.\x0aThe\x20<code>go</code>\x20command\x20performs\x20\xe2\x80\x9cinclusion\xe2\x80\x9d\x20proofs\x20(that\x20a\x20specific\x20record\x20exists\x20in\x0athe\x20log)\x20and\x20\xe2\x80\x9cconsistency\xe2\x80\x9d\x20proofs\x20(that\x20the\x20tree\x20hasn\xe2\x80\x99t\x20been\x20tampered\x20with)\x0abefore\x20adding\x20new\x20<code>go.sum</code>\x20lines\x20to\x20the\x20main\x20module\xe2\x80\x99s\x20<code>go.sum</code>\x20file.\x20It's\x0aimportant\x20that\x20the\x20data\x20from\x20<code>/lookup</code>\x20should\x20never\x20be\x20used\x20without\x20first\x0aauthenticating\x20it\x20against\x20the\x20signed\x20tree\x20hash\x20and\x20authenticating\x20the\x20signed\x0atree\x20hash\x20against\x20the\x20client's\x20timeline\x20of\x20signed\x20tree\x20hashes.</p>\x0a<p>Signed\x20tree\x20hashes\x20and\x20new\x20tiles\x20served\x20by\x20the\x20checksum\x20database\x20are\x20stored\x0ain\x20the\x20module\x20cache,\x20so\x20the\x20<code>go</code>\x20command\x20only\x20needs\x20to\x20fetch\x20tiles\x20that\x20are\x0amissing.</p>\x0a<p>The\x20<code>go</code>\x20command\x20doesn't\x20need\x20to\x20directly\x20connect\x20to\x20the\x20checksum\x20database.\x20It\x0acan\x20request\x20module\x20sums\x20via\x20a\x20module\x20proxy\x20that\x0a<a\x20href=\"https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#proxying-a-checksum-database\">mirrors\x20the\x20checksum\x20database</a>\x0aand\x20supports\x20the\x20protocol\x20above.\x20This\x20can\x20be\x20particularly\x20helpful\x20for\x20private,\x0acorporate\x20proxies\x20which\x20block\x20requests\x20outside\x20the\x20organization.</p>\x0a<p>The\x20<code>GOSUMDB</code>\x20environment\x20variable\x20identifies\x20the\x20name\x20of\x20checksum\x20database\x20to\x20use\x0aand\x20optionally\x20its\x20public\x20key\x20and\x20URL,\x20as\x20in:</p>\x0a<pre><code>GOSUMDB=&quot;sum.golang.org&quot;\x0aGOSUMDB=&quot;sum.golang.org+&lt;publickey&gt;&quot;\x0aGOSUMDB=&quot;sum.golang.org+&lt;publickey&gt;\x20https://sum.golang.org&quot;\x0a</code></pre>\x0a<p>The\x20<code>go</code>\x20command\x20knows\x20the\x20public\x20key\x20of\x20<code>sum.golang.org</code>,\x20and\x20also\x20that\x20the\x0aname\x20<code>sum.golang.google.cn</code>\x20(available\x20inside\x20mainland\x20China)\x20connects\x20to\x20the\x0a<code>sum.golang.org</code>\x20checksum\x20database;\x20use\x20of\x20any\x20other\x20database\x20requires\x20giving\x0athe\x20public\x20key\x20explicitly.\x20The\x20URL\x20defaults\x20to\x20<code>https://</code>\x20followed\x20by\x20the\x0adatabase\x20name.</p>\x0a<p><code>GOSUMDB</code>\x20defaults\x20to\x20<code>sum.golang.org</code>,\x20the\x20Go\x20checksum\x20database\x20run\x20by\x20Google.\x0aSee\x20https://sum.golang.org/privacy\x20for\x20the\x20service's\x20privacy\x20policy.</p>\x0a<p>If\x20<code>GOSUMDB</code>\x20is\x20set\x20to\x20<code>off</code>,\x20or\x20if\x20<code>go\x20get</code>\x20is\x20invoked\x20with\x20the\x20<code>-insecure</code>\x0aflag,\x20the\x20checksum\x20database\x20is\x20not\x20consulted,\x20and\x20all\x20unrecognized\x20modules\x20are\x0aaccepted,\x20at\x20the\x20cost\x20of\x20giving\x20up\x20the\x20security\x20guarantee\x20of\x20verified\x0arepeatable\x20downloads\x20for\x20all\x20modules.\x20A\x20better\x20way\x20to\x20bypass\x20the\x20checksum\x0adatabase\x20for\x20specific\x20modules\x20is\x20to\x20use\x20the\x20<code>GOPRIVATE</code>\x20or\x20<code>GONOSUMDB</code>\x0aenvironment\x20variables.\x20See\x20<a\x20href=\"#private-modules\">Private\x20Modules</a>\x20for\x20details.</p>\x0a<p>The\x20<code>go\x20env\x20-w</code>\x20command\x20can\x20be\x20used\x20to\x0a<a\x20href=\"/pkg/cmd/go/#hdr-Print_Go_environment_information\">set\x20these\x20variables</a>\x0afor\x20future\x20<code>go</code>\x20command\x20invocations.</p>\x0a<h2\x20id=\"privacy\">Privacy</h2>\x0a<h2\x20id=\"environment-variables\">Environment\x20variables</h2>\x0a<p>Module\x20behavior\x20in\x20the\x20<code>go</code>\x20command\x20may\x20be\x20configured\x20using\x20the\x20environment\x0avariables\x20listed\x20below.\x20This\x20list\x20only\x20includes\x20module-related\x20environment\x0avariables.\x20See\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Environment_variables\"><code>go\x20help\x20environment</code></a>\x20for\x20a\x20list\x0aof\x20all\x20environment\x20variables\x20recognized\x20by\x20the\x20<code>go</code>\x20command.</p>\x0a<table\x20class=\"ModTable\">\x0a\x20\x20<thead>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<th>Variable</th>\x0a\x20\x20\x20\x20\x20\x20<th>Description</th>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</thead>\x0a\x20\x20<tbody>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GO111MODULE</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Controls\x20whether\x20the\x20<code>go</code>\x20command\x20runs\x20in\x20module-aware\x20mode\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20or\x20<code>GOPATH</code>\x20mode.\x20Three\x20values\x20are\x20recognized:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>off</code>:\x20the\x20<code>go</code>\x20command\x20ignores\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>go.mod</code>\x20files\x20and\x20runs\x20in\x20<code>GOPATH</code>\x20mode.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>on</code>:\x20the\x20<code>go</code>\x20command\x20runs\x20in\x20module-aware\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20mode,\x20even\x20when\x20no\x20<code>go.mod</code>\x20file\x20is\x20present.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>auto</code>\x20(or\x20unset):\x20the\x20<code>go</code>\x20command\x20runs\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module-aware\x20mode\x20if\x20a\x20<code>go.mod</code>\x20file\x20is\x20present\x20in\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current\x20directory\x20or\x20any\x20parent\x20directory\x20(the\x20default\x20behavior).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20See\x20<a\x20href=\"mod-commands\">Module-aware\x20commands</a>\x20for\x20more\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20information.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOMODCACHE</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20directory\x20where\x20the\x20<code>go</code>\x20command\x20will\x20store\x20downloaded\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20modules\x20and\x20related\x20files.\x20See\x20<a\x20href=\"#module-cache\">Module\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache</a>\x20for\x20details\x20on\x20the\x20structure\x20of\x20this\x20directory.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20If\x20<code>GOMODCACHE</code>\x20is\x20not\x20set,\x20it\x20defaults\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>$GOPATH/pkg/mod</code>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOINSECURE</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Comma-separated\x20list\x20of\x20glob\x20patterns\x20(in\x20the\x20syntax\x20of\x20Go's\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"/pkg/path/#Match\"><code>path.Match</code></a>)\x20of\x20module\x20path\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20prefixes\x20that\x20may\x20always\x20be\x20fetched\x20in\x20an\x20insecure\x20manner.\x20Only\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20applies\x20to\x20dependencies\x20that\x20are\x20being\x20fetched\x20directly.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Unlike\x20the\x20<code>-insecure</code>\x20flag\x20on\x20<code>go\x20get</code>,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOINSECURE</code>\x20does\x20not\x20disable\x20module\x20checksum\x20database\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validation.\x20<code>GOPRIVATE</code>\x20or\x20<code>GONOSUMDB</code>\x20may\x20be\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20used\x20to\x20achieve\x20that.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GONOPROXY</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Comma-separated\x20list\x20of\x20glob\x20patterns\x20(in\x20the\x20syntax\x20of\x20Go's\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"/pkg/path/#Match\"><code>path.Match</code></a>)\x20of\x20module\x20path\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20prefixes\x20that\x20should\x20always\x20be\x20fetched\x20directly\x20from\x20version\x20control\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20repositories,\x20not\x20from\x20module\x20proxies.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20If\x20<code>GONOPROXY</code>\x20is\x20not\x20set,\x20it\x20defaults\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOPRIVATE</code>.\x20See\x20<a\x20href=\"#privacy\">Privacy</a>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GONOSUMDB</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Comma-separated\x20list\x20of\x20glob\x20patterns\x20(in\x20the\x20syntax\x20of\x20Go's\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"/pkg/path/#Match\"><code>path.Match</code></a>)\x20of\x20module\x20path\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20prefixes\x20for\x20which\x20the\x20<code>go</code>\x20should\x20not\x20verify\x20checksums\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20using\x20the\x20checksum\x20database.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20If\x20<code>GONOSUMDB</code>\x20is\x20not\x20set,\x20it\x20defaults\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOPRIVATE</code>.\x20See\x20<a\x20href=\"#privacy\">Privacy</a>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOPATH</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20<code>GOPATH</code>\x20mode,\x20the\x20<code>GOPATH</code>\x20variable\x20is\x20a\x20list\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20of\x20directories\x20that\x20may\x20contain\x20Go\x20code.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20module-aware\x20mode,\x20the\x20<a\x20href=\"#glos-module-cache\">module\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache</a>\x20is\x20stored\x20in\x20the\x20<code>pkg/mod</code>\x20subdirectory\x20of\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20first\x20<code>GOPATH</code>\x20directory.\x20Module\x20source\x20code\x20outside\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cache\x20may\x20be\x20stored\x20in\x20any\x20directory.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20If\x20<code>GOPATH</code>\x20is\x20not\x20set,\x20it\x20defaults\x20to\x20the\x20<code>go</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20subdirectory\x20of\x20the\x20user's\x20home\x20directory.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOPRIVATE</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Comma-separated\x20list\x20of\x20glob\x20patterns\x20(in\x20the\x20syntax\x20of\x20Go's\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"/pkg/path/#Match\"><code>path.Match</code></a>)\x20of\x20module\x20path\x0a\x20\x20\x20\x20\x20\x20\x20\x20prefixes\x20that\x20should\x20be\x20considered\x20private.\x20<code>GOPRIVATE</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20is\x20a\x20default\x20value\x20for\x20<code>GONOPROXY</code>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code>GONOSUMDB</code>.\x20<code>GOPRIVATE</code>\x20itself\x20has\x20no\x20other\x0a\x20\x20\x20\x20\x20\x20\x20\x20meaning.\x20See\x20<a\x20href=\"#privacy\">Privacy</a>.\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOPROXY</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Comma-separated\x20list\x20of\x20module\x20proxy\x20URLs.\x20When\x20the\x20<code>go</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20command\x20looks\x20up\x20information\x20about\x20a\x20module,\x20it\x20will\x20contact\x20each\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20proxy\x20in\x20the\x20list,\x20in\x20sequence.\x20A\x20proxy\x20may\x20respond\x20with\x20a\x20404\x20(Not\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Found)\x20or\x20410\x20(Gone)\x20status\x20to\x20indicate\x20the\x20module\x20is\x20not\x20available\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20and\x20the\x20<code>go</code>\x20command\x20should\x20contact\x20the\x20next\x20proxy\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20list.\x20Any\x20other\x20error\x20will\x20cause\x20the\x20<code>go</code>\x20command\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20to\x20stop\x20without\x20contacting\x20other\x20proxies\x20in\x20the\x20list.\x20This\x20allows\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20a\x20proxy\x20to\x20act\x20as\x20a\x20gatekeeper,\x20for\x20example,\x20by\x20responding\x20with\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20403\x20(Forbidden)\x20for\x20modules\x20not\x20on\x20an\x20approved\x20list.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOPROXY</code>\x20URLs\x20may\x20have\x20the\x20schemes\x20<code>https</code>,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>http</code>,\x20or\x20<code>file</code>.\x20If\x20no\x20scheme\x20is\x20specified,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>https</code>\x20is\x20assumed.\x20A\x20module\x20cache\x20may\x20be\x20used\x20direclty\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20a\x20file\x20proxy:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>GOPROXY=file://$(go\x20env\x20GOPATH)/pkg/mod/cache/download</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>Two\x20keywords\x20may\x20be\x20used\x20in\x20place\x20of\x20proxy\x20URLs:</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>off</code>:\x20disallows\x20downloading\x20modules\x20from\x20any\x20source.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>direct</code>:\x20download\x20directly\x20from\x20version\x20control\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20repositories.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOPROXY</code>\x20defaults\x20to\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>https://proxy.golang.org,direct</code>.\x20Under\x20that\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20configuration,\x20the\x20<code>go</code>\x20command\x20will\x20first\x20contact\x20the\x20Go\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module\x20mirror\x20run\x20by\x20Google,\x20then\x20fall\x20back\x20to\x20a\x20direct\x20connection\x20if\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20mirror\x20does\x20not\x20have\x20the\x20module.\x20See\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://proxy.golang.org/privacy\">https://proxy.golang.org/privacy</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20the\x20mirror's\x20privacy\x20policy.\x20The\x20<code>GOPRIVATE</code>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GONOPROXY</code>\x20environment\x20variables\x20may\x20be\x20set\x20to\x20prevent\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20specific\x20modules\x20from\x20being\x20downloaded\x20using\x20proxies.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20See\x20<a\x20href=\"#module-proxy\">Module\x20proxies</a>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#resolve-pkg-mod\">Resolving\x20a\x20package\x20to\x20a\x20module</a>\x20for\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20more\x20information.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td><code>GOSUMDB</code></td>\x0a\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Identifies\x20the\x20name\x20of\x20the\x20checksum\x20database\x20to\x20use\x20and\x20optionally\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20its\x20public\x20key\x20and\x20URL.\x20For\x20example:\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>\x0aGOSUMDB=\"sum.golang.org\"\x0aGOSUMDB=\"sum.golang.org+&lt;publickey&gt;\"\x0aGOSUMDB=\"sum.golang.org+&lt;publickey&gt;\x20https://sum.golang.org\x0a</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20<code>go</code>\x20command\x20knows\x20the\x20public\x20key\x20of\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>sum.golang.org</code>\x20and\x20also\x20that\x20the\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>sum.golang.google.cn</code>\x20(available\x20inside\x20mainland\x20China)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20connects\x20to\x20the\x20<code>sum.golang.org</code>\x20database;\x20use\x20of\x20any\x20other\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20database\x20requires\x20giving\x20the\x20public\x20key\x20explicitly.\x20The\x20URL\x20defaults\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20to\x20<code>https://</code>\x20followed\x20by\x20the\x20database\x20name.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOSUMDB</code>\x20defaults\x20to\x20<code>sum.golang.org</code>,\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Go\x20checksum\x20database\x20run\x20by\x20Google.\x20See\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"https://sum.golang.org/privacy\">https://sum.golang.org/privacy</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20the\x20service's\x20privacy\x20policy.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20If\x20<code>GOSUMDB</code>\x20is\x20set\x20to\x20<code>off</code>\x20or\x20if\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>go\x20get</code>\x20is\x20invoked\x20with\x20the\x20<code>-insecure</code>\x20flag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20checksum\x20database\x20is\x20not\x20consulted,\x20and\x20all\x20unrecognized\x20modules\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20are\x20accepted,\x20at\x20the\x20cost\x20of\x20giving\x20up\x20the\x20security\x20guarantee\x20of\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20verified\x20repeatable\x20downloads\x20for\x20all\x20modules.\x20A\x20better\x20way\x20to\x20bypass\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20checksum\x20database\x20for\x20specific\x20modules\x20is\x20to\x20use\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code>GOPRIVATE</code>\x20or\x20<code>GONOSUMDB</code>\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20variables.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20See\x20<a\x20href=\"#authenticating\">Authenticating\x20modules</a>\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20href=\"#privacy\">Privacy</a>\x20for\x20more\x20information.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</p>\x0a\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20</tbody>\x0a</table>\x0a<h2\x20id=\"glossary\">Glossary</h2>\x0a<p><a\x20id=\"glos-build-constraint\"></a>\x0a<strong>build\x20constraint:</strong>\x20A\x20condition\x20that\x20determines\x20whether\x20a\x20Go\x20source\x20file\x20is\x0aused\x20when\x20compiling\x20a\x20package.\x20Build\x20constraints\x20may\x20be\x20expressed\x20with\x20file\x20name\x0asuffixes\x20(for\x20example,\x20<code>foo_linux_amd64.go</code>)\x20or\x20with\x20build\x20constraint\x20comments\x0a(for\x20example,\x20<code>//\x20+build\x20linux,amd64</code>).\x20See\x20<a\x20href=\"https://golang.org/pkg/go/build/#hdr-Build_Constraints\">Build\x0aConstraints</a>.</p>\x0a<p><a\x20id=\"glos-build-list\"></a>\x0a<strong>build\x20list:</strong>\x20The\x20list\x20of\x20module\x20versions\x20that\x20will\x20be\x20used\x20for\x20a\x20build\x0acommand\x20such\x20as\x20<code>go\x20build</code>,\x20<code>go\x20list</code>,\x20or\x20<code>go\x20test</code>.\x20The\x20build\x20list\x20is\x0adetermined\x20from\x20the\x20<a\x20href=\"#glos-main-module\">main\x20module's</a>\x20<a\x20href=\"#glos-go.mod-file\"><code>go.mod</code>\x0afile</a>\x20and\x20<code>go.mod</code>\x20files\x20in\x20transitively\x20required\x20modules\x0ausing\x20<a\x20href=\"#glos-minimal-version-selection\">minimal\x20version\x20selection</a>.\x20The\x20build\x0alist\x20contains\x20versions\x20for\x20all\x20modules\x20in\x20the\x20<a\x20href=\"#glos-module-graph\">module\x0agraph</a>,\x20not\x20just\x20those\x20relevant\x20to\x20a\x20specific\x20command.</p>\x0a<p><a\x20id=\"glos-canonical-version\"></a>\x0a<strong>canonical\x20version:</strong>\x20A\x20correctly\x20formatted\x20<a\x20href=\"#glos-version\">version</a>\x20without\x0aa\x20build\x20metadata\x20suffix\x20other\x20than\x20<code>+incompatible</code>.\x20For\x20example,\x20<code>v1.2.3</code>\x0ais\x20a\x20canonical\x20version,\x20but\x20<code>v1.2.3+meta</code>\x20is\x20not.</p>\x0a<p><a\x20id=\"glos-go.mod-file\"></a>\x0a<strong><code>go.mod</code>\x20file:</strong>\x20The\x20file\x20that\x20defines\x20a\x20module's\x20path,\x20requirements,\x20and\x0aother\x20metadata.\x20Appears\x20in\x20the\x20<a\x20href=\"#glos-module-root-directory\">module's\x20root\x0adirectory</a>.\x20See\x20the\x20section\x20on\x20<a\x20href=\"#go.mod-files\"><code>go.mod</code>\x0afiles</a>.</p>\x0a<p><a\x20id=\"glos-import-path\"></a>\x0a<strong>import\x20path:</strong>\x20A\x20string\x20used\x20to\x20import\x20a\x20package\x20in\x20a\x20Go\x20source\x20file.\x0aSynonymous\x20with\x20<a\x20href=\"#glos-package-path\">package\x20path</a>.</p>\x0a<p><a\x20id=\"glos-main-module\"></a>\x0a<strong>main\x20module:</strong>\x20The\x20module\x20in\x20which\x20the\x20<code>go</code>\x20command\x20is\x20invoked.</p>\x0a<p><a\x20id=\"glos-major-version\"></a>\x0a<strong>major\x20version:</strong>\x20The\x20first\x20number\x20in\x20a\x20semantic\x20version\x20(<code>1</code>\x20in\x20<code>v1.2.3</code>).\x20In\x0aa\x20release\x20with\x20incompatible\x20changes,\x20the\x20major\x20version\x20must\x20be\x20incremented,\x20and\x0athe\x20minor\x20and\x20patch\x20versions\x20must\x20be\x20set\x20to\x200.\x20Semantic\x20versions\x20with\x20major\x0aversion\x200\x20are\x20considered\x20unstable.</p>\x0a<p><a\x20id=\"glos-major-version-subdirectory\"></a>\x0a<strong>major\x20version\x20subdirectory:</strong>\x20A\x20subdirectory\x20within\x20a\x20version\x20control\x0arepository\x20matching\x20a\x20module's\x20<a\x20href=\"#glos-major-version-suffix\">major\x20version\x0asuffix</a>\x20where\x20a\x20module\x20may\x20be\x20defined.\x20For\x20example,\x0athe\x20module\x20<code>example.com/mod/v2</code>\x20in\x20the\x20repository\x20with\x20<a\x20href=\"#glos-repository-root-path\">root\x0apath</a>\x20<code>example.com/mod</code>\x20may\x20be\x20defined\x20in\x20the\x0arepository\x20root\x20directory\x20or\x20the\x20major\x20version\x20subdirectory\x20<code>v2</code>.\x20See\x20<a\x20href=\"#vcs-dir\">Module\x0adirectories\x20within\x20a\x20repository</a>.</p>\x0a<p><a\x20id=\"glos-major-version-suffix\"></a>\x0a<strong>major\x20version\x20suffix:</strong>\x20A\x20module\x20path\x20suffix\x20that\x20matches\x20the\x20major\x20version\x0anumber.\x20For\x20example,\x20<code>/v2</code>\x20in\x20<code>example.com/mod/v2</code>.\x20Major\x20version\x20suffixes\x20are\x0arequired\x20at\x20<code>v2.0.0</code>\x20and\x20later\x20and\x20are\x20not\x20allowed\x20at\x20earlier\x20versions.\x20See\x0athe\x20section\x20on\x20<a\x20href=\"#major-version-suffixes\">Major\x20version\x20suffixes</a>.</p>\x0a<p><a\x20id=\"glos-minimal-version-selection\"></a>\x0a<strong>minimal\x20version\x20selection\x20(MVS):</strong>\x20The\x20algorithm\x20used\x20to\x20determine\x20the\x0aversions\x20of\x20all\x20modules\x20that\x20will\x20be\x20used\x20in\x20a\x20build.\x20See\x20the\x20section\x20on\x0a<a\x20href=\"#minimal-version-selection\">Minimal\x20version\x20selection</a>\x20for\x20details.</p>\x0a<p><a\x20id=\"glos-minor-version\"></a>\x0a<strong>minor\x20version:</strong>\x20The\x20second\x20number\x20in\x20a\x20semantic\x20version\x20(<code>2</code>\x20in\x20<code>v1.2.3</code>).\x20In\x0aa\x20release\x20with\x20new,\x20backwards\x20compatible\x20functionality,\x20the\x20minor\x20version\x20must\x0abe\x20incremented,\x20and\x20the\x20patch\x20version\x20must\x20be\x20set\x20to\x200.</p>\x0a<p><a\x20id=\"glos-module\"></a>\x0a<strong>module:</strong>\x20A\x20collection\x20of\x20packages\x20that\x20are\x20released,\x20versioned,\x20and\x0adistributed\x20together.</p>\x0a<p><a\x20id=\"glos-module-cache\"></a>\x0a<strong>module\x20cache:</strong>\x20A\x20local\x20directory\x20storing\x20downloaded\x20modules,\x20located\x20in\x0a<code>GOPATH/pkg/mod</code>.\x20See\x20<a\x20href=\"#module-cache\">Module\x20cache</a>.</p>\x0a<p><a\x20id=\"glos-module-graph\"></a>\x0a<strong>module\x20graph:</strong>\x20The\x20directed\x20graph\x20of\x20module\x20requirements,\x20rooted\x20at\x20the\x20<a\x20href=\"#glos-main-module\">main\x0amodule</a>.\x20Each\x20vertex\x20in\x20the\x20graph\x20is\x20a\x20module;\x20each\x20edge\x20is\x20a\x0aversion\x20from\x20a\x20<code>require</code>\x20statement\x20in\x20a\x20<code>go.mod</code>\x20file\x20(subject\x20to\x20<code>replace</code>\x20and\x0a<code>exclude</code>\x20statements\x20in\x20the\x20main\x20module's\x20<code>go.mod</code>\x20file.</p>\x0a<p><a\x20id=\"glos-module-path\"></a>\x0a<strong>module\x20path:</strong>\x20A\x20path\x20that\x20identifies\x20a\x20module\x20and\x20acts\x20as\x20a\x20prefix\x20for\x0apackage\x20import\x20paths\x20within\x20the\x20module.\x20For\x20example,\x20<code>&quot;golang.org/x/net&quot;</code>.</p>\x0a<p><a\x20id=\"glos-module-proxy\"></a>\x0a<strong>module\x20proxy:</strong>\x20A\x20web\x20server\x20that\x20implements\x20the\x20<a\x20href=\"#goproxy-protocol\"><code>GOPROXY</code>\x0aprotocol</a>.\x20The\x20<code>go</code>\x20command\x20downloads\x20version\x20information,\x0a<code>go.mod</code>\x20files,\x20and\x20module\x20zip\x20files\x20from\x20module\x20proxies.</p>\x0a<p><a\x20id=\"glos-module-root-directory\"></a>\x0a<strong>module\x20root\x20directory:</strong>\x20The\x20directory\x20that\x20contains\x20the\x20<code>go.mod</code>\x20file\x20that\x0adefines\x20a\x20module.</p>\x0a<p><a\x20id=\"glos-module-subdirectory\"></a>\x0a<strong>module\x20subdirectory:</strong>\x20The\x20portion\x20of\x20a\x20<a\x20href=\"#glos-module-path\">module\x20path</a>\x20after\x0athe\x20<a\x20href=\"#glos-repository-root-path\">repository\x20root\x20path</a>\x20that\x20indicates\x20the\x0asubdirectory\x20where\x20the\x20module\x20is\x20defined.\x20When\x20non-empty,\x20the\x20module\x0asubdirectory\x20is\x20also\x20a\x20prefix\x20for\x20<a\x20href=\"#glos-semantic-version-tag\">semantic\x20version\x0atags</a>.\x20The\x20module\x20subdirectory\x20does\x20not\x20include\x20the\x0a<a\x20href=\"#glos-major-version-suffix\">major\x20version\x20suffix</a>,\x20if\x20there\x20is\x20one,\x20even\x20if\x20the\x0amodule\x20is\x20in\x20a\x20<a\x20href=\"#glos-major-version-subdirectory\">major\x20version\x20subdirectory</a>.\x0aSee\x20<a\x20href=\"#module-path\">Module\x20paths</a>.</p>\x0a<p><a\x20id=\"glos-package\"></a>\x0a<strong>package:</strong>\x20A\x20collection\x20of\x20source\x20files\x20in\x20the\x20same\x20directory\x20that\x20are\x0acompiled\x20together.\x20See\x20the\x20<a\x20href=\"/ref/spec#Packages\">Packages\x20section</a>\x20in\x20the\x20Go\x0aLanguage\x20Specification.</p>\x0a<p><a\x20id=\"glos-package-path\"></a>\x0a<strong>package\x20path:</strong>\x20The\x20path\x20that\x20uniquely\x20identifies\x20a\x20package.\x20A\x20package\x20path\x20is\x0aa\x20<a\x20href=\"#glos-module-path\">module\x20path</a>\x20joined\x20with\x20a\x20subdirectory\x20within\x20the\x20module.\x0aFor\x20example\x20<code>&quot;golang.org/x/net/html&quot;</code>\x20is\x20the\x20package\x20path\x20for\x20the\x20package\x20in\x20the\x0amodule\x20<code>&quot;golang.org/x/net&quot;</code>\x20in\x20the\x20<code>&quot;html&quot;</code>\x20subdirectory.\x20Synonym\x20of\x0a<a\x20href=\"#glos-import-path\">import\x20path</a>.</p>\x0a<p><a\x20id=\"glos-patch-version\"></a>\x0a<strong>patch\x20version:</strong>\x20The\x20third\x20number\x20in\x20a\x20semantic\x20version\x20(<code>3</code>\x20in\x20<code>v1.2.3</code>).\x20In\x0aa\x20release\x20with\x20no\x20changes\x20to\x20the\x20module's\x20public\x20interface,\x20the\x20patch\x20version\x0amust\x20be\x20incremented.</p>\x0a<p><a\x20id=\"glos-pre-release-version\"></a>\x0a<strong>pre-release\x20version:</strong>\x20A\x20version\x20with\x20a\x20dash\x20followed\x20by\x20a\x20series\x20of\x0adot-separated\x20identifiers\x20immediately\x20following\x20the\x20patch\x20version,\x20for\x20example,\x0a<code>v1.2.3-beta4</code>.\x20Pre-release\x20versions\x20are\x20considered\x20unstable\x20and\x20are\x20not\x0aassumed\x20to\x20be\x20compatible\x20with\x20other\x20versions.\x20A\x20pre-release\x20version\x20sorts\x20before\x0athe\x20corresponding\x20release\x20version:\x20<code>v1.2.3-pre</code>\x20comes\x20before\x20<code>v1.2.3</code>.\x20See\x20also\x0a<a\x20href=\"#glos-release-version\">release\x20version</a>.</p>\x0a<p><a\x20id=\"glos-pseudo-version\"></a>\x0a<strong>pseudo-version:</strong>\x20A\x20version\x20that\x20encodes\x20a\x20revision\x20identifier\x20(such\x20as\x20a\x20Git\x0acommit\x20hash)\x20and\x20a\x20timestamp\x20from\x20a\x20version\x20control\x20system.\x20For\x20example,\x0a<code>v0.0.0-20191109021931-daa7c04131f5</code>.\x20Used\x20for\x20<a\x20href=\"#non-module-compat\">compatibility\x20with\x20non-module\x0arepositories</a>\x20and\x20in\x20other\x20situations\x20when\x20a\x20tagged\x0aversion\x20is\x20not\x20available.</p>\x0a<p><a\x20id=\"glos-release-version\"></a>\x0a<strong>release\x20version:</strong>\x20A\x20version\x20without\x20a\x20pre-release\x20suffix.\x20For\x20example,\x0a<code>v1.2.3</code>,\x20not\x20<code>v1.2.3-pre</code>.\x20See\x20also\x20<a\x20href=\"#glos-pre-release-version\">pre-release\x0aversion</a>.</p>\x0a<p><a\x20id=\"glos-repository-root-path\"></a>\x0a<strong>repository\x20root\x20path:</strong>\x20The\x20portion\x20of\x20a\x20<a\x20href=\"#glos-module-path\">module\x20path</a>\x20that\x0acorresponds\x20to\x20a\x20version\x20control\x20repository's\x20root\x20directory.\x20See\x20<a\x20href=\"#module-path\">Module\x0apaths</a>.</p>\x0a<p><a\x20id=\"glos-semantic-version-tag\"></a>\x0a<strong>semantic\x20version\x20tag:</strong>\x20A\x20tag\x20in\x20a\x20version\x20control\x20repository\x20that\x20maps\x20a\x0a<a\x20href=\"#glos-version\">version</a>\x20to\x20a\x20specific\x20revision.\x20See\x20<a\x20href=\"#vcs-version\">Mapping\x20versions\x20to\x0acommits</a>.</p>\x0a<p><a\x20id=\"glos-version\"></a>\x0a<strong>version:</strong>\x20An\x20identifier\x20for\x20an\x20immutable\x20snapshot\x20of\x20a\x20module,\x20written\x20as\x20the\x0aletter\x20<code>v</code>\x20followed\x20by\x20a\x20semantic\x20version.\x20See\x20the\x20section\x20on\x0a<a\x20href=\"#versions\">Versions</a>.</p>\x0a",
 }
diff --git a/content/static/style.css b/content/static/style.css
index 0a3eb1c..1adea2d 100644
--- a/content/static/style.css
+++ b/content/static/style.css
@@ -1,10 +1,87 @@
 body {
-  margin: 0;
-  font-family: Roboto, Arial, sans-serif;
   background-color: #fff;
-  line-height: 1.3;
-  text-align: center;
   color: #3e4042;
+  font-family: Roboto, Arial, sans-serif;
+  line-height: 1.3;
+  margin: 0;
+  text-align: center;
+}
+.Note {
+  /* For styling "Note" sections. */
+  background-color: rgb(224, 235, 245);
+  font-size: 0.875rem;
+  margin: 1.25rem;
+  max-width: 50rem;
+  padding: 0.5rem 0.5rem 0.5rem 0.625rem;
+}
+/* Tabs */
+.TabSection {
+  background: #fff;
+  border: 0.0625rem solid #dadce0;
+  border-radius: 0.3125rem;
+  box-shadow: none;
+  max-width: 50rem;
+}
+.TabSection-tabList {
+  flex-shrink: 0;
+  position: relative;
+  border-bottom: 0.0625rem solid #dadce0;
+}
+.TabSection-tab {
+  background: #fff;
+  border: none;
+  line-height: 3rem;
+  padding: 0 1.125rem;
+  position: relative;
+}
+.TabSection-tab[aria-selected='true'] {
+  outline: 0;
+  background-color: #e0ebf5;
+}
+.TabSection-tab:focus {
+  outline: 0;
+  background-color: #e0ebf5;
+}
+.TabSection-tabPanel {
+  font-size: 0.875rem;
+}
+/* Tutorial previous and next links */
+.Navigation {
+  font-size: 0.875rem;
+}
+.Navigation-prev {
+  float: left;
+  font-weight: bold;
+}
+.Navigation-next {
+  float: right;
+  font-weight: bold;
+}
+/* Table in doc topics. */
+.DocTable {
+  border-collapse: collapse;
+  font-size: 0.875rem;
+  margin: 1.25rem;
+  max-width: 50rem;
+}
+.DocTable-row {
+  border-bottom: 0.0625rem solid #dadce0;
+  height: 3rem;
+  vertical-align: middle;
+}
+.DocTable-head {
+  background: #e8eaed;
+  border-bottom: 0.0625rem solid #dadce0;
+  border-top: 0.0625rem solid #dadce0;
+  height: 3rem;
+}
+.DocTable-cell {
+  padding: 0rem 0.4375rem;
+}
+.DocTable-row--highlighted {
+  background: #f0f0f0;
+  border-bottom: 0.0625rem solid #dadce0;
+  height: 3rem;
 }
 textarea {
   /* Inherit text color from body avoiding illegible text in the case where the
@@ -16,6 +93,11 @@
   font-family: Menlo, monospace;
   font-size: 0.875rem;
 }
+code {
+  /* Reduce spacing between words in code inline with text. Monospace font
+   * spaces tend to be wider than proportional font spaces. */
+  word-spacing: -0.3em;
+}
 pre {
   line-height: 1.4;
   overflow-x: auto;
@@ -37,6 +119,12 @@
   color: #999;
   background: #efefef;
 }
+pre ins {
+  /* For styling highlighted code in examples. */
+  color: rgb(0, 125, 156);
+  font-weight: bold;
+  text-decoration: none;
+}
 .ln {
   user-select: none;
 
@@ -48,7 +136,6 @@
   display: inline-block;
   width: 8ch;
 }
-
 .search-nav {
   margin-left: 1.25rem;
   font-size: 0.875rem;
@@ -56,11 +143,9 @@
   column-fill: auto;
   column-width: 14rem;
 }
-
 .search-nav .indent {
   margin-left: 1.25rem;
 }
-
 a,
 .exampleHeading .text,
 .expandAll {
@@ -78,14 +163,12 @@
 .article .title a {
   text-decoration: none;
 }
-
 .permalink {
   display: none;
 }
 :hover > .permalink {
   display: inline;
 }
-
 p,
 li {
   max-width: 50rem;
@@ -102,7 +185,6 @@
   padding: 0.625rem;
   border-radius: 0.3125rem;
 }
-
 h1,
 h2,
 h3,
@@ -143,7 +225,6 @@
 h4 {
   font-size: 1rem;
 }
-
 h2 > span,
 h3 > span {
   float: right;
@@ -151,7 +232,6 @@
   font-weight: normal;
   color: #5279c7;
 }
-
 dl {
   margin: 1.25rem;
 }
@@ -165,7 +245,6 @@
 div#nav table td {
   vertical-align: top;
 }
-
 .ModTable {
   border-collapse: collapse;
   margin: 1.25rem;
@@ -186,7 +265,6 @@
 .ModTable td p:last-child {
   margin-bottom: 0;
 }
-
 #pkg-index h3 {
   font-size: 1rem;
 }
@@ -203,21 +281,17 @@
 .alert {
   color: #aa0000;
 }
-
 #pkg-examples h3 {
   float: left;
 }
-
 #pkg-examples dl {
   clear: both;
 }
-
 .expandAll {
   cursor: pointer;
   float: left;
   margin: 1.25rem 0;
 }
-
 .Site {
   display: flex;
   flex-direction: column;
@@ -246,13 +320,11 @@
 .Footer--wide {
   max-width: none;
 }
-
 div#playground .buttons a {
   background: #375eab;
   border: 0.0625rem solid #757575;
   color: white;
 }
-
 /* Style download button on doc/install page */
 a#start {
   background: #e0ebf5;
@@ -275,11 +347,9 @@
   font-weight: normal;
   margin-top: 0.3125rem;
 }
-
 .download {
   width: 9.375rem;
 }
-
 ::-webkit-input-placeholder {
   color: #7f7f7f;
   opacity: 1;
@@ -288,7 +358,6 @@
   color: #7f7f7f;
   opacity: 1;
 }
-
 .Header {
   align-items: center;
   box-sizing: border-box;
@@ -426,7 +495,8 @@
   display: block;
   flex: 1;
   font: inherit;
-  font-size: 16px; /* Prevents automatic zoom on mobile devices */
+  font-size: 16px;
+  /* Prevents automatic zoom on mobile devices */
   margin: 0;
   padding: 0.5rem;
 }
@@ -524,7 +594,6 @@
     font-size: 1rem;
   }
 }
-
 .Button,
 .Button:link,
 .Button:visited {
@@ -562,7 +631,6 @@
   height: 4rem;
   justify-content: center;
 }
-
 .HomeContainer {
   align-items: top;
   display: flex;
@@ -572,7 +640,6 @@
 .HomeContainer * {
   box-sizing: border-box;
 }
-
 .HomeSection {
   flex: 0 0 100%;
   margin-bottom: 2.5rem;
@@ -585,7 +652,6 @@
   padding: 0;
   font-weight: bold;
 }
-
 .Hero-header {
   font: 1.5rem Roboto, sans-serif;
   line-height: inherit;
@@ -596,7 +662,8 @@
   background-position: center top;
   display: block;
   height: 9.688rem;
-  max-height: 200px; /* Setting in px to prevent the gopher from blowing up in very high default font-sizes */
+  max-height: 200px;
+  /* Setting in px to prevent the gopher from blowing up in very high default font-sizes */
 }
 .HeroDownloadButton,
 .Hero-description {
@@ -628,7 +695,6 @@
     margin-top: 1rem;
   }
 }
-
 .Playground-headerContainer {
   align-items: baseline;
   display: flex;
@@ -703,7 +769,8 @@
   border: 0.0625rem solid #979797;
   color: inherit;
   font-family: inherit;
-  font-size: 16px; /* Prevents automatic zoom on mobile devices */
+  font-size: 16px;
+  /* Prevents automatic zoom on mobile devices */
   height: 2.375rem;
   margin: 0 0 0.5rem 0;
   width: 100%;
@@ -726,7 +793,6 @@
     width: auto;
   }
 }
-
 .Blog-title {
   display: block;
   font-size: 1.25rem;
@@ -745,7 +811,6 @@
 .Blog-footer {
   text-align: right;
 }
-
 @supports (--c: 0) {
   [style*='--aspect-ratio-padding:'] {
     position: relative;
@@ -760,7 +825,6 @@
     height: 100%;
   }
 }
-
 .Footer {
   margin: 2rem auto 0;
   padding: 1rem 1.25rem;
@@ -817,7 +881,6 @@
     margin-top: 0;
   }
 }
-
 .toggleButton {
   cursor: pointer;
 }
@@ -833,7 +896,6 @@
 .toggleVisible > .expanded {
   display: block;
 }
-
 table.codetable {
   margin-left: auto;
   margin-right: auto;
@@ -846,7 +908,6 @@
   border-style: none;
   border-top: 0.0625rem solid black;
 }
-
 img.gopher {
   float: right;
   margin-left: 0.625rem;
@@ -856,7 +917,6 @@
 h2 {
   clear: right;
 }
-
 div.play {
   padding: 0 1.25rem 2.5rem 1.25rem;
 }
@@ -929,7 +989,6 @@
 .output .system {
   color: #999;
 }
-
 /* drop-down playground */
 div#playground {
   /* start hidden; revealed by javascript */
@@ -957,7 +1016,6 @@
 div#playground .output {
   height: 6.25rem;
 }
-
 /* Inline runnable snippets (play.js/initPlayground) */
 #content .code pre,
 #content .playground pre,
@@ -1023,52 +1081,44 @@
   border-bottom-right-radius: 0.25rem;
   border-top-left-radius: 0.25rem;
   border-top-right-radius: 0.25rem;
-  padding: 0.125rem 0.25rem 0.125rem 0.25rem; /* TRBL */
+  padding: 0.125rem 0.25rem 0.125rem 0.25rem;
+  /* TRBL */
 }
-
 .downloading {
   background: #f9f9be;
   padding: 0.625rem;
   text-align: center;
   border-radius: 0.3125rem;
 }
-
 @media (max-width: 43.75em) {
   body {
     font-size: 0.9375rem;
   }
-
   div#playground {
     left: 0;
     right: 0;
   }
-
   pre,
   code {
     font-size: 0.866rem;
   }
-
   #page > .container,
   .Header-nav {
     padding: 0 0.625rem;
   }
-
   p,
   pre,
   ul,
   ol {
     margin: 0.625rem;
   }
-
   .pkg-synopsis {
     display: none;
   }
-
   img.gopher {
     display: none;
   }
 }
-
 @media print {
   pre {
     background: #fff;
@@ -1076,4 +1126,4 @@
     white-space: pre-wrap;
     page-break-inside: avoid;
   }
-}
+}
\ No newline at end of file