content/static: add gopath_code.html file and regenerate

CL 199417 added a new doc/gopath_code.html file. This change adds
it to the list of files that are embedded in package static, and
regenerates the package.

A change described in https://golang.org/issue/29206#issuecomment-536099768
will make it no longer neccessary to do this step in the future.

Updates golang/go#28215
Updates golang/go#29206

Change-Id: Ia1bd125488e04b34f9b8e36de4397de32d77bcef
Reviewed-on: https://go-review.googlesource.com/c/website/+/213937
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
diff --git a/content/static/gen.go b/content/static/gen.go
index ad67bb1..f6bd7ad 100644
--- a/content/static/gen.go
+++ b/content/static/gen.go
@@ -41,6 +41,7 @@
 	"doc/devel/release.html",
 	"doc/devel/weekly.html",
 	"doc/docs.html",
+	"doc/gopath_code.html",
 	"doc/root.html",
 	"doc/security.html",
 	"error.html",
diff --git a/content/static/static.go b/content/static/static.go
index 95858cc..3b197f5 100644
--- a/content/static/static.go
+++ b/content/static/static.go
@@ -59,6 +59,8 @@
 
 	"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\"/>\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>\x0a{{if\x20not\x20$.GoogleCN}}\x0aAlso\x20available\x20as\x20a\x20<a\x20href=\"//www.youtube.com/watch?v=XCsL89YtqCs\">screencast</a>,\x20this\x0a{{else}}\x0aThis\x0a{{end}}\x0adoc\x20explains\x20how\x20to\x20use\x20the\x20<a\x20href=\"/cmd/go/\">go\x20command</a>\x0ato\x20fetch,\x20build,\x20and\x20install\x20packages,\x20commands,\x20and\x20run\x20tests.\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</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\"/>\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/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\x20related\x20to\x20a\x20single\x0a\x09\x09project\x20in\x20a\x20version\x20control\x20repository.</li>\x0a\x09<li>Typically,\x20there\x20is\x20only\x20one\x20<i>module</i>\x20in\x20the\x20root\x20directory\x20of\x20a\x20repository..</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/root.html": "<!--{\x0a\x20\x20\"Path\":\x20\"/\",\x0a\x20\x20\"Template\":\x20true\x0a}-->\x0a\x0a<div\x20class=\"HomeContainer\">\x0a\x20\x20<section\x20class=\"HomeSection\x20Hero\">\x0a\x20\x20\x20\x20<h1\x20class=\"Hero-header\">\x0a\x20\x20\x20\x20\x20\x20Go\x20is\x20an\x20open\x20source\x20programming\x20language\x20that\x20makes\x20it\x20easy\x20to\x20build\x0a\x20\x20\x20\x20\x20\x20<strong>simple</strong>,\x20<strong>reliable</strong>,\x20and\x20<strong>efficient</strong>\x20software.\x0a\x20\x20\x20\x20</h1>\x0a\x20\x20\x20\x20<i\x20class=\"Hero-gopher\"></i>\x0a\x20\x20\x20\x20<a\x20href=\"/dl/\"\x20class=\"Button\x20Button--big\x20HeroDownloadButton\">\x0a\x20\x20\x20\x20\x20\x20<img\x20class=\"HeroDownloadButton-image\"\x20src=\"/lib/godoc/images/cloud-download.svg\"\x20alt=\"\">\x0a\x20\x20\x20\x20\x20\x20Download\x20Go\x0a\x20\x20\x20\x20</a>\x0a\x20\x20\x20\x20<p\x20class=\"Hero-description\">\x0a\x20\x20\x20\x20\x20\x20Binary\x20distributions\x20available\x20for<br>\x0a\x20\x20\x20\x20\x20\x20Linux,\x20macOS,\x20Windows,\x20and\x20more.\x0a\x20\x20\x20\x20</p>\x0a\x20\x20</section>\x0a\x0a\x20\x20<section\x20class=\"HomeSection\x20Playground\">\x0a\x20\x20\x20\x20<div\x20class=\"Playground-headerContainer\">\x0a\x20\x20\x20\x20\x20\x20<h2\x20class=\"HomeSection-header\">Try\x20Go</h2>\x0a\x20\x20\x20\x20\x20\x20{{if\x20not\x20$.GoogleCN}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\"Playground-popout\x20js-playgroundShareEl\">Open\x20in\x20Playground</a>\x0a\x20\x20\x20\x20\x20\x20{{end}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\"Playground-inputContainer\">\x0a\x20\x20\x20\x20\x20\x20<textarea\x20class=\"Playground-input\x20js-playgroundCodeEl\"\x20spellcheck=\"false\"\x20aria-label=\"Try\x20Go\">//\x20You\x20can\x20edit\x20this\x20code!\x0a//\x20Click\x20here\x20and\x20start\x20typing.\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(\"Hello,\x20\xe4\xb8\x96\xe7\x95\x8c\")\x0a}\x0a</textarea>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\"Playground-outputContainer\x20js-playgroundOutputEl\">\x0a\x20\x20\x20\x20\x20\x20<pre\x20class=\"Playground-output\"><noscript>Hello,\x20\xe4\xb8\x96\xe7\x95\x8c</noscript></pre>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\"Playground-controls\">\x0a\x20\x20\x20\x20\x20\x20<select\x20class=\"Playground-selectExample\x20js-playgroundToysEl\"\x20aria-label=\"Code\x20examples\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"hello.go\">Hello,\x20World!</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"life.go\">Conway's\x20Game\x20of\x20Life</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"fib.go\">Fibonacci\x20Closure</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"peano.go\">Peano\x20Integers</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"pi.go\">Concurrent\x20pi</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"sieve.go\">Concurrent\x20Prime\x20Sieve</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"solitaire.go\">Peg\x20Solitaire\x20Solver</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\"tree.go\">Tree\x20Comparison</option>\x0a\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\"Playground-buttons\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\"Button\x20Button--primary\x20js-playgroundRunEl\"\x20title=\"Run\x20this\x20code\x20[shift-enter]\">Run</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\"Playground-secondaryButtons\">\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\x20js-playgroundShareEl\"\x20title=\"Share\x20this\x20code\">Share</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\"Button\x20tour\"\x20href=\"https://tour.golang.org/\"\x20title=\"Playground\x20Go\x20from\x20your\x20browser\">Tour</a>\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</div>\x0a\x20\x20</section>\x0a\x0a\x20\x20{{if\x20not\x20$.GoogleCN}}\x0a\x20\x20\x20\x20<section\x20class=\"HomeSection\x20Blog\x20js-blogContainerEl\">\x0a\x20\x20\x20\x20\x20\x20<h2\x20class=\"HomeSection-header\">Featured\x20articles</h2>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\"Blog-footer\x20js-blogFooterEl\"><a\x20class=\"Button\x20Button--primary\"\x20href=\"https://blog.golang.org/\">Read\x20more\x20&gt;</a></div>\x0a\x20\x20\x20\x20</section>\x0a\x0a\x20\x20\x20\x20<section\x20class=\"HomeSection\">\x0a\x20\x20\x20\x20\x20\x20<h2\x20class=\"HomeSection-header\">Featured\x20video</h2>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\"js-videoContainer\"\x20style=\"--aspect-ratio-padding:\x2058.07%;\">\x0a\x20\x20\x20\x20\x20\x20\x20\x20<iframe\x20width=\"415\"\x20height=\"241\"\x20src=\"https://www.youtube.com/embed/cQ7STILAS0M\"\x20frameborder=\"0\"\x20allowfullscreen></iframe>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</section>\x0a\x20\x20{{end}}\x0a</div>\x0a<script>\x0a(function()\x20{\x0a\x20\x20'use\x20strict';\x0a\x0a\x20\x20window.initFuncs.push(function()\x20{\x0a\x20\x20\x20\x20//\x20Set\x20up\x20playground\x20if\x20enabled.\x0a\x20\x20\x20\x20if\x20(window.playground)\x20{\x0a\x20\x20\x20\x20\x20\x20window.playground({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"codeEl\":\x20\x20\x20\x20\x20\x20\x20\x20\".js-playgroundCodeEl\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"outputEl\":\x20\x20\x20\x20\x20\x20\".js-playgroundOutputEl\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"runEl\":\x20\x20\x20\x20\x20\x20\x20\x20\x20\".js-playgroundRunEl\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"shareEl\":\x20\x20\x20\x20\x20\x20\x20\".js-playgroundShareEl\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"shareRedirect\":\x20\"//play.golang.org/p/\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"toysEl\":\x20\x20\x20\x20\x20\x20\x20\x20\".js-playgroundToysEl\"\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20The\x20pre\x20matched\x20below\x20is\x20added\x20by\x20the\x20code\x20above.\x20Style\x20it\x20appropriately.\x0a\x20\x20\x20\x20\x20\x20document.querySelector(\".js-playgroundOutputEl\x20pre\").classList.add(\"Playground-output\");\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20$(\".Playground\").hide();\x0a\x20\x20\x20\x20}\x0a\x20\x20});\x0a\x0a\x20\x20{{if\x20not\x20$.GoogleCN}}\x0a\x20\x20\x20\x20function\x20readableTime(t)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20m\x20=\x20[\"January\",\x20\"February\",\x20\"March\",\x20\"April\",\x20\"May\",\x20\"June\",\x20\"July\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\"August\",\x20\"September\",\x20\"October\",\x20\"November\",\x20\"December\"];\x0a\x20\x20\x20\x20\x20\x20var\x20p\x20=\x20t.substring(0,\x20t.indexOf(\"T\")).split(\"-\");\x0a\x20\x20\x20\x20\x20\x20var\x20d\x20=\x20new\x20Date(p[0],\x20p[1]-1,\x20p[2]);\x0a\x20\x20\x20\x20\x20\x20return\x20d.getDate()\x20+\x20\"\x20\"\x20+\x20m[d.getMonth()]\x20+\x20\"\x20\"\x20+\x20d.getFullYear();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20window.feedLoaded\x20=\x20function(result)\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20read\x20=\x20document.querySelector(\".js-blogFooterEl\");\x0a\x20\x20\x20\x20\x20\x20for\x20(var\x20i\x20=\x200;\x20i\x20<\x20result.length\x20&&\x20i\x20<\x202;\x20i++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20entry\x20=\x20result[i];\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20header\x20=\x20document.createElement(\"h3\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20header.className\x20=\x20\"Blog-title\";\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20titleLink\x20=\x20document.createElement(\"a\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20titleLink.href\x20=\x20entry.Link;\x0a\x20\x20\x20\x20\x20\x20\x20\x20titleLink.rel\x20=\x20\"noopener\";\x0a\x20\x20\x20\x20\x20\x20\x20\x20titleLink.textContent\x20=\x20entry.Title;\x0a\x20\x20\x20\x20\x20\x20\x20\x20header.appendChild(titleLink);\x0a\x20\x20\x20\x20\x20\x20\x20\x20read.parentNode.insertBefore(header,\x20read);\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20extract\x20=\x20document.createElement(\"div\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20extract.className\x20=\x20\"Blog-extract\";\x0a\x20\x20\x20\x20\x20\x20\x20\x20extract.innerHTML\x20=\x20entry.Summary;\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ensure\x20any\x20cross-origin\x20links\x20have\x20rel=noopener\x20set.\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20links\x20=\x20extract.querySelectorAll(\"a\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(var\x20j\x20=\x200;\x20j\x20<\x20links.length;\x20j++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20links[j].rel\x20=\x20\"noopener\";\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20links[j].classList.add(\"Blog-link\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20read.parentNode.insertBefore(extract,\x20read);\x0a\x20\x20\x20\x20\x20\x20\x20\x20var\x20when\x20=\x20document.createElement(\"div\");\x0a\x20\x20\x20\x20\x20\x20\x20\x20when.className\x20=\x20\"Blog-when\";\x0a\x20\x20\x20\x20\x20\x20\x20\x20when.textContent\x20=\x20\"Published\x20\"\x20+\x20readableTime(entry.Time);\x0a\x20\x20\x20\x20\x20\x20\x20\x20read.parentNode.insertBefore(when,\x20read);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20window.initFuncs.push(function()\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Load\x20blog\x20feed.\x0a\x20\x20\x20\x20\x20\x20$(\"<script/>\")\x0a\x20\x20\x20\x20\x20\x20\x20\x20.attr(\"src\",\x20\"//blog.golang.org/.json?jsonp=feedLoaded\")\x0a\x20\x20\x20\x20\x20\x20\x20\x20.appendTo(\"body\");\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Set\x20the\x20video\x20at\x20random.\x0a\x20\x20\x20\x20\x20\x20var\x20videos\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20s:\x20\"https://www.youtube.com/embed/rFejpH_tAHM\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"dotGo\x202015\x20-\x20Rob\x20Pike\x20-\x20Simplicity\x20is\x20Complicated\",\x0a\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\x20\x20\x20s:\x20\"https://www.youtube.com/embed/0ReKdcpNyQg\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"GopherCon\x202015:\x20Robert\x20Griesemer\x20-\x20The\x20Evolution\x20of\x20Go\",\x0a\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\x20\x20\x20s:\x20\"https://www.youtube.com/embed/sX8r6zATHGU\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"Steve\x20Francia\x20-\x20Go:\x20building\x20on\x20the\x20shoulders\x20of\x20giants\x20and\x20stepping\x20on\x20a\x20few\x20toes\",\x0a\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\x20\x20\x20s:\x20\"https://www.youtube.com/embed/rWJHbh6qO_Y\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"Brad\x20Fitzpatrick\x20Go\x201.11\x20and\x20beyond\",\x0a\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\x20\x20\x20s:\x20\"https://www.youtube.com/embed/bmZNaUcwBt4\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"The\x20Why\x20of\x20Go\",\x0a\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\x20\x20\x20s:\x20\"https://www.youtube.com/embed/0Zbh_vmAKvk\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title:\x20\"GopherCon\x202017:\x20Russ\x20Cox\x20-\x20The\x20Future\x20of\x20Go\",\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20];\x0a\x20\x20\x20\x20\x20\x20var\x20v\x20=\x20videos[Math.floor(Math.random()*videos.length)];\x0a\x20\x20\x20\x20\x20\x20$(\".js-videoContainer\x20iframe\").attr(\"src\",\x20v.s).attr(\"title\",\x20v.title);\x0a\x20\x20\x20\x20});\x0a\x20\x20{{end}}\x20{{/*\x20if\x20not\x20.GoogleCN\x20*/}}\x0a})();\x0a</script>\x0a",
 
 	"doc/security.html": "<!--{\x0a\x09\"Title\":\x20\"Go\x20Security\x20Policy\",\x0a\x09\"Path\":\x20\x20\"/security\",\x0a\x09\"Template\":\x20true\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\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\x0abIs=\x0a=Nx85\x0a-----END\x20PGP\x20PUBLIC\x20KEY\x20BLOCK-----\x0a</pre>\x0a",