content/static/doc: escape template brackets in code.html

I forgot to escape them in CL 217877, and the TryBots don't currently
catch template errors in HTML docs.

Updates golang/go#37042
Updates golang/go#37072

Change-Id: Ia7b82a9c9b85914f224c04050bfbe3747d5a3acc
Reviewed-on: https://go-review.googlesource.com/c/website/+/218217
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/content/static/doc/code.html b/content/static/doc/code.html
index a7fe803..a1b9bd2 100644
--- a/content/static/doc/code.html
+++ b/content/static/doc/code.html
@@ -183,7 +183,7 @@
 <pre>
 # Windows users should consult https://github.com/golang/go/wiki/SettingGOPATH
 # for setting %PATH%.
-$ <b>export PATH=$PATH:$(dirname $(go list -f '{{.Target}}' .))</b>
+$ <b>export PATH=$PATH:$(dirname $(go list -f '{{"{{"}}.Target{{"}}"}}' .))</b>
 $ <b>hello</b>
 Hello, world.
 $
diff --git a/content/static/static.go b/content/static/static.go
index 404f5fe..5718150 100644
--- a/content/static/static.go
+++ b/content/static/static.go
@@ -45,7 +45,7 @@
 
 	"dirlist.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<table\x20class=\"layout\">\x0a<tr>\x0a\x09<th\x20align=\"left\">File</th>\x0a\x09<td\x20width=\"25\">&nbsp;</td>\x0a\x09<th\x20align=\"right\">Bytes</th>\x0a\x09<td\x20width=\"25\">&nbsp;</td>\x0a\x09<th\x20align=\"left\">Modified</th>\x0a</tr>\x0a<tr>\x0a\x09<td><a\x20href=\"..\">..</a></td>\x0a</tr>\x0a{{range\x20.}}\x0a<tr>\x0a\x09{{$name_html\x20:=\x20fileInfoName\x20.\x20|\x20html}}\x0a\x09<td\x20align=\"left\"><a\x20href=\"{{$name_html}}\">{{$name_html}}</a></td>\x0a\x09<td></td>\x0a\x09<td\x20align=\"right\">{{html\x20.Size}}</td>\x0a\x09<td></td>\x0a\x09<td\x20align=\"left\">{{fileInfoTime\x20.\x20|\x20html}}</td>\x0a</tr>\x0a{{end}}\x0a\x0a</table>\x0a</p>\x0a",
 
-	"doc/code.html": "<!--{\x0a\x09\"Title\":\x20\"How\x20to\x20Write\x20Go\x20Code\",\x0a\x09\"Template\":\x20true\x0a}-->\x0a\x0a<h2\x20id=\"Introduction\">Introduction</h2>\x0a\x0a<p>\x0aThis\x20document\x20demonstrates\x20the\x20development\x20of\x20a\x20simple\x20Go\x20package\x20inside\x20a\x0amodule\x20and\x20introduces\x20the\x20<a\x20href=\"/cmd/go/\">go\x20tool</a>,\x20the\x20standard\x20way\x20to\x0afetch,\x20build,\x20and\x20install\x20Go\x20modules,\x20packages,\x20and\x20commands.\x0a</p>\x0a\x0a<p>\x0aNote:\x20This\x20document\x20assumes\x20that\x20you\x20are\x20using\x20Go\x201.13\x20or\x20later\x20and\x20the\x0a<code>GO111MODULE</code>\x20environment\x20variable\x20is\x20not\x20set.\x20If\x20you\x20are\x20looking\x20for\x0athe\x20older,\x20pre-modules\x20version\x20of\x20this\x20document,\x20it\x20is\x20archived\x0a<a\x20href=\"gopath_code.html\">here</a>.\x0a</p>\x0a\x0a<h2\x20id=\"Organization\">Code\x20organization</h2>\x0a\x0a<p>\x0aGo\x20programs\x20are\x20organized\x20into\x20packages.\x20A\x20<dfn>package</dfn>\x20is\x20a\x20collection\x0aof\x20source\x20files\x20in\x20the\x20same\x20directory\x20that\x20are\x20compiled\x20together.\x20Functions,\x0atypes,\x20variables,\x20and\x20constants\x20defined\x20in\x20one\x20source\x20file\x20are\x20visible\x20to\x20all\x0aother\x20source\x20files\x20within\x20the\x20same\x20package.\x0a</p>\x0a\x0a<p>\x0aA\x20repository\x20contains\x20one\x20or\x20more\x20modules.\x20A\x20<dfn>module</dfn>\x20is\x20a\x20collection\x0aof\x20related\x20Go\x20packages\x20that\x20are\x20released\x20together.\x20A\x20Go\x20repository\x20typically\x0acontains\x20only\x20one\x20module,\x20located\x20at\x20the\x20root\x20of\x20the\x20repository.\x20A\x20file\x20named\x0a<code>go.mod</code>\x20there\x20declares\x20the\x20<dfn>module\x20path</dfn>:\x20the\x20import\x20path\x0aprefix\x20for\x20all\x20packages\x20within\x20the\x20module.\x20The\x20module\x20contains\x20the\x20packages\x20in\x0athe\x20directory\x20containing\x20its\x20<code>go.mod</code>\x20file\x20as\x20well\x20as\x20subdirectories\x0aof\x20that\x20directory,\x20up\x20to\x20the\x20next\x20subdirectory\x20containing\x20another\x0a<code>go.mod</code>\x20file\x20(if\x20any).\x0a</p>\x0a\x0a<p>\x0aNote\x20that\x20you\x20don't\x20need\x20to\x20publish\x20your\x20code\x20to\x20a\x20remote\x20repository\x20before\x20you\x0acan\x20build\x20it.\x20A\x20module\x20can\x20be\x20defined\x20locally\x20without\x20belonging\x20to\x20a\x20repository.\x0aHowever,\x20it's\x20a\x20good\x20habit\x20to\x20organize\x20your\x20code\x20as\x20if\x20you\x20will\x20publish\x20it\x0asomeday.\x0a</p>\x0a\x0a<p>\x0aEach\x20module's\x20path\x20not\x20only\x20serves\x20as\x20an\x20import\x20path\x20prefix\x20for\x20its\x20packages,\x0abut\x20also\x20indicates\x20where\x20the\x20<code>go</code>\x20command\x20should\x20look\x20to\x20download\x20it.\x0aFor\x20example,\x20in\x20order\x20to\x20download\x20the\x20module\x20<code>golang.org/x/tools</code>,\x0athe\x20<code>go</code>\x20command\x20would\x20consult\x20the\x20repository\x20indicated\x20by\x0a<code>https://golang.org/x/tools</code>\x20(described\x20more\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Relative_import_paths\">here</a>).\x0a</p>\x0a\x0a<p>\x0aAn\x20<dfn>import\x20path</dfn>\x20is\x20a\x20string\x20used\x20to\x20import\x20a\x20package.\x20A\x20package's\x0aimport\x20path\x20is\x20its\x20module\x20path\x20joined\x20with\x20its\x20subdirectory\x20within\x20the\x20module.\x0aFor\x20example,\x20the\x20module\x20<code>github.com/google/go-cmp</code>\x20contains\x20a\x20package\x0ain\x20the\x20directory\x20<code>cmp/</code>.\x20That\x20package's\x20import\x20path\x20is\x0a<code>github.com/google/go-cmp/cmp</code>.\x20Packages\x20in\x20the\x20standard\x20library\x20do\x0anot\x20have\x20a\x20module\x20path\x20prefix.\x0a</p>\x0a\x0a<h2\x20id=\"Command\">Your\x20first\x20program</h2>\x0a\x0a<p>\x0aTo\x20compile\x20and\x20run\x20a\x20simple\x20program,\x20first\x20choose\x20a\x20module\x20path\x20(we'll\x20use\x0a<code>example.com/user/hello</code>)\x20and\x20create\x20a\x20<code>go.mod</code>\x20file\x20that\x0adeclares\x20it:\x0a</p>\x0a\x0a<pre>\x0a$\x20mkdir\x20hello\x20#\x20Alternatively,\x20clone\x20it\x20if\x20it\x20already\x20exists\x20in\x20version\x20control.\x0a$\x20cd\x20hello\x0a$\x20<b>go\x20mod\x20init\x20example.com/user/hello</b>\x0ago:\x20creating\x20new\x20go.mod:\x20module\x20example.com/user/hello\x0a$\x20cat\x20go.mod\x0amodule\x20example.com/user/hello\x0a\x0ago\x201.14\x0a$\x0a</pre>\x0a\x0a<p>\x0aThe\x20first\x20statement\x20in\x20a\x20Go\x20source\x20file\x20must\x20be\x0a<code>package\x20<dfn>name</dfn></code>.\x20Executable\x20commands\x20must\x20always\x20use\x0a<code>package\x20main</code>.\x0a</p>\x0a\x0a<p>\x0aNext,\x20create\x20a\x20file\x20named\x20<code>hello.go</code>\x20inside\x20that\x20directory\x20containing\x0athe\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\x20example.com/user/hello</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aThis\x20command\x20builds\x20the\x20<code>hello</code>\x20command,\x20producing\x20an\x20executable\x0abinary.\x20It\x20then\x20installs\x20that\x20binary\x20as\x20<code>$HOME/go/bin/hello</code>\x20(or,\x0aunder\x20Windows,\x20<code>%USERPROFILE%\\go\\bin\\hello.exe</code>).\x0a</p>\x0a\x0a<p>\x0aThe\x20install\x20directory\x20is\x20controlled\x20by\x20the\x20<code>GOPATH</code>\x0aand\x20<code>GOBIN</code>\x20<a\x20href=\"/cmd/go/#hdr-Environment_variables\">environment\x0avariables</a>.\x20If\x20<code>GOBIN</code>\x20is\x20set,\x20binaries\x20are\x20installed\x20to\x20that\x0adirectory.\x20If\x20<code>GOPATH</code>\x20is\x20set,\x20binaries\x20are\x20installed\x20to\x0athe\x20<code>bin</code>\x20subdirectory\x20of\x20the\x20first\x20directory\x20in\x0athe\x20<code>GOPATH</code>\x20list.\x20Otherwise,\x20binaries\x20are\x20installed\x20to\x0athe\x20<code>bin</code>\x20subdirectory\x20of\x20the\x20default\x20<code>GOPATH</code>\x0a(<code>$HOME/go</code>\x20or\x20<code>%USERPROFILE%\\go</code>).\x0a</p>\x0a\x0a<p>\x0aYou\x20can\x20use\x20the\x20<code>go\x20env</code>\x20command\x20to\x20portably\x20set\x20the\x20default\x20value\x0afor\x20an\x20environment\x20variable\x20for\x20future\x20<code>go</code>\x20commands:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20env\x20-w\x20GOBIN=/somewhere/else/bin\x0a$\x0a</pre>\x0a\x0a<p>\x0aTo\x20unset\x20a\x20variable\x20previously\x20set\x20by\x20<code>go\x20env\x20-w</code>,\x20use\x20<code>go\x20env\x20-u</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20env\x20-u\x20GOBIN\x0a$\x0a</pre>\x0a\x0a<p>\x0aCommands\x20like\x20<code>go\x20install</code>\x20apply\x20within\x20the\x20context\x20of\x20the\x20module\x0acontaining\x20the\x20current\x20working\x20directory.\x20If\x20the\x20working\x20directory\x20is\x20not\x20within\x0athe\x20<code>example.com/user/hello</code>\x20module,\x20<code>go\x20install</code>\x20may\x20fail.\x0a</p>\x0a\x0a<p>\x0aFor\x20convenience,\x20<code>go</code>\x20commands\x20accept\x20paths\x20relative\x0ato\x20the\x20working\x20directory,\x20and\x20default\x20to\x20the\x20package\x20in\x20the\x0acurrent\x20working\x20directory\x20if\x20no\x20other\x20path\x20is\x20given.\x0aSo\x20in\x20our\x20working\x20directory,\x20the\x20following\x20commands\x20are\x20all\x20equivalent:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20install\x20example.com/user/hello\x0a</pre>\x0a\x0a<pre>\x0a$\x20go\x20install\x20.\x0a</pre>\x0a\x0a<pre>\x0a$\x20go\x20install\x0a</pre>\x0a\x0a<p>\x0aNext,\x20let's\x20run\x20the\x20program\x20to\x20ensure\x20it\x20works.\x20For\x20added\x20convenience,\x20we'll\x0aadd\x20the\x20install\x20directory\x20to\x20our\x20<code>PATH</code>\x20to\x20make\x20running\x20binaries\x0aeasy:\x0a</p>\x0a\x0a<!--\x20Note:\x20we\x20can't\x20use\x20$(go\x20env\x20GOBIN)\x20here\x20until\x20https://golang.org/issue/23439\x20is\x20addressed.\x20-->\x0a<pre>\x0a#\x20Windows\x20users\x20should\x20consult\x20https://github.com/golang/go/wiki/SettingGOPATH\x0a#\x20for\x20setting\x20%PATH%.\x0a$\x20<b>export\x20PATH=$PATH:$(dirname\x20$(go\x20list\x20-f\x20'{{.Target}}'\x20.))</b>\x0a$\x20<b>hello</b>\x0aHello,\x20world.\x0a$\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>git\x20init</b>\x0aInitialized\x20empty\x20Git\x20repository\x20in\x20/home/user/hello/.git/\x0a$\x20<b>git\x20add\x20go.mod\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\x20go.mod\x20hello.go\x0a$\x0a</pre>\x0a\x0a<p>\x0aThe\x20<code>go</code>\x20command\x20locates\x20the\x20repository\x20containing\x20a\x20given\x20module\x20path\x20by\x20requesting\x20a\x20corresponding\x20HTTPS\x20URL\x20and\x20reading\x20metadata\x20embedded\x20in\x20the\x20HTML\x20response\x20(see\x0a<code><a\x20href=\"/cmd/go/#hdr-Remote_import_paths\">go\x20help\x20importpath</a></code>).\x0aMany\x20hosting\x20services\x20already\x20provide\x20that\x20metadata\x20for\x20repositories\x20containing\x0aGo\x20code,\x20so\x20the\x20easiest\x20way\x20to\x20make\x20your\x20module\x20available\x20for\x20others\x20to\x20use\x20is\x0ausually\x20to\x20make\x20its\x20module\x20path\x20match\x20the\x20URL\x20for\x20the\x20repository.\x0a</p>\x0a\x0a<h3\x20id=\"ImportingLocal\">Importing\x20packages\x20from\x20your\x20module</h3>\x0a\x0a<p>\x0aLet's\x20write\x20a\x20<code>morestrings</code>\x20package\x20and\x20use\x20it\x20from\x20the\x20<code>hello</code>\x20program.\x0aFirst,\x20create\x20a\x20directory\x20for\x20the\x20package\x20named\x0a<code>$HOME/hello/morestrings</code>,\x20and\x20then\x20a\x20file\x20named\x0a<code>reverse.go</code>\x20in\x20that\x20directory\x20with\x20the\x20following\x20contents:\x0a</p>\x0a\x0a<pre>\x0a//\x20Package\x20morestrings\x20implements\x20additional\x20functions\x20to\x20manipulate\x20UTF-8\x0a//\x20encoded\x20strings,\x20beyond\x20what\x20is\x20provided\x20in\x20the\x20standard\x20\"strings\"\x20package.\x0apackage\x20morestrings\x0a\x0a//\x20ReverseRunes\x20returns\x20its\x20argument\x20string\x20reversed\x20rune-wise\x20left\x20to\x20right.\x0afunc\x20ReverseRunes(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>\x0aBecause\x20our\x20<code>ReverseRunes</code>\x20function\x20begins\x20with\x20an\x20upper-case\x0aletter,\x20it\x20is\x20<a\x20href=\"/ref/spec#Exported_identifiers\"><dfn>exported</dfn></a>,\x0aand\x20can\x20be\x20used\x20in\x20other\x20packages\x20that\x20import\x20our\x20<code>morestrings</code>\x0apackage.\x0a</p>\x0a\x0a<p>\x0aLet's\x20test\x20that\x20the\x20package\x20compiles\x20with\x20<code>go\x20build</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20cd\x20$HOME/hello/morestrings\x0a$\x20<b>go\x20build</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aThis\x20won't\x20produce\x20an\x20output\x20file.\x20Instead\x20it\x20saves\x20the\x20compiled\x20package\x20in\x20the\x0alocal\x20build\x20cache.\x0a</p>\x0a\x0a<p>\x0aAfter\x20confirming\x20that\x20the\x20<code>morestrings</code>\x20package\x20builds,\x20let's\x20use\x20it\x0afrom\x20the\x20<code>hello</code>\x20program.\x20To\x20do\x20so,\x20modify\x20your\x20original\x0a<code>$HOME/hello/hello.go</code>\x20to\x20use\x20the\x20morestrings\x20package:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09<b>\"example.com/user/hello/morestrings\"</b>\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(morestrings.ReverseRunes(\"!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\x20example.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<h3\x20id=\"ImportingRemote\">Importing\x20packages\x20from\x20remote\x20modules</h3>\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,\x20to\x20use\x20<code>github.com/google/go-cmp/cmp</code>\x20in\x20your\x20program:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09\"example.com/user/hello/morestrings\"\x0a\x09\"github.com/google/go-cmp/cmp\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(morestrings.ReverseRunes(\"!oG\x20,olleH\"))\x0a\x09fmt.Println(cmp.Diff(\"Hello\x20World\",\x20\"Hello\x20Go\"))\x0a}\x0a</pre>\x0a\x0a<p>\x0aWhen\x20you\x20run\x20commands\x20like\x20<code>go\x20install</code>,\x20<code>go\x20build</code>,\x20or\x0a<code>go\x20run</code>,\x20the\x20<code>go</code>\x20command\x20will\x20automatically\x20download\x20the\x0aremote\x20module\x20and\x20record\x20its\x20version\x20in\x20your\x20<code>go.mod</code>\x20file:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20install\x20example.com/user/hello\x0ago:\x20finding\x20module\x20for\x20package\x20github.com/google/go-cmp/cmp\x0ago:\x20downloading\x20github.com/google/go-cmp\x20v0.4.0\x0ago:\x20found\x20github.com/google/go-cmp/cmp\x20in\x20github.com/google/go-cmp\x20v0.4.0\x0a$\x20hello\x0aHello,\x20Go!\x0a\x20\x20string(\x0a-\x20\x09\"Hello\x20World\",\x0a+\x20\x09\"Hello\x20Go\",\x0a\x20\x20)\x0a$\x20cat\x20go.mod\x0amodule\x20example.com/user/hello\x0a\x0ago\x201.14\x0a\x0a<b>require\x20github.com/google/go-cmp\x20v0.4.0</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aModule\x20dependencies\x20are\x20automatically\x20downloaded\x20to\x20the\x20<code>pkg/mod</code>\x0asubdirectory\x20of\x20the\x20directory\x20indicated\x20by\x20the\x20<code>GOPATH</code>\x20environment\x0avariable.\x20The\x20downloaded\x20contents\x20for\x20a\x20given\x20version\x20of\x20a\x20module\x20are\x20shared\x0aamong\x20all\x20other\x20modules\x20that\x20<code>require</code>\x20that\x20version,\x20so\x0athe\x20<code>go</code>\x20command\x20marks\x20those\x20files\x20and\x20directories\x20as\x20read-only.\x20To\x0aremove\x20all\x20downloaded\x20modules,\x20you\x20can\x20pass\x20the\x20<code>-modcache</code>\x20flag\x0ato\x20<code>go\x20clean</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20clean\x20-modcache\x0a$\x0a</pre>\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>morestrings</code>\x20package\x20by\x20creating\x20the\x20file\x0a<code>$HOME/hello/morestrings/reverse_test.go</code>\x20containing\x0athe\x20following\x20Go\x20code.\x0a</p>\x0a\x0a<pre>\x0apackage\x20morestrings\x0a\x0aimport\x20\"testing\"\x0a\x0afunc\x20TestReverseRunes(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:=\x20ReverseRunes(c.in)\x0a\x09\x09if\x20got\x20!=\x20c.want\x20{\x0a\x09\x09\x09t.Errorf(\"ReverseRunes(%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</b>\x0aPASS\x0aok\x20\x20\x09example.com/user/morestrings\x200.165s\x0a$\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<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{{if\x20$.GoogleCN}}\x0aA\x20Tour\x20of\x20Go\x0a{{else}}\x0a<a\x20href=\"//tour.golang.org/\">A\x20Tour\x20of\x20Go</a>\x0a{{end}}\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<h2\x20id=\"help\">Getting\x20help</h2>\x0a\x0a<p>\x0aFor\x20real-time\x20help,\x20ask\x20the\x20helpful\x20gophers\x20in\x20the\x20community-run\x0a<a\x20href=\"https://gophers.slack.com/messages/general/\">gophers\x20Slack\x20server</a>\x0a(grab\x20an\x20invite\x20<a\x20href=\"https://invite.slack.golangbridge.org/\">here</a>).\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/code.html": "<!--{\x0a\x09\"Title\":\x20\"How\x20to\x20Write\x20Go\x20Code\",\x0a\x09\"Template\":\x20true\x0a}-->\x0a\x0a<h2\x20id=\"Introduction\">Introduction</h2>\x0a\x0a<p>\x0aThis\x20document\x20demonstrates\x20the\x20development\x20of\x20a\x20simple\x20Go\x20package\x20inside\x20a\x0amodule\x20and\x20introduces\x20the\x20<a\x20href=\"/cmd/go/\">go\x20tool</a>,\x20the\x20standard\x20way\x20to\x0afetch,\x20build,\x20and\x20install\x20Go\x20modules,\x20packages,\x20and\x20commands.\x0a</p>\x0a\x0a<p>\x0aNote:\x20This\x20document\x20assumes\x20that\x20you\x20are\x20using\x20Go\x201.13\x20or\x20later\x20and\x20the\x0a<code>GO111MODULE</code>\x20environment\x20variable\x20is\x20not\x20set.\x20If\x20you\x20are\x20looking\x20for\x0athe\x20older,\x20pre-modules\x20version\x20of\x20this\x20document,\x20it\x20is\x20archived\x0a<a\x20href=\"gopath_code.html\">here</a>.\x0a</p>\x0a\x0a<h2\x20id=\"Organization\">Code\x20organization</h2>\x0a\x0a<p>\x0aGo\x20programs\x20are\x20organized\x20into\x20packages.\x20A\x20<dfn>package</dfn>\x20is\x20a\x20collection\x0aof\x20source\x20files\x20in\x20the\x20same\x20directory\x20that\x20are\x20compiled\x20together.\x20Functions,\x0atypes,\x20variables,\x20and\x20constants\x20defined\x20in\x20one\x20source\x20file\x20are\x20visible\x20to\x20all\x0aother\x20source\x20files\x20within\x20the\x20same\x20package.\x0a</p>\x0a\x0a<p>\x0aA\x20repository\x20contains\x20one\x20or\x20more\x20modules.\x20A\x20<dfn>module</dfn>\x20is\x20a\x20collection\x0aof\x20related\x20Go\x20packages\x20that\x20are\x20released\x20together.\x20A\x20Go\x20repository\x20typically\x0acontains\x20only\x20one\x20module,\x20located\x20at\x20the\x20root\x20of\x20the\x20repository.\x20A\x20file\x20named\x0a<code>go.mod</code>\x20there\x20declares\x20the\x20<dfn>module\x20path</dfn>:\x20the\x20import\x20path\x0aprefix\x20for\x20all\x20packages\x20within\x20the\x20module.\x20The\x20module\x20contains\x20the\x20packages\x20in\x0athe\x20directory\x20containing\x20its\x20<code>go.mod</code>\x20file\x20as\x20well\x20as\x20subdirectories\x0aof\x20that\x20directory,\x20up\x20to\x20the\x20next\x20subdirectory\x20containing\x20another\x0a<code>go.mod</code>\x20file\x20(if\x20any).\x0a</p>\x0a\x0a<p>\x0aNote\x20that\x20you\x20don't\x20need\x20to\x20publish\x20your\x20code\x20to\x20a\x20remote\x20repository\x20before\x20you\x0acan\x20build\x20it.\x20A\x20module\x20can\x20be\x20defined\x20locally\x20without\x20belonging\x20to\x20a\x20repository.\x0aHowever,\x20it's\x20a\x20good\x20habit\x20to\x20organize\x20your\x20code\x20as\x20if\x20you\x20will\x20publish\x20it\x0asomeday.\x0a</p>\x0a\x0a<p>\x0aEach\x20module's\x20path\x20not\x20only\x20serves\x20as\x20an\x20import\x20path\x20prefix\x20for\x20its\x20packages,\x0abut\x20also\x20indicates\x20where\x20the\x20<code>go</code>\x20command\x20should\x20look\x20to\x20download\x20it.\x0aFor\x20example,\x20in\x20order\x20to\x20download\x20the\x20module\x20<code>golang.org/x/tools</code>,\x0athe\x20<code>go</code>\x20command\x20would\x20consult\x20the\x20repository\x20indicated\x20by\x0a<code>https://golang.org/x/tools</code>\x20(described\x20more\x20<a\x20href=\"https://golang.org/cmd/go/#hdr-Relative_import_paths\">here</a>).\x0a</p>\x0a\x0a<p>\x0aAn\x20<dfn>import\x20path</dfn>\x20is\x20a\x20string\x20used\x20to\x20import\x20a\x20package.\x20A\x20package's\x0aimport\x20path\x20is\x20its\x20module\x20path\x20joined\x20with\x20its\x20subdirectory\x20within\x20the\x20module.\x0aFor\x20example,\x20the\x20module\x20<code>github.com/google/go-cmp</code>\x20contains\x20a\x20package\x0ain\x20the\x20directory\x20<code>cmp/</code>.\x20That\x20package's\x20import\x20path\x20is\x0a<code>github.com/google/go-cmp/cmp</code>.\x20Packages\x20in\x20the\x20standard\x20library\x20do\x0anot\x20have\x20a\x20module\x20path\x20prefix.\x0a</p>\x0a\x0a<h2\x20id=\"Command\">Your\x20first\x20program</h2>\x0a\x0a<p>\x0aTo\x20compile\x20and\x20run\x20a\x20simple\x20program,\x20first\x20choose\x20a\x20module\x20path\x20(we'll\x20use\x0a<code>example.com/user/hello</code>)\x20and\x20create\x20a\x20<code>go.mod</code>\x20file\x20that\x0adeclares\x20it:\x0a</p>\x0a\x0a<pre>\x0a$\x20mkdir\x20hello\x20#\x20Alternatively,\x20clone\x20it\x20if\x20it\x20already\x20exists\x20in\x20version\x20control.\x0a$\x20cd\x20hello\x0a$\x20<b>go\x20mod\x20init\x20example.com/user/hello</b>\x0ago:\x20creating\x20new\x20go.mod:\x20module\x20example.com/user/hello\x0a$\x20cat\x20go.mod\x0amodule\x20example.com/user/hello\x0a\x0ago\x201.14\x0a$\x0a</pre>\x0a\x0a<p>\x0aThe\x20first\x20statement\x20in\x20a\x20Go\x20source\x20file\x20must\x20be\x0a<code>package\x20<dfn>name</dfn></code>.\x20Executable\x20commands\x20must\x20always\x20use\x0a<code>package\x20main</code>.\x0a</p>\x0a\x0a<p>\x0aNext,\x20create\x20a\x20file\x20named\x20<code>hello.go</code>\x20inside\x20that\x20directory\x20containing\x0athe\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\x20example.com/user/hello</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aThis\x20command\x20builds\x20the\x20<code>hello</code>\x20command,\x20producing\x20an\x20executable\x0abinary.\x20It\x20then\x20installs\x20that\x20binary\x20as\x20<code>$HOME/go/bin/hello</code>\x20(or,\x0aunder\x20Windows,\x20<code>%USERPROFILE%\\go\\bin\\hello.exe</code>).\x0a</p>\x0a\x0a<p>\x0aThe\x20install\x20directory\x20is\x20controlled\x20by\x20the\x20<code>GOPATH</code>\x0aand\x20<code>GOBIN</code>\x20<a\x20href=\"/cmd/go/#hdr-Environment_variables\">environment\x0avariables</a>.\x20If\x20<code>GOBIN</code>\x20is\x20set,\x20binaries\x20are\x20installed\x20to\x20that\x0adirectory.\x20If\x20<code>GOPATH</code>\x20is\x20set,\x20binaries\x20are\x20installed\x20to\x0athe\x20<code>bin</code>\x20subdirectory\x20of\x20the\x20first\x20directory\x20in\x0athe\x20<code>GOPATH</code>\x20list.\x20Otherwise,\x20binaries\x20are\x20installed\x20to\x0athe\x20<code>bin</code>\x20subdirectory\x20of\x20the\x20default\x20<code>GOPATH</code>\x0a(<code>$HOME/go</code>\x20or\x20<code>%USERPROFILE%\\go</code>).\x0a</p>\x0a\x0a<p>\x0aYou\x20can\x20use\x20the\x20<code>go\x20env</code>\x20command\x20to\x20portably\x20set\x20the\x20default\x20value\x0afor\x20an\x20environment\x20variable\x20for\x20future\x20<code>go</code>\x20commands:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20env\x20-w\x20GOBIN=/somewhere/else/bin\x0a$\x0a</pre>\x0a\x0a<p>\x0aTo\x20unset\x20a\x20variable\x20previously\x20set\x20by\x20<code>go\x20env\x20-w</code>,\x20use\x20<code>go\x20env\x20-u</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20env\x20-u\x20GOBIN\x0a$\x0a</pre>\x0a\x0a<p>\x0aCommands\x20like\x20<code>go\x20install</code>\x20apply\x20within\x20the\x20context\x20of\x20the\x20module\x0acontaining\x20the\x20current\x20working\x20directory.\x20If\x20the\x20working\x20directory\x20is\x20not\x20within\x0athe\x20<code>example.com/user/hello</code>\x20module,\x20<code>go\x20install</code>\x20may\x20fail.\x0a</p>\x0a\x0a<p>\x0aFor\x20convenience,\x20<code>go</code>\x20commands\x20accept\x20paths\x20relative\x0ato\x20the\x20working\x20directory,\x20and\x20default\x20to\x20the\x20package\x20in\x20the\x0acurrent\x20working\x20directory\x20if\x20no\x20other\x20path\x20is\x20given.\x0aSo\x20in\x20our\x20working\x20directory,\x20the\x20following\x20commands\x20are\x20all\x20equivalent:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20install\x20example.com/user/hello\x0a</pre>\x0a\x0a<pre>\x0a$\x20go\x20install\x20.\x0a</pre>\x0a\x0a<pre>\x0a$\x20go\x20install\x0a</pre>\x0a\x0a<p>\x0aNext,\x20let's\x20run\x20the\x20program\x20to\x20ensure\x20it\x20works.\x20For\x20added\x20convenience,\x20we'll\x0aadd\x20the\x20install\x20directory\x20to\x20our\x20<code>PATH</code>\x20to\x20make\x20running\x20binaries\x0aeasy:\x0a</p>\x0a\x0a<!--\x20Note:\x20we\x20can't\x20use\x20$(go\x20env\x20GOBIN)\x20here\x20until\x20https://golang.org/issue/23439\x20is\x20addressed.\x20-->\x0a<pre>\x0a#\x20Windows\x20users\x20should\x20consult\x20https://github.com/golang/go/wiki/SettingGOPATH\x0a#\x20for\x20setting\x20%PATH%.\x0a$\x20<b>export\x20PATH=$PATH:$(dirname\x20$(go\x20list\x20-f\x20'{{\"{{\"}}.Target{{\"}}\"}}'\x20.))</b>\x0a$\x20<b>hello</b>\x0aHello,\x20world.\x0a$\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>git\x20init</b>\x0aInitialized\x20empty\x20Git\x20repository\x20in\x20/home/user/hello/.git/\x0a$\x20<b>git\x20add\x20go.mod\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\x20go.mod\x20hello.go\x0a$\x0a</pre>\x0a\x0a<p>\x0aThe\x20<code>go</code>\x20command\x20locates\x20the\x20repository\x20containing\x20a\x20given\x20module\x20path\x20by\x20requesting\x20a\x20corresponding\x20HTTPS\x20URL\x20and\x20reading\x20metadata\x20embedded\x20in\x20the\x20HTML\x20response\x20(see\x0a<code><a\x20href=\"/cmd/go/#hdr-Remote_import_paths\">go\x20help\x20importpath</a></code>).\x0aMany\x20hosting\x20services\x20already\x20provide\x20that\x20metadata\x20for\x20repositories\x20containing\x0aGo\x20code,\x20so\x20the\x20easiest\x20way\x20to\x20make\x20your\x20module\x20available\x20for\x20others\x20to\x20use\x20is\x0ausually\x20to\x20make\x20its\x20module\x20path\x20match\x20the\x20URL\x20for\x20the\x20repository.\x0a</p>\x0a\x0a<h3\x20id=\"ImportingLocal\">Importing\x20packages\x20from\x20your\x20module</h3>\x0a\x0a<p>\x0aLet's\x20write\x20a\x20<code>morestrings</code>\x20package\x20and\x20use\x20it\x20from\x20the\x20<code>hello</code>\x20program.\x0aFirst,\x20create\x20a\x20directory\x20for\x20the\x20package\x20named\x0a<code>$HOME/hello/morestrings</code>,\x20and\x20then\x20a\x20file\x20named\x0a<code>reverse.go</code>\x20in\x20that\x20directory\x20with\x20the\x20following\x20contents:\x0a</p>\x0a\x0a<pre>\x0a//\x20Package\x20morestrings\x20implements\x20additional\x20functions\x20to\x20manipulate\x20UTF-8\x0a//\x20encoded\x20strings,\x20beyond\x20what\x20is\x20provided\x20in\x20the\x20standard\x20\"strings\"\x20package.\x0apackage\x20morestrings\x0a\x0a//\x20ReverseRunes\x20returns\x20its\x20argument\x20string\x20reversed\x20rune-wise\x20left\x20to\x20right.\x0afunc\x20ReverseRunes(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>\x0aBecause\x20our\x20<code>ReverseRunes</code>\x20function\x20begins\x20with\x20an\x20upper-case\x0aletter,\x20it\x20is\x20<a\x20href=\"/ref/spec#Exported_identifiers\"><dfn>exported</dfn></a>,\x0aand\x20can\x20be\x20used\x20in\x20other\x20packages\x20that\x20import\x20our\x20<code>morestrings</code>\x0apackage.\x0a</p>\x0a\x0a<p>\x0aLet's\x20test\x20that\x20the\x20package\x20compiles\x20with\x20<code>go\x20build</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20cd\x20$HOME/hello/morestrings\x0a$\x20<b>go\x20build</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aThis\x20won't\x20produce\x20an\x20output\x20file.\x20Instead\x20it\x20saves\x20the\x20compiled\x20package\x20in\x20the\x0alocal\x20build\x20cache.\x0a</p>\x0a\x0a<p>\x0aAfter\x20confirming\x20that\x20the\x20<code>morestrings</code>\x20package\x20builds,\x20let's\x20use\x20it\x0afrom\x20the\x20<code>hello</code>\x20program.\x20To\x20do\x20so,\x20modify\x20your\x20original\x0a<code>$HOME/hello/hello.go</code>\x20to\x20use\x20the\x20morestrings\x20package:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09<b>\"example.com/user/hello/morestrings\"</b>\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(morestrings.ReverseRunes(\"!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\x20example.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<h3\x20id=\"ImportingRemote\">Importing\x20packages\x20from\x20remote\x20modules</h3>\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,\x20to\x20use\x20<code>github.com/google/go-cmp/cmp</code>\x20in\x20your\x20program:\x0a</p>\x0a\x0a<pre>\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09\"example.com/user/hello/morestrings\"\x0a\x09\"github.com/google/go-cmp/cmp\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(morestrings.ReverseRunes(\"!oG\x20,olleH\"))\x0a\x09fmt.Println(cmp.Diff(\"Hello\x20World\",\x20\"Hello\x20Go\"))\x0a}\x0a</pre>\x0a\x0a<p>\x0aWhen\x20you\x20run\x20commands\x20like\x20<code>go\x20install</code>,\x20<code>go\x20build</code>,\x20or\x0a<code>go\x20run</code>,\x20the\x20<code>go</code>\x20command\x20will\x20automatically\x20download\x20the\x0aremote\x20module\x20and\x20record\x20its\x20version\x20in\x20your\x20<code>go.mod</code>\x20file:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20install\x20example.com/user/hello\x0ago:\x20finding\x20module\x20for\x20package\x20github.com/google/go-cmp/cmp\x0ago:\x20downloading\x20github.com/google/go-cmp\x20v0.4.0\x0ago:\x20found\x20github.com/google/go-cmp/cmp\x20in\x20github.com/google/go-cmp\x20v0.4.0\x0a$\x20hello\x0aHello,\x20Go!\x0a\x20\x20string(\x0a-\x20\x09\"Hello\x20World\",\x0a+\x20\x09\"Hello\x20Go\",\x0a\x20\x20)\x0a$\x20cat\x20go.mod\x0amodule\x20example.com/user/hello\x0a\x0ago\x201.14\x0a\x0a<b>require\x20github.com/google/go-cmp\x20v0.4.0</b>\x0a$\x0a</pre>\x0a\x0a<p>\x0aModule\x20dependencies\x20are\x20automatically\x20downloaded\x20to\x20the\x20<code>pkg/mod</code>\x0asubdirectory\x20of\x20the\x20directory\x20indicated\x20by\x20the\x20<code>GOPATH</code>\x20environment\x0avariable.\x20The\x20downloaded\x20contents\x20for\x20a\x20given\x20version\x20of\x20a\x20module\x20are\x20shared\x0aamong\x20all\x20other\x20modules\x20that\x20<code>require</code>\x20that\x20version,\x20so\x0athe\x20<code>go</code>\x20command\x20marks\x20those\x20files\x20and\x20directories\x20as\x20read-only.\x20To\x0aremove\x20all\x20downloaded\x20modules,\x20you\x20can\x20pass\x20the\x20<code>-modcache</code>\x20flag\x0ato\x20<code>go\x20clean</code>:\x0a</p>\x0a\x0a<pre>\x0a$\x20go\x20clean\x20-modcache\x0a$\x0a</pre>\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>morestrings</code>\x20package\x20by\x20creating\x20the\x20file\x0a<code>$HOME/hello/morestrings/reverse_test.go</code>\x20containing\x0athe\x20following\x20Go\x20code.\x0a</p>\x0a\x0a<pre>\x0apackage\x20morestrings\x0a\x0aimport\x20\"testing\"\x0a\x0afunc\x20TestReverseRunes(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:=\x20ReverseRunes(c.in)\x0a\x09\x09if\x20got\x20!=\x20c.want\x20{\x0a\x09\x09\x09t.Errorf(\"ReverseRunes(%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</b>\x0aPASS\x0aok\x20\x20\x09example.com/user/morestrings\x200.165s\x0a$\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<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{{if\x20$.GoogleCN}}\x0aA\x20Tour\x20of\x20Go\x0a{{else}}\x0a<a\x20href=\"//tour.golang.org/\">A\x20Tour\x20of\x20Go</a>\x0a{{end}}\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<h2\x20id=\"help\">Getting\x20help</h2>\x0a\x0a<p>\x0aFor\x20real-time\x20help,\x20ask\x20the\x20helpful\x20gophers\x20in\x20the\x20community-run\x0a<a\x20href=\"https://gophers.slack.com/messages/general/\">gophers\x20Slack\x20server</a>\x0a(grab\x20an\x20invite\x20<a\x20href=\"https://invite.slack.golangbridge.org/\">here</a>).\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/conduct.html": "<!--{\x0a\x09\"Title\":\x20\"Go\x20Community\x20Code\x20of\x20Conduct\",\x0a\x09\"Path\":\x20\x20\"/conduct\",\x0a\x09\"Template\":\x20true\x0a}-->\x0a\x0a<style>\x0aul\x20{\x0a\x09max-width:\x20800px;\x0a}\x0aul\x20ul\x20{\x0a\x09margin:\x200\x200\x205px;\x0a}\x0a</style>\x0a\x0a<h2\x20id=\"about\">About</h2>\x0a\x0a<p>\x0aOnline\x20communities\x20include\x20people\x20from\x20many\x20different\x20backgrounds.\x0aThe\x20Go\x20contributors\x20are\x20committed\x20to\x20providing\x20a\x20friendly,\x20safe\x20and\x20welcoming\x0aenvironment\x20for\x20all,\x20regardless\x20of\x20gender\x20identity\x20and\x20expression,\x20sexual\x20orientation,\x0adisabilities,\x20neurodiversity,\x20physical\x20appearance,\x20body\x20size,\x20ethnicity,\x20nationality,\x0arace,\x20age,\x20religion,\x20or\x20similar\x20personal\x20characteristics.\x0a</p>\x0a\x0a<p>\x0aThe\x20first\x20goal\x20of\x20the\x20Code\x20of\x20Conduct\x20is\x20to\x20specify\x20a\x20baseline\x20standard\x0aof\x20behavior\x20so\x20that\x20people\x20with\x20different\x20social\x20values\x20and\x20communication\x0astyles\x20can\x20talk\x20about\x20Go\x20effectively,\x20productively,\x20and\x20respectfully.\x0a</p>\x0a\x0a<p>\x0aThe\x20second\x20goal\x20is\x20to\x20provide\x20a\x20mechanism\x20for\x20resolving\x20conflicts\x20in\x20the\x0acommunity\x20when\x20they\x20arise.\x0a</p>\x0a\x0a<p>\x0aThe\x20third\x20goal\x20of\x20the\x20Code\x20of\x20Conduct\x20is\x20to\x20make\x20our\x20community\x20welcoming\x20to\x0apeople\x20from\x20different\x20backgrounds.\x0aDiversity\x20is\x20critical\x20to\x20the\x20project;\x20for\x20Go\x20to\x20be\x20successful,\x20it\x20needs\x0acontributors\x20and\x20users\x20from\x20all\x20backgrounds.\x0a(See\x20<a\x20href=\"https://blog.golang.org/open-source\">Go,\x20Open\x20Source,\x20Community</a>.)\x0a</p>\x0a\x0a<p>\x0aWe\x20believe\x20that\x20healthy\x20debate\x20and\x20disagreement\x20are\x20essential\x20to\x20a\x20healthy\x20project\x20and\x20community.\x0aHowever,\x20it\x20is\x20never\x20ok\x20to\x20be\x20disrespectful.\x0aWe\x20value\x20diverse\x20opinions,\x20but\x20we\x20value\x20respectful\x20behavior\x20more.\x0a</p>\x0a\x0a<h2\x20id=\"values\">Gopher\x20values</h2>\x0a\x0a<p>\x0aThese\x20are\x20the\x20values\x20to\x20which\x20people\x20in\x20the\x20Go\x20community\x20(\xe2\x80\x9cGophers\xe2\x80\x9d)\x20should\x20aspire.\x0a</p>\x0a\x0a<ul>\x0a<li>Be\x20friendly\x20and\x20welcoming\x0a<li>Be\x20patient\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20<li>Remember\x20that\x20people\x20have\x20varying\x20communication\x20styles\x20and\x20that\x20not\x0a\x20\x20\x20\x20\x20\x20\x20\x20everyone\x20is\x20using\x20their\x20native\x20language.\x0a\x20\x20\x20\x20\x20\x20\x20\x20(Meaning\x20and\x20tone\x20can\x20be\x20lost\x20in\x20translation.)\x0a\x20\x20\x20\x20</ul>\x0a<li>Be\x20thoughtful\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20<li>Productive\x20communication\x20requires\x20effort.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Think\x20about\x20how\x20your\x20words\x20will\x20be\x20interpreted.\x0a\x20\x20\x20\x20<li>Remember\x20that\x20sometimes\x20it\x20is\x20best\x20to\x20refrain\x20entirely\x20from\x20commenting.\x0a\x20\x20\x20\x20</ul>\x0a<li>Be\x20respectful\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20<li>In\x20particular,\x20respect\x20differences\x20of\x20opinion.\x0a\x20\x20\x20\x20</ul>\x0a<li>Be\x20charitable\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20<li>Interpret\x20the\x20arguments\x20of\x20others\x20in\x20good\x20faith,\x20do\x20not\x20seek\x20to\x20disagree.\x0a\x20\x20\x20\x20<li>When\x20we\x20do\x20disagree,\x20try\x20to\x20understand\x20why.\x0a\x20\x20\x20\x20</ul>\x0a<li>Avoid\x20destructive\x20behavior:\x0a\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20<li>Derailing:\x20stay\x20on\x20topic;\x20if\x20you\x20want\x20to\x20talk\x20about\x20something\x20else,\x0a\x20\x20\x20\x20\x20\x20\x20\x20start\x20a\x20new\x20conversation.\x0a\x20\x20\x20\x20<li>Unconstructive\x20criticism:\x20don't\x20merely\x20decry\x20the\x20current\x20state\x20of\x20affairs;\x0a\x20\x20\x20\x20\x20\x20\x20\x20offer\xe2\x80\x94or\x20at\x20least\x20solicit\xe2\x80\x94suggestions\x20as\x20to\x20how\x20things\x20may\x20be\x20improved.\x0a\x20\x20\x20\x20<li>Snarking\x20(pithy,\x20unproductive,\x20sniping\x20comments)\x0a\x20\x20\x20\x20<li>Discussing\x20potentially\x20offensive\x20or\x20sensitive\x20issues;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this\x20all\x20too\x20often\x20leads\x20to\x20unnecessary\x20conflict.\x0a\x20\x20\x20\x20<li>Microaggressions:\x20brief\x20and\x20commonplace\x20verbal,\x20behavioral\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20environmental\x20indignities\x20that\x20communicate\x20hostile,\x20derogatory\x20or\x20negative\x0a\x20\x20\x20\x20\x20\x20\x20\x20slights\x20and\x20insults\x20to\x20a\x20person\x20or\x20group.\x0a\x20\x20\x20\x20</ul>\x0a</ul>\x0a\x0a<p>\x0aPeople\x20are\x20complicated.\x0aYou\x20should\x20expect\x20to\x20be\x20misunderstood\x20and\x20to\x20misunderstand\x20others;\x0awhen\x20this\x20inevitably\x20occurs,\x20resist\x20the\x20urge\x20to\x20be\x20defensive\x20or\x20assign\x20blame.\x0aTry\x20not\x20to\x20take\x20offense\x20where\x20no\x20offense\x20was\x20intended.\x0aGive\x20people\x20the\x20benefit\x20of\x20the\x20doubt.\x0aEven\x20if\x20the\x20intent\x20was\x20to\x20provoke,\x20do\x20not\x20rise\x20to\x20it.\x0aIt\x20is\x20the\x20responsibility\x20of\x20<i>all\x20parties</i>\x20to\x20de-escalate\x20conflict\x20when\x20it\x20arises.\x0a</p>\x0a\x0a<h2\x20id=\"code\">Code\x20of\x20Conduct</h2>\x0a\x0a<h3\x20id=\"our-pledge\">Our\x20Pledge</h3>\x0a\x0a<p>In\x20the\x20interest\x20of\x20fostering\x20an\x20open\x20and\x20welcoming\x20environment,\x20we\x20as\x0acontributors\x20and\x20maintainers\x20pledge\x20to\x20making\x20participation\x20in\x20our\x20project\x20and\x0aour\x20community\x20a\x20harassment-free\x20experience\x20for\x20everyone,\x20regardless\x20of\x20age,\x20body\x0asize,\x20disability,\x20ethnicity,\x20gender\x20identity\x20and\x20expression,\x20level\x20of\x0aexperience,\x20education,\x20socio-economic\x20status,\x20nationality,\x20personal\x20appearance,\x0arace,\x20religion,\x20or\x20sexual\x20identity\x20and\x20orientation.</p>\x0a\x0a<h3\x20id=\"our-standards\">Our\x20Standards</h3>\x0a\x0a<p>Examples\x20of\x20behavior\x20that\x20contributes\x20to\x20creating\x20a\x20positive\x20environment\x0ainclude:</p>\x0a\x0a<ul>\x0a<li>Using\x20welcoming\x20and\x20inclusive\x20language</li>\x0a<li>Being\x20respectful\x20of\x20differing\x20viewpoints\x20and\x20experiences</li>\x0a<li>Gracefully\x20accepting\x20constructive\x20criticism</li>\x0a<li>Focusing\x20on\x20what\x20is\x20best\x20for\x20the\x20community</li>\x0a<li>Showing\x20empathy\x20towards\x20other\x20community\x20members</li>\x0a</ul>\x0a\x0a<p>Examples\x20of\x20unacceptable\x20behavior\x20by\x20participants\x20include:</p>\x0a\x0a<ul>\x0a<li>The\x20use\x20of\x20sexualized\x20language\x20or\x20imagery\x20and\x20unwelcome\x20sexual\x20attention\x20or\x0aadvances</li>\x0a<li>Trolling,\x20insulting/derogatory\x20comments,\x20and\x20personal\x20or\x20political\x20attacks</li>\x0a<li>Public\x20or\x20private\x20harassment</li>\x0a<li>Publishing\x20others&rsquo;\x20private\x20information,\x20such\x20as\x20a\x20physical\x20or\x20electronic\x0aaddress,\x20without\x20explicit\x20permission</li>\x0a<li>Other\x20conduct\x20which\x20could\x20reasonably\x20be\x20considered\x20inappropriate\x20in\x20a\x0aprofessional\x20setting</li>\x0a</ul>\x0a\x0a<h3\x20id=\"our-responsibilities\">Our\x20Responsibilities</h3>\x0a\x0a<p>Project\x20maintainers\x20are\x20responsible\x20for\x20clarifying\x20the\x20standards\x20of\x20acceptable\x0abehavior\x20and\x20are\x20expected\x20to\x20take\x20appropriate\x20and\x20fair\x20corrective\x20action\x20in\x0aresponse\x20to\x20any\x20instances\x20of\x20unacceptable\x20behavior.</p>\x0a\x0a<p>Project\x20maintainers\x20have\x20the\x20right\x20and\x20responsibility\x20to\x20remove,\x20edit,\x20or\x20reject\x0acomments,\x20commits,\x20code,\x20wiki\x20edits,\x20issues,\x20and\x20other\x20contributions\x20that\x20are\x0anot\x20aligned\x20to\x20this\x20Code\x20of\x20Conduct,\x20or\x20to\x20ban\x20temporarily\x20or\x20permanently\x20any\x0acontributor\x20for\x20other\x20behaviors\x20that\x20they\x20deem\x20inappropriate,\x20threatening,\x0aoffensive,\x20or\x20harmful.</p>\x0a\x0a<h3\x20id=\"scope\">Scope</h3>\x0a\x0a<p>This\x20Code\x20of\x20Conduct\x20applies\x20both\x20within\x20project\x20spaces\x20and\x20in\x20public\x20spaces\x0awhen\x20an\x20individual\x20is\x20representing\x20the\x20project\x20or\x20its\x20community.\x20Examples\x20of\x0arepresenting\x20a\x20project\x20or\x20community\x20include\x20using\x20an\x20official\x20project\x20e-mail\x0aaddress,\x20posting\x20via\x20an\x20official\x20social\x20media\x20account,\x20or\x20acting\x20as\x20an\x20appointed\x0arepresentative\x20at\x20an\x20online\x20or\x20offline\x20event.\x20Representation\x20of\x20a\x20project\x20may\x20be\x0afurther\x20defined\x20and\x20clarified\x20by\x20project\x20maintainers.</p>\x0a\x0a<p>This\x20Code\x20of\x20Conduct\x20also\x20applies\x20outside\x20the\x20project\x20spaces\x20when\x20the\x20Project\x0aStewards\x20have\x20a\x20reasonable\x20belief\x20that\x20an\x20individual&rsquo;s\x20behavior\x20may\x20have\x20a\x0anegative\x20impact\x20on\x20the\x20project\x20or\x20its\x20community.</p>\x0a\x0a<h3\x20id=\"conflict-resolution\"></a>Conflict\x20Resolution</h3>\x0a\x0a<p>We\x20do\x20not\x20believe\x20that\x20all\x20conflict\x20is\x20bad;\x20healthy\x20debate\x20and\x20disagreement\x0aoften\x20yield\x20positive\x20results.\x20However,\x20it\x20is\x20never\x20okay\x20to\x20be\x20disrespectful\x20or\x0ato\x20engage\x20in\x20behavior\x20that\x20violates\x20the\x20project\xe2\x80\x99s\x20code\x20of\x20conduct.</p>\x0a\x0a<p>If\x20you\x20see\x20someone\x20violating\x20the\x20code\x20of\x20conduct,\x20you\x20are\x20encouraged\x20to\x20address\x0athe\x20behavior\x20directly\x20with\x20those\x20involved.\x20Many\x20issues\x20can\x20be\x20resolved\x20quickly\x0aand\x20easily,\x20and\x20this\x20gives\x20people\x20more\x20control\x20over\x20the\x20outcome\x20of\x20their\x0adispute.\x20If\x20you\x20are\x20unable\x20to\x20resolve\x20the\x20matter\x20for\x20any\x20reason,\x20or\x20if\x20the\x0abehavior\x20is\x20threatening\x20or\x20harassing,\x20report\x20it.\x20We\x20are\x20dedicated\x20to\x20providing\x0aan\x20environment\x20where\x20participants\x20feel\x20welcome\x20and\x20safe.</p>\x0a\x0a<p\x20id=\"reporting\">Reports\x20should\x20be\x20directed\x20to\x20Carmen\x20Andoh\x20and\x20Van\x20Riper,\x20the\x0aGo\x20Project\x20Stewards,\x20at\x20<i>conduct@golang.org</i>.\x0aIt\x20is\x20the\x20Project\x20Stewards\xe2\x80\x99\x20duty\x20to\x0areceive\x20and\x20address\x20reported\x20violations\x20of\x20the\x20code\x20of\x20conduct.\x20They\x20will\x20then\x0awork\x20with\x20a\x20committee\x20consisting\x20of\x20representatives\x20from\x20the\x20Open\x20Source\x0aPrograms\x20Office\x20and\x20the\x20Google\x20Open\x20Source\x20Strategy\x20team.\x20If\x20for\x20any\x20reason\x20you\x0aare\x20uncomfortable\x20reaching\x20out\x20the\x20Project\x20Stewards,\x20please\x20email\x0athe\x20Google\x20Open\x20Source\x20Programs\x20Office\x20at\x20<i>opensource@google.com</i>.</p>\x0a\x0a<p>We\x20will\x20investigate\x20every\x20complaint,\x20but\x20you\x20may\x20not\x20receive\x20a\x20direct\x20response.\x0aWe\x20will\x20use\x20our\x20discretion\x20in\x20determining\x20when\x20and\x20how\x20to\x20follow\x20up\x20on\x20reported\x0aincidents,\x20which\x20may\x20range\x20from\x20not\x20taking\x20action\x20to\x20permanent\x20expulsion\x20from\x0athe\x20project\x20and\x20project-sponsored\x20spaces.\x20We\x20will\x20notify\x20the\x20accused\x20of\x20the\x0areport\x20and\x20provide\x20them\x20an\x20opportunity\x20to\x20discuss\x20it\x20before\x20any\x20action\x20is\x20taken.\x0aThe\x20identity\x20of\x20the\x20reporter\x20will\x20be\x20omitted\x20from\x20the\x20details\x20of\x20the\x20report\x0asupplied\x20to\x20the\x20accused.\x20In\x20potentially\x20harmful\x20situations,\x20such\x20as\x20ongoing\x0aharassment\x20or\x20threats\x20to\x20anyone&rsquo;s\x20safety,\x20we\x20may\x20take\x20action\x20without\x20notice.</p>\x0a\x0a<h3\x20id=\"attribution\">Attribution</h3>\x0a\x0a<p>This\x20Code\x20of\x20Conduct\x20is\x20adapted\x20from\x20the\x20Contributor\x20Covenant,\x20version\x201.4,\x0aavailable\x20at\x0a<a\x20href=\"https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\">https://www.contributor-covenant.org/version/1/4/code-of-conduct.html</a></p>\x0a\x0a<h2\x20id=\"summary\">Summary</h2>\x0a\x0a<ul>\x0a<li>Treat\x20everyone\x20with\x20respect\x20and\x20kindness.\x0a<li>Be\x20thoughtful\x20in\x20how\x20you\x20communicate.\x0a<li>Don\xe2\x80\x99t\x20be\x20destructive\x20or\x20inflammatory.\x0a<li>If\x20you\x20encounter\x20an\x20issue,\x20please\x20mail\x20<a\x20href=\"mailto:conduct@golang.org\">conduct@golang.org</a>.\x0a</ul>\x0a",