From 0c2f86a5685f4bf1677746446af604a19178b4dc Mon Sep 17 00:00:00 2001 From: Jamal Carvalho Date: Tue, 26 Jan 2021 11:17:53 -0500 Subject: [PATCH] content,internal: move HaTS trigger to download doc pages Moves the HaTS trigger to the install doc pages so that surveys will prompt while file downloads are in progress. Change-Id: I9437909c96907740fa21a0176d86b6adfe45d574 Reviewed-on: https://go-review.googlesource.com/c/website/+/286775 Reviewed-by: Alexander Rakoczy Trust: Jamal Carvalho --- content/static/doc/hats.js | 62 ++++++++++++++++++++++++++++++ content/static/doc/install.html | 1 + content/static/internal/gen/gen.go | 1 + content/static/static.go | 4 +- internal/dl/tmpl.go | 60 ----------------------------- 5 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 content/static/doc/hats.js diff --git a/content/static/doc/hats.js b/content/static/doc/hats.js new file mode 100644 index 00000000..6be29db7 --- /dev/null +++ b/content/static/doc/hats.js @@ -0,0 +1,62 @@ +/** + * @license + * Copyright 2021 The Go Authors. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ + +(function () { + var cookieName = 'HaTS_BKT_DIST'; + var inBucket; + + var cookies = decodeURIComponent(document.cookie).split(';'); + + for (let i = 0; i < cookies.length; i++) { + var c = cookies[i]; + + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + + if (c.indexOf(cookieName + '=') == 0) { + inBucket = c.substring((cookieName + '=').length, c.length); + } + } + + if (typeof inBucket === 'undefined') { + inBucket = String(Math.random() < 0.01); + document.cookie = + cookieName + '=' + inBucket + '; path=/; max-age=2592000;'; + } + + if (inBucket === 'true') { + document.cookie = cookieName + '=false ; path=/; max-age=2592000;'; + + var tag = document.createElement('script'); + tag.src = + 'https://www.gstatic.com/feedback/js/help/prod/service/lazy.min.js'; + tag.type = 'text/javascript'; + document.head.appendChild(tag); + + tag.onload = function () { + var helpApi = window.help.service.Lazy.create(0, { + apiKey: 'AIzaSyDfBPfajByU2G6RAjUf5sjkMSSLNTj7MMc', + locale: 'en-US', + }); + + helpApi.requestSurvey({ + triggerId: 'dz6fkRxyz0njVvnD1rP0QxCXzhSX', + callback: function (requestSurveyCallbackParam) { + if (!requestSurveyCallbackParam.surveyData) { + return; + } + helpApi.presentSurvey({ + surveyData: requestSurveyCallbackParam.surveyData, + colorScheme: 1, // light + customZIndex: 10000, + }); + }, + }); + }; + } +})(); diff --git a/content/static/doc/install.html b/content/static/doc/install.html index b7594570..29f7025d 100644 --- a/content/static/doc/install.html +++ b/content/static/doc/install.html @@ -202,3 +202,4 @@ $ go version

+ diff --git a/content/static/internal/gen/gen.go b/content/static/internal/gen/gen.go index b99a0baa..04f4d6c5 100644 --- a/content/static/internal/gen/gen.go +++ b/content/static/internal/gen/gen.go @@ -51,6 +51,7 @@ var files = []string{ "doc/docs.html", "doc/download.js", "doc/gopath_code.html", + "doc/hats.js", "doc/install.html", "doc/install-source.html", "doc/manage-install.html", diff --git a/content/static/static.go b/content/static/static.go index 092424dd..c07a6e66 100644 --- a/content/static/static.go +++ b/content/static/static.go @@ -65,7 +65,9 @@ var Files = map[string]string{ "doc/gopath_code.html": "\x0a\x0aIntroduction\x0a\x0a

\x0aIf\x20you\x20are\x20new\x20to\x20Go,\x20please\x20see\x20the\x20more\x20recent\x0aHow\x20to\x20Write\x20Go\x20Code.\x0a

\x0a\x0a

\x0aThis\x20document\x20demonstrates\x20the\x20development\x20of\x20a\x20simple\x20Go\x20package\x20and\x0aintroduces\x20the\x20go\x20tool,\x20the\x20standard\x20way\x20to\x20fetch,\x0abuild,\x20and\x20install\x20Go\x20packages\x20and\x20commands.\x0a

\x0a\x0a

\x0aThe\x20go\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

\x0a\x0a

\x0aA\x20similar\x20explanation\x20is\x20available\x20as\x20a\x0ascreencast.\x0a

\x0a\x0a\x0aCode\x20organization\x0a\x0aOverview\x0a\x0a
    \x0a\x09
  • Go\x20programmers\x20typically\x20keep\x20all\x20their\x20Go\x20code\x20in\x20a\x20single\x20workspace.
  • \x0a\x09
  • A\x20workspace\x20contains\x20many\x20version\x20control\x20repositories\x0a\x09\x20\x20\x20\x20(managed\x20by\x20Git,\x20for\x20example).
  • \x0a\x09
  • Each\x20repository\x20contains\x20one\x20or\x20more\x20packages.
  • \x0a\x09
  • Each\x20package\x20consists\x20of\x20one\x20or\x20more\x20Go\x20source\x20files\x20in\x20a\x20single\x20directory.
  • \x0a\x09
  • The\x20path\x20to\x20a\x20package's\x20directory\x20determines\x20its\x20import\x20path.
  • \x0a
\x0a\x0a

\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

\x0a\x0aWorkspaces\x0a\x0a

\x0aA\x20workspace\x20is\x20a\x20directory\x20hierarchy\x20with\x20two\x20directories\x20at\x20its\x20root:\x0a

\x0a\x0a
    \x0a
  • src\x20contains\x20Go\x20source\x20files,\x20and\x0a
  • bin\x20contains\x20executable\x20commands.\x0a
\x0a\x0a

\x0aThe\x20go\x20tool\x20builds\x20and\x20installs\x20binaries\x20to\x20the\x20bin\x20directory.\x0a

\x0a\x0a

\x0aThe\x20src\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

\x0a\x0a

\x0aTo\x20give\x20you\x20an\x20idea\x20of\x20how\x20a\x20workspace\x20looks\x20in\x20practice,\x20here's\x20an\x20example:\x0a

\x0a\x0a
\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\x20github.com/golang/example/\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\x20golang.org/x/image/\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
\x0a\x0a

\x0aThe\x20tree\x20above\x20shows\x20a\x20workspace\x20containing\x20two\x20repositories\x0a(example\x20and\x20image).\x0aThe\x20example\x20repository\x20contains\x20two\x20commands\x20(hello\x0aand\x20outyet)\x20and\x20one\x20library\x20(stringutil).\x0aThe\x20image\x20repository\x20contains\x20the\x20bmp\x20package\x0aand\x20several\x20others.\x0a

\x0a\x0a

\x0aA\x20typical\x20workspace\x20contains\x20many\x20source\x20repositories\x20containing\x20many\x0apackages\x20and\x20commands.\x20Most\x20Go\x20programmers\x20keep\x20all\x20their\x20Go\x20source\x20code\x0aand\x20dependencies\x20in\x20a\x20single\x20workspace.\x0a

\x0a\x0a

\x0aNote\x20that\x20symbolic\x20links\x20should\x20not\x20be\x20used\x20to\x20link\x20files\x20or\x20directories\x20into\x20your\x20workspace.\x0a

\x0a\x0a

\x0aCommands\x20and\x20libraries\x20are\x20built\x20from\x20different\x20kinds\x20of\x20source\x20packages.\x0aWe\x20will\x20discuss\x20the\x20distinction\x20later.\x0a

\x0a\x0a\x0aThe\x20GOPATH\x20environment\x20variable\x0a\x0a

\x0aThe\x20GOPATH\x20environment\x20variable\x20specifies\x20the\x20location\x20of\x20your\x0aworkspace.\x20It\x20defaults\x20to\x20a\x20directory\x20named\x20go\x20inside\x20your\x20home\x20directory,\x0aso\x20$HOME/go\x20on\x20Unix,\x0a$home/go\x20on\x20Plan\x209,\x0aand\x20%USERPROFILE%\\go\x20(usually\x20C:\\Users\\YourName\\go)\x20on\x20Windows.\x0a

\x0a\x0a

\x0aIf\x20you\x20would\x20like\x20to\x20work\x20in\x20a\x20different\x20location,\x20you\x20will\x20need\x20to\x0aset\x20GOPATH\x0ato\x20the\x20path\x20to\x20that\x20directory.\x0a(Another\x20common\x20setup\x20is\x20to\x20set\x20GOPATH=$HOME.)\x0aNote\x20that\x20GOPATH\x20must\x20not\x20be\x20the\x0asame\x20path\x20as\x20your\x20Go\x20installation.\x0a

\x0a\x0a

\x0aThe\x20command\x20go\x20env\x20GOPATH\x0aprints\x20the\x20effective\x20current\x20GOPATH;\x0ait\x20prints\x20the\x20default\x20location\x20if\x20the\x20environment\x20variable\x20is\x20unset.\x0a

\x0a\x0a

\x0aFor\x20convenience,\x20add\x20the\x20workspace's\x20bin\x20subdirectory\x0ato\x20your\x20PATH:\x0a

\x0a\x0a
\x0a$\x20export\x20PATH=$PATH:$(go\x20env\x20GOPATH)/bin\x0a
\x0a\x0a

\x0aThe\x20scripts\x20in\x20the\x20rest\x20of\x20this\x20document\x20use\x20$GOPATH\x0ainstead\x20of\x20$(go\x20env\x20GOPATH)\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

\x0a\x0a
\x0a$\x20export\x20GOPATH=$(go\x20env\x20GOPATH)\x0a
\x0a\x0a

\x0aTo\x20learn\x20more\x20about\x20the\x20GOPATH\x20environment\x20variable,\x20see\x0a'go\x20help\x20gopath'.\x0a

\x0a\x0aImport\x20paths\x0a\x0a

\x0aAn\x20import\x20path\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

\x0a\x0a

\x0aThe\x20packages\x20from\x20the\x20standard\x20library\x20are\x20given\x20short\x20import\x20paths\x20such\x20as\x0a\"fmt\"\x20and\x20\"net/http\".\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

\x0a\x0a

\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\x20GitHub\x20account\x20at\x0agithub.com/user,\x20that\x20should\x20be\x20your\x20base\x20path.\x0a

\x0a\x0a

\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

\x0a\x0a

\x0aWe'll\x20use\x20github.com/user\x20as\x20our\x20base\x20path.\x20Create\x20a\x20directory\x0ainside\x20your\x20workspace\x20in\x20which\x20to\x20keep\x20source\x20code:\x0a

\x0a\x0a
\x0a$\x20mkdir\x20-p\x20$GOPATH/src/github.com/user\x0a
\x0a\x0a\x0aYour\x20first\x20program\x0a\x0a

\x0aTo\x20compile\x20and\x20run\x20a\x20simple\x20program,\x20first\x20choose\x20a\x20package\x20path\x20(we'll\x20use\x0agithub.com/user/hello)\x20and\x20create\x20a\x20corresponding\x20package\x20directory\x0ainside\x20your\x20workspace:\x0a

\x0a\x0a
\x0a$\x20mkdir\x20$GOPATH/src/github.com/user/hello\x0a
\x0a\x0a

\x0aNext,\x20create\x20a\x20file\x20named\x20hello.go\x20inside\x20that\x20directory,\x0acontaining\x20the\x20following\x20Go\x20code.\x0a

\x0a\x0a
\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(\"Hello,\x20world.\")\x0a}\x0a
\x0a\x0a

\x0aNow\x20you\x20can\x20build\x20and\x20install\x20that\x20program\x20with\x20the\x20go\x20tool:\x0a

\x0a\x0a
\x0a$\x20go\x20install\x20github.com/user/hello\x0a
\x0a\x0a

\x0aNote\x20that\x20you\x20can\x20run\x20this\x20command\x20from\x20anywhere\x20on\x20your\x20system.\x20The\x0ago\x20tool\x20finds\x20the\x20source\x20code\x20by\x20looking\x20for\x20the\x0agithub.com/user/hello\x20package\x20inside\x20the\x20workspace\x20specified\x20by\x0aGOPATH.\x0a

\x0a\x0a

\x0aYou\x20can\x20also\x20omit\x20the\x20package\x20path\x20if\x20you\x20run\x20go\x20install\x20from\x20the\x0apackage\x20directory:\x0a

\x0a\x0a
\x0a$\x20cd\x20$GOPATH/src/github.com/user/hello\x0a$\x20go\x20install\x0a
\x0a\x0a

\x0aThis\x20command\x20builds\x20the\x20hello\x20command,\x20producing\x20an\x20executable\x0abinary.\x20It\x20then\x20installs\x20that\x20binary\x20to\x20the\x20workspace's\x20bin\x0adirectory\x20as\x20hello\x20(or,\x20under\x20Windows,\x20hello.exe).\x0aIn\x20our\x20example,\x20that\x20will\x20be\x20$GOPATH/bin/hello,\x20which\x20is\x0a$HOME/go/bin/hello.\x0a

\x0a\x0a

\x0aThe\x20go\x20tool\x20will\x20only\x20print\x20output\x20when\x20an\x20error\x20occurs,\x20so\x20if\x0athese\x20commands\x20produce\x20no\x20output\x20they\x20have\x20executed\x20successfully.\x0a

\x0a\x0a

\x0aYou\x20can\x20now\x20run\x20the\x20program\x20by\x20typing\x20its\x20full\x20path\x20at\x20the\x20command\x20line:\x0a

\x0a\x0a
\x0a$\x20$GOPATH/bin/hello\x0aHello,\x20world.\x0a
\x0a\x0a

\x0aOr,\x20as\x20you\x20have\x20added\x20$GOPATH/bin\x20to\x20your\x20PATH,\x0ajust\x20type\x20the\x20binary\x20name:\x0a

\x0a\x0a
\x0a$\x20hello\x0aHello,\x20world.\x0a
\x0a\x0a

\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

\x0a\x0a
\x0a$\x20cd\x20$GOPATH/src/github.com/user/hello\x0a$\x20git\x20init\x0aInitialized\x20empty\x20Git\x20repository\x20in\x20/home/user/go/src/github.com/user/hello/.git/\x0a$\x20git\x20add\x20hello.go\x0a$\x20git\x20commit\x20-m\x20\"initial\x20commit\"\x0a[master\x20(root-commit)\x200b4507d]\x20initial\x20commit\x0a\x201\x20file\x20changed,\x207\x20insertion(+)\x0a\x20create\x20mode\x20100644\x20hello.go\x0a
\x0a\x0a

\x0aPushing\x20the\x20code\x20to\x20a\x20remote\x20repository\x20is\x20left\x20as\x20an\x20exercise\x20for\x20the\x20reader.\x0a

\x0a\x0a\x0aYour\x20first\x20library\x0a\x0a

\x0aLet's\x20write\x20a\x20library\x20and\x20use\x20it\x20from\x20the\x20hello\x20program.\x0a

\x0a\x0a

\x0aAgain,\x20the\x20first\x20step\x20is\x20to\x20choose\x20a\x20package\x20path\x20(we'll\x20use\x0agithub.com/user/stringutil)\x20and\x20create\x20the\x20package\x20directory:\x0a

\x0a\x0a
\x0a$\x20mkdir\x20$GOPATH/src/github.com/user/stringutil\x0a
\x0a\x0a

\x0aNext,\x20create\x20a\x20file\x20named\x20reverse.go\x20in\x20that\x20directory\x20with\x20the\x0afollowing\x20contents.\x0a

\x0a\x0a
\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<\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
\x0a\x0a

\x0aNow,\x20test\x20that\x20the\x20package\x20compiles\x20with\x20go\x20build:\x0a

\x0a\x0a
\x0a$\x20go\x20build\x20github.com/user/stringutil\x0a
\x0a\x0a

\x0aOr,\x20if\x20you\x20are\x20working\x20in\x20the\x20package's\x20source\x20directory,\x20just:\x0a

\x0a\x0a
\x0a$\x20go\x20build\x0a
\x0a\x0a

\x0aThis\x20won't\x20produce\x20an\x20output\x20file.\x0aInstead\x20it\x20saves\x20the\x20compiled\x20package\x20in\x20the\x20local\x20build\x20cache.\x0a

\x0a\x0a

\x0aAfter\x20confirming\x20that\x20the\x20stringutil\x20package\x20builds,\x0amodify\x20your\x20original\x20hello.go\x20(which\x20is\x20in\x0a$GOPATH/src/github.com/user/hello)\x20to\x20use\x20it:\x0a

\x0a\x0a
\x0apackage\x20main\x0a\x0aimport\x20(\x0a\x09\"fmt\"\x0a\x0a\x09\"github.com/user/stringutil\"\x0a)\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Println(stringutil.Reverse(\"!oG\x20,olleH\"))\x0a}\x0a
\x0a\x0a

\x0aInstall\x20the\x20hello\x20program:\x0a

\x0a\x0a
\x0a$\x20go\x20install\x20github.com/user/hello\x0a
\x0a\x0a

\x0aRunning\x20the\x20new\x20version\x20of\x20the\x20program,\x20you\x20should\x20see\x20a\x20new,\x20reversed\x20message:\x0a

\x0a\x0a
\x0a$\x20hello\x0aHello,\x20Go!\x0a
\x0a\x0a

\x0aAfter\x20the\x20steps\x20above,\x20your\x20workspace\x20should\x20look\x20like\x20this:\x0a

\x0a\x0a
\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
\x0a\x0aPackage\x20names\x0a\x0a

\x0aThe\x20first\x20statement\x20in\x20a\x20Go\x20source\x20file\x20must\x20be\x0a

\x0a\x0a
\x0apackage\x20name\x0a
\x0a\x0a

\x0awhere\x20name\x20is\x20the\x20package's\x20default\x20name\x20for\x20imports.\x0a(All\x20files\x20in\x20a\x20package\x20must\x20use\x20the\x20same\x20name.)\x0a

\x0a\x0a

\x0aGo's\x20convention\x20is\x20that\x20the\x20package\x20name\x20is\x20the\x20last\x20element\x20of\x20the\x0aimport\x20path:\x20the\x20package\x20imported\x20as\x20\"crypto/rot13\"\x0ashould\x20be\x20named\x20rot13.\x0a

\x0a\x0a

\x0aExecutable\x20commands\x20must\x20always\x20use\x20package\x20main.\x0a

\x0a\x0a

\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

\x0a\x0a

\x0aSee\x20Effective\x20Go\x20to\x20learn\x20more\x20about\x0aGo's\x20naming\x20conventions.\x0a

\x0a\x0a\x0aTesting\x0a\x0a

\x0aGo\x20has\x20a\x20lightweight\x20test\x20framework\x20composed\x20of\x20the\x20go\x20test\x0acommand\x20and\x20the\x20testing\x20package.\x0a

\x0a\x0a

\x0aYou\x20write\x20a\x20test\x20by\x20creating\x20a\x20file\x20with\x20a\x20name\x20ending\x20in\x20_test.go\x0athat\x20contains\x20functions\x20named\x20TestXXX\x20with\x20signature\x0afunc\x20(t\x20*testing.T).\x0aThe\x20test\x20framework\x20runs\x20each\x20such\x20function;\x0aif\x20the\x20function\x20calls\x20a\x20failure\x20function\x20such\x20as\x20t.Error\x20or\x0at.Fail,\x20the\x20test\x20is\x20considered\x20to\x20have\x20failed.\x0a

\x0a\x0a

\x0aAdd\x20a\x20test\x20to\x20the\x20stringutil\x20package\x20by\x20creating\x20the\x20file\x0a$GOPATH/src/github.com/user/stringutil/reverse_test.go\x20containing\x0athe\x20following\x20Go\x20code.\x0a

\x0a\x0a
\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
\x0a\x0a

\x0aThen\x20run\x20the\x20test\x20with\x20go\x20test:\x0a

\x0a\x0a
\x0a$\x20go\x20test\x20github.com/user/stringutil\x0aok\x20\x20\x09github.com/user/stringutil\x200.165s\x0a
\x0a\x0a

\x0aAs\x20always,\x20if\x20you\x20are\x20running\x20the\x20go\x20tool\x20from\x20the\x20package\x0adirectory,\x20you\x20can\x20omit\x20the\x20package\x20path:\x0a

\x0a\x0a
\x0a$\x20go\x20test\x0aok\x20\x20\x09github.com/user/stringutil\x200.165s\x0a
\x0a\x0a

\x0aRun\x20go\x20help\x20test\x20and\x20see\x20the\x0atesting\x20package\x20documentation\x20for\x20more\x20detail.\x0a

\x0a\x0a\x0aRemote\x20packages\x0a\x0a

\x0aAn\x20import\x20path\x20can\x20describe\x20how\x20to\x20obtain\x20the\x20package\x20source\x20code\x20using\x20a\x0arevision\x20control\x20system\x20such\x20as\x20Git\x20or\x20Mercurial.\x20The\x20go\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\x0agithub.com/golang/example.\x0aIf\x20you\x20include\x20the\x20repository\x20URL\x20in\x20the\x20package's\x20import\x20path,\x0ago\x20get\x20will\x20fetch,\x20build,\x20and\x20install\x20it\x20automatically:\x0a

\x0a\x0a
\x0a$\x20go\x20get\x20github.com/golang/example/hello\x0a$\x20$GOPATH/bin/hello\x0aHello,\x20Go\x20examples!\x0a
\x0a\x0a

\x0aIf\x20the\x20specified\x20package\x20is\x20not\x20present\x20in\x20a\x20workspace,\x20go\x20get\x0awill\x20place\x20it\x20inside\x20the\x20first\x20workspace\x20specified\x20by\x20GOPATH.\x0a(If\x20the\x20package\x20does\x20already\x20exist,\x20go\x20get\x20skips\x20the\x20remote\x0afetch\x20and\x20behaves\x20the\x20same\x20as\x20go\x20install.)\x0a

\x0a\x0a

\x0aAfter\x20issuing\x20the\x20above\x20go\x20get\x20command,\x20the\x20workspace\x20directory\x0atree\x20should\x20now\x20look\x20like\x20this:\x0a

\x0a\x0a
\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
\x0a\x0a

\x0aThe\x20hello\x20command\x20hosted\x20at\x20GitHub\x20depends\x20on\x20the\x0astringutil\x20package\x20within\x20the\x20same\x20repository.\x20The\x20imports\x20in\x0ahello.go\x20file\x20use\x20the\x20same\x20import\x20path\x20convention,\x20so\x20the\x0ago\x20get\x20command\x20is\x20able\x20to\x20locate\x20and\x20install\x20the\x20dependent\x0apackage,\x20too.\x0a

\x0a\x0a
\x0aimport\x20\"github.com/golang/example/stringutil\"\x0a
\x0a\x0a

\x0aThis\x20convention\x20is\x20the\x20easiest\x20way\x20to\x20make\x20your\x20Go\x20packages\x20available\x20for\x0aothers\x20to\x20use.\x0aPkg.go.dev\x0aand\x20the\x20Go\x20Wiki\x0aprovide\x20lists\x20of\x20external\x20Go\x20projects.\x0a

\x0a\x0a

\x0aFor\x20more\x20information\x20on\x20using\x20remote\x20repositories\x20with\x20the\x20go\x20tool,\x20see\x0ago\x20help\x20importpath.\x0a

\x0a\x0a\x0aWhat's\x20next\x0a\x0a

\x0aSubscribe\x20to\x20the\x0agolang-announce\x0amailing\x20list\x20to\x20be\x20notified\x20when\x20a\x20new\x20stable\x20version\x20of\x20Go\x20is\x20released.\x0a

\x0a\x0a

\x0aSee\x20Effective\x20Go\x20for\x20tips\x20on\x20writing\x0aclear,\x20idiomatic\x20Go\x20code.\x0a

\x0a\x0a

\x0aTake\x20A\x20Tour\x20of\x20Go\x20to\x20learn\x20the\x20language\x0aproper.\x0a

\x0a\x0a

\x0aVisit\x20the\x20documentation\x20page\x20for\x20a\x20set\x20of\x20in-depth\x0aarticles\x20about\x20the\x20Go\x20language\x20and\x20its\x20libraries\x20and\x20tools.\x0a

\x0a\x0a\x0aGetting\x20help\x0a\x0a

\x0aFor\x20real-time\x20help,\x20ask\x20the\x20helpful\x20gophers\x20in\x20#go-nuts\x20on\x20the\x0aFreenode\x20IRC\x20server.\x0a

\x0a\x0a

\x0aThe\x20official\x20mailing\x20list\x20for\x20discussion\x20of\x20the\x20Go\x20language\x20is\x0aGo\x20Nuts.\x0a

\x0a\x0a

\x0aReport\x20bugs\x20using\x20the\x0aGo\x20issue\x20tracker.\x0a

\x0a", - "doc/install.html": "\x0a

\x0a\x20\x20Download\x20and\x20install\x20Go\x20quickly\x20with\x20the\x20steps\x20described\x20here.\x0a

\x0a

For\x20other\x20content\x20on\x20installing,\x20you\x20might\x20be\x20interested\x20in:

\x0a
    \x0a\x20\x20
  • \x0a\x20\x20\x20\x20Managing\x20Go\x20installations\x20--\x20How\x20to\x0a\x20\x20\x20\x20install\x20multiple\x20versions\x20and\x20uninstall.\x0a\x20\x20
  • \x0a\x20\x20
  • \x0a\x20\x20\x20\x20Installing\x20Go\x20from\x20source\x20--\x20How\x20to\x0a\x20\x20\x20\x20check\x20out\x20the\x20sources,\x20build\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.\x0a\x20\x20
  • \x0a
\x0a1.\x20Go\x20download.\x0a

\x0a\x20\x20Click\x20the\x20button\x20below\x20to\x20download\x20the\x20Go\x20installer.\x0a

\x0a

\x0a\x20\x20\x0a\x20\x20\x20\x20Download\x20Go\x0a\x20\x20\x20\x20\x0a\x20\x20\x0a

\x0a

\x0a\x20\x20Don't\x20see\x20your\x20operating\x20system\x20here?\x20Try\x20one\x20of\x20the\x0a\x20\x20other\x20downloads.\x0a

\x0a\x0a\x20\x20Note:\x20By\x20default,\x20the\x20go\x20command\x20downloads\x20and\x0a\x20\x20authenticates\x20modules\x20using\x20the\x20Go\x20module\x20mirror\x20and\x20Go\x20checksum\x20database\x0a\x20\x20run\x20by\x20Google.\x20Learn\x20more.\x0a\x0a2.\x20Go\x20install.\x0a

\x0a\x20\x20Select\x20the\x20tab\x20for\x20your\x20computer's\x20operating\x20system\x20below,\x20then\x20follow\x20its\x0a\x20\x20installation\x20instructions.\x0a

\x0a\x0a\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Linux\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Mac\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Windows\x0a\x20\x20\x20\x20\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x20\x20If\x20you\x20have\x20a\x20previous\x20version\x20of\x20Go\x20installed,\x20be\x20sure\x20to\x0a\x20\x20\x20\x20\x20\x20remove\x20it\x20before\x20installing\x20another.\x0a\x20\x20\x20\x20

\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Download\x20the\x20archive\x20and\x20extract\x20it\x20into\x20/usr/local,\x20creating\x20a\x20Go\x20tree\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20/usr/local/go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20For\x20example,\x20run\x20the\x20following\x20as\x20root\x20or\x20through\x20sudo:\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0atar\x20-C\x20/usr/local\x20-xzf\x20go1.14.3.linux-amd64.tar.gz\x0a\x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20/usr/local/go/bin\x20to\x20the\x20PATH\x20environment\x20variable.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20You\x20can\x20do\x20this\x20by\x20adding\x20the\x20following\x20line\x20to\x20your\x20$HOME/.profile\x20or\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/etc/profile\x20(for\x20a\x20system-wide\x20installation):\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0aexport\x20PATH=$PATH:/usr/local/go/bin\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Note:\x20Changes\x20made\x20to\x20a\x20profile\x20file\x20may\x20not\x20apply\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20until\x20the\x20next\x20time\x20you\x20log\x20into\x20your\x20computer.\x20To\x20apply\x20the\x20changes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20immediately,\x20just\x20run\x20the\x20shell\x20commands\x20directly\x20or\x20execute\x20them\x20from\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20profile\x20using\x20a\x20command\x20such\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20$HOME/.profile.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20\x20\x20
  5. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20
  6. \x0a\x20\x20\x20\x20\x20\x20
  7. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
  8. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20package\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x0a\x20\x20\x20\x20\x20\x20\x20\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20package\x20installs\x20the\x20Go\x20distribution\x20to\x20/usr/local/go.\x20The\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20should\x20put\x20the\x20/usr/local/go/bin\x20directory\x20in\x20your\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PATH\x20environment\x20variable.\x20You\x20may\x20need\x20to\x20restart\x20any\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20open\x20Terminal\x20sessions\x20for\x20the\x20change\x20to\x20take\x20effect.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20\x20\x20
  5. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
  6. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20MSI\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20By\x20default,\x20the\x20installer\x20will\x20install\x20Go\x20to\x20C:\\Go.\x20You\x20can\x20change\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20location\x20as\x20needed.\x20After\x20installing,\x20you\x20will\x20need\x20to\x20close\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reopen\x20any\x20open\x20command\x20prompts\x20so\x20that\x20changes\x20to\x20the\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20made\x20by\x20the\x20installer\x20are\x20reflected\x20at\x20the\x20command\x20prompt.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20
      \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20Windows,\x20click\x20the\x20Start\x20menu.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    2. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20menu's\x20search\x20box,\x20type\x20cmd,\x20then\x20press\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Enter\x20key.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    4. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    5. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20Command\x20Prompt\x20window\x20that\x20appears,\x20type\x20the\x20following\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
      \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    6. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    7. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
    8. \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x0a3.\x20Go\x20code.\x0a

\x0a\x20\x20You're\x20set\x20up!\x20Visit\x20the\x0a\x20\x20Getting\x20Started\x20tutorial\x20to\x20write\x0a\x20\x20some\x20simple\x20Go\x20code.\x20It\x20takes\x20about\x2010\x20minutes\x20to\x20complete.\x0a

\x0a\x0a\x0a", + "doc/hats.js": "(function\x20()\x20{\x0a\x20\x20var\x20cookieName\x20=\x20'HaTS_BKT_DIST';\x0a\x20\x20var\x20inBucket;\x0a\x0a\x20\x20var\x20cookies\x20=\x20decodeURIComponent(document.cookie).split(';');\x0a\x0a\x20\x20for\x20(let\x20i\x20=\x200;\x20i\x20<\x20cookies.length;\x20i++)\x20{\x0a\x20\x20\x20\x20var\x20c\x20=\x20cookies[i];\x0a\x0a\x20\x20\x20\x20while\x20(c.charAt(0)\x20==\x20'\x20')\x20{\x0a\x20\x20\x20\x20\x20\x20c\x20=\x20c.substring(1);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(c.indexOf(cookieName\x20+\x20'=')\x20==\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20inBucket\x20=\x20c.substring((cookieName\x20+\x20'=').length,\x20c.length);\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(typeof\x20inBucket\x20===\x20'undefined')\x20{\x0a\x20\x20\x20\x20inBucket\x20=\x20String(Math.random()\x20<\x200.01);\x0a\x20\x20\x20\x20document.cookie\x20=\x0a\x20\x20\x20\x20\x20\x20cookieName\x20+\x20'='\x20+\x20inBucket\x20+\x20';\x20path=/;\x20max-age=2592000;';\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(inBucket\x20===\x20'true')\x20{\x0a\x20\x20\x20\x20document.cookie\x20=\x20cookieName\x20+\x20'=false\x20;\x20path=/;\x20max-age=2592000;';\x0a\x0a\x20\x20\x20\x20var\x20tag\x20=\x20document.createElement('script');\x0a\x20\x20\x20\x20tag.src\x20=\x0a\x20\x20\x20\x20\x20\x20'https://www.gstatic.com/feedback/js/help/prod/service/lazy.min.js';\x0a\x20\x20\x20\x20tag.type\x20=\x20'text/javascript';\x0a\x20\x20\x20\x20document.head.appendChild(tag);\x0a\x0a\x20\x20\x20\x20tag.onload\x20=\x20function\x20()\x20{\x0a\x20\x20\x20\x20\x20\x20var\x20helpApi\x20=\x20window.help.service.Lazy.create(0,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20apiKey:\x20'AIzaSyDfBPfajByU2G6RAjUf5sjkMSSLNTj7MMc',\x0a\x20\x20\x20\x20\x20\x20\x20\x20locale:\x20'en-US',\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20helpApi.requestSurvey({\x0a\x20\x20\x20\x20\x20\x20\x20\x20triggerId:\x20'dz6fkRxyz0njVvnD1rP0QxCXzhSX',\x0a\x20\x20\x20\x20\x20\x20\x20\x20callback:\x20function\x20(requestSurveyCallbackParam)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!requestSurveyCallbackParam.surveyData)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20helpApi.presentSurvey({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20surveyData:\x20requestSurveyCallbackParam.surveyData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20colorScheme:\x201,\x20//\x20light\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20customZIndex:\x2010000,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a})();\x0a", + + "doc/install.html": "\x0a

\x0a\x20\x20Download\x20and\x20install\x20Go\x20quickly\x20with\x20the\x20steps\x20described\x20here.\x0a

\x0a

For\x20other\x20content\x20on\x20installing,\x20you\x20might\x20be\x20interested\x20in:

\x0a
    \x0a\x20\x20
  • \x0a\x20\x20\x20\x20Managing\x20Go\x20installations\x20--\x20How\x20to\x0a\x20\x20\x20\x20install\x20multiple\x20versions\x20and\x20uninstall.\x0a\x20\x20
  • \x0a\x20\x20
  • \x0a\x20\x20\x20\x20Installing\x20Go\x20from\x20source\x20--\x20How\x20to\x0a\x20\x20\x20\x20check\x20out\x20the\x20sources,\x20build\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.\x0a\x20\x20
  • \x0a
\x0a1.\x20Go\x20download.\x0a

\x0a\x20\x20Click\x20the\x20button\x20below\x20to\x20download\x20the\x20Go\x20installer.\x0a

\x0a

\x0a\x20\x20\x0a\x20\x20\x20\x20Download\x20Go\x0a\x20\x20\x20\x20\x0a\x20\x20\x0a

\x0a

\x0a\x20\x20Don't\x20see\x20your\x20operating\x20system\x20here?\x20Try\x20one\x20of\x20the\x0a\x20\x20other\x20downloads.\x0a

\x0a\x0a\x20\x20Note:\x20By\x20default,\x20the\x20go\x20command\x20downloads\x20and\x0a\x20\x20authenticates\x20modules\x20using\x20the\x20Go\x20module\x20mirror\x20and\x20Go\x20checksum\x20database\x0a\x20\x20run\x20by\x20Google.\x20Learn\x20more.\x0a\x0a2.\x20Go\x20install.\x0a

\x0a\x20\x20Select\x20the\x20tab\x20for\x20your\x20computer's\x20operating\x20system\x20below,\x20then\x20follow\x20its\x0a\x20\x20installation\x20instructions.\x0a

\x0a\x0a\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Linux\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Mac\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20Windows\x0a\x20\x20\x20\x20\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20

\x0a\x20\x20\x20\x20\x20\x20If\x20you\x20have\x20a\x20previous\x20version\x20of\x20Go\x20installed,\x20be\x20sure\x20to\x0a\x20\x20\x20\x20\x20\x20remove\x20it\x20before\x20installing\x20another.\x0a\x20\x20\x20\x20

\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Download\x20the\x20archive\x20and\x20extract\x20it\x20into\x20/usr/local,\x20creating\x20a\x20Go\x20tree\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20/usr/local/go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20For\x20example,\x20run\x20the\x20following\x20as\x20root\x20or\x20through\x20sudo:\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0atar\x20-C\x20/usr/local\x20-xzf\x20go1.14.3.linux-amd64.tar.gz\x0a\x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Add\x20/usr/local/go/bin\x20to\x20the\x20PATH\x20environment\x20variable.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20You\x20can\x20do\x20this\x20by\x20adding\x20the\x20following\x20line\x20to\x20your\x20$HOME/.profile\x20or\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/etc/profile\x20(for\x20a\x20system-wide\x20installation):\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0aexport\x20PATH=$PATH:/usr/local/go/bin\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Note:\x20Changes\x20made\x20to\x20a\x20profile\x20file\x20may\x20not\x20apply\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20until\x20the\x20next\x20time\x20you\x20log\x20into\x20your\x20computer.\x20To\x20apply\x20the\x20changes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20immediately,\x20just\x20run\x20the\x20shell\x20commands\x20directly\x20or\x20execute\x20them\x20from\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20the\x20profile\x20using\x20a\x20command\x20such\x20as\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20$HOME/.profile.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20\x20\x20
  5. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20
  6. \x0a\x20\x20\x20\x20\x20\x20
  7. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
  8. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20package\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x0a\x20\x20\x20\x20\x20\x20\x20\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20The\x20package\x20installs\x20the\x20Go\x20distribution\x20to\x20/usr/local/go.\x20The\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20should\x20put\x20the\x20/usr/local/go/bin\x20directory\x20in\x20your\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20PATH\x20environment\x20variable.\x20You\x20may\x20need\x20to\x20restart\x20any\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20open\x20Terminal\x20sessions\x20for\x20the\x20change\x20to\x20take\x20effect.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go\x20by\x20opening\x20a\x20command\x20prompt\x20and\x20typing\x0a\x20\x20\x20\x20\x20\x20\x20\x20the\x20following\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20\x20\x20
  5. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
  6. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x20\x20\x0a\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Open\x20the\x20MSI\x20file\x20you\x20downloaded\x20and\x20follow\x20the\x20prompts\x20to\x20install\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20By\x20default,\x20the\x20installer\x20will\x20install\x20Go\x20to\x20C:\\Go.\x20You\x20can\x20change\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20location\x20as\x20needed.\x20After\x20installing,\x20you\x20will\x20need\x20to\x20close\x20and\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reopen\x20any\x20open\x20command\x20prompts\x20so\x20that\x20changes\x20to\x20the\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20made\x20by\x20the\x20installer\x20are\x20reflected\x20at\x20the\x20command\x20prompt.\x0a\x20\x20\x20\x20\x20\x20\x20\x20

    \x0a\x20\x20\x20\x20\x20\x20
  2. \x0a\x20\x20\x20\x20\x20\x20
  3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20Verify\x20that\x20you've\x20installed\x20Go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20
      \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    1. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20Windows,\x20click\x20the\x20Start\x20menu.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    2. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    3. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20menu's\x20search\x20box,\x20type\x20cmd,\x20then\x20press\x20the\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Enter\x20key.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    4. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    5. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20In\x20the\x20Command\x20Prompt\x20window\x20that\x20appears,\x20type\x20the\x20following\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20command:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
      \x0a$\x20go\x20version\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    6. \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    7. Confirm\x20that\x20the\x20command\x20prints\x20the\x20installed\x20version\x20of\x20Go.
    8. \x0a\x20\x20\x20\x20\x20\x20\x20\x20
    \x0a\x20\x20\x20\x20\x20\x20
  4. \x0a\x20\x20\x20\x20
\x0a\x20\x20\x0a\x0a3.\x20Go\x20code.\x0a

\x0a\x20\x20You're\x20set\x20up!\x20Visit\x20the\x0a\x20\x20Getting\x20Started\x20tutorial\x20to\x20write\x0a\x20\x20some\x20simple\x20Go\x20code.\x20It\x20takes\x20about\x2010\x20minutes\x20to\x20complete.\x0a

\x0a\x0a\x0a\x0a", "doc/install-source.html": "\x0a\x0a

This\x20topic\x20describes\x20how\x20to\x20build\x20and\x20run\x20Go\x20from\x20source\x20code.\x20To\x20install\x20with\x20an\x20installer,\x20see\x20Download\x20and\x20install.

\x0a\x0aIntroduction\x0a\x0a

\x0aGo\x20is\x20an\x20open\x20source\x20project,\x20distributed\x20under\x20a\x0aBSD-style\x20license.\x0aThis\x20document\x20explains\x20how\x20to\x20check\x20out\x20the\x20sources,\x0abuild\x20them\x20on\x20your\x20own\x20machine,\x20and\x20run\x20them.\x0a

\x0a\x0a

\x0aMost\x20users\x20don't\x20need\x20to\x20do\x20this,\x20and\x20will\x20instead\x20install\x0afrom\x20precompiled\x20binary\x20packages\x20as\x20described\x20in\x0aDownload\x20and\x20install,\x0aa\x20much\x20simpler\x20process.\x0aIf\x20you\x20want\x20to\x20help\x20develop\x20what\x20goes\x20into\x20those\x20precompiled\x0apackages,\x20though,\x20read\x20on.\x0a

\x0a\x0a\x0a\x0a

\x0aThere\x20are\x20two\x20official\x20Go\x20compiler\x20toolchains.\x0aThis\x20document\x20focuses\x20on\x20the\x20gc\x20Go\x0acompiler\x20and\x20tools.\x0aFor\x20information\x20on\x20how\x20to\x20work\x20on\x20gccgo,\x20a\x20more\x20traditional\x0acompiler\x20using\x20the\x20GCC\x20back\x20end,\x20see\x0aSetting\x20up\x20and\x20using\x20gccgo.\x0a

\x0a\x0a

\x0aThe\x20Go\x20compilers\x20support\x20the\x20following\x20instruction\x20sets:\x0a\x0a

\x0a
\x0a\x20\x20amd64,\x20386\x0a
\x0a
\x0a\x20\x20The\x20x86\x20instruction\x20set,\x2064-\x20and\x2032-bit.\x0a
\x0a
\x0a\x20\x20arm64,\x20arm\x0a
\x0a
\x0a\x20\x20The\x20ARM\x20instruction\x20set,\x2064-bit\x20(AArch64)\x20and\x2032-bit.\x0a
\x0a
\x0a\x20\x20mips64,\x20mips64le,\x20mips,\x20\x20mipsle\x0a
\x0a
\x0a\x20\x20The\x20MIPS\x20instruction\x20set,\x20big-\x20and\x20little-endian,\x2064-\x20and\x2032-bit.\x0a
\x0a
\x0a\x20\x20ppc64,\x20ppc64le\x0a
\x0a
\x0a\x20\x20The\x2064-bit\x20PowerPC\x20instruction\x20set,\x20big-\x20and\x20little-endian.\x0a
\x0a
\x0a\x20\x20riscv64\x0a
\x0a
\x0a\x20\x20The\x2064-bit\x20RISC-V\x20instruction\x20set.\x0a
\x0a
\x0a\x20\x20s390x\x0a
\x0a
\x0a\x20\x20The\x20IBM\x20z/Architecture.\x0a
\x0a
\x0a\x20\x20wasm\x0a
\x0a
\x0a\x20\x20WebAssembly.\x0a
\x0a
\x0a

\x0a\x0a

\x0aThe\x20compilers\x20can\x20target\x20the\x20AIX,\x20Android,\x20DragonFly\x20BSD,\x20FreeBSD,\x0aIllumos,\x20Linux,\x20macOS/iOS\x20(Darwin),\x20NetBSD,\x20OpenBSD,\x20Plan\x209,\x20Solaris,\x0aand\x20Windows\x20operating\x20systems\x20(although\x20not\x20all\x20operating\x20systems\x0asupport\x20all\x20architectures).\x0a

\x0a\x0a

\x0aA\x20list\x20of\x20ports\x20which\x20are\x20considered\x20\"first\x20class\"\x20is\x20available\x20at\x20the\x0afirst\x20class\x20ports\x0awiki\x20page.\x0a

\x0a\x0a

\x0aThe\x20full\x20set\x20of\x20supported\x20combinations\x20is\x20listed\x20in\x20the\x0adiscussion\x20of\x20environment\x20variables\x20below.\x0a

\x0a\x0a

\x0aSee\x20the\x20main\x20installation\x20page\x20for\x20the\x20overall\x20system\x20requirements.\x0aThe\x20following\x20additional\x20constraints\x20apply\x20to\x20systems\x20that\x20can\x20be\x20built\x20only\x20from\x20source:\x0a

\x0a\x0a
    \x0a
  • For\x20Linux\x20on\x20PowerPC\x2064-bit,\x20the\x20minimum\x20supported\x20kernel\x20version\x20is\x202.6.37,\x20meaning\x20that\x0aGo\x20does\x20not\x20support\x20CentOS\x206\x20on\x20these\x20systems.\x0a
  • \x0a
\x0a\x20\x0a\x0a\x0aInstall\x20Go\x20compiler\x20binaries\x20for\x20bootstrap\x0a\x0a

\x0aThe\x20Go\x20toolchain\x20is\x20written\x20in\x20Go.\x20To\x20build\x20it,\x20you\x20need\x20a\x20Go\x20compiler\x20installed.\x0aThe\x20scripts\x20that\x20do\x20the\x20initial\x20build\x20of\x20the\x20tools\x20look\x20for\x20a\x20\"go\"\x20command\x0ain\x20$PATH,\x20so\x20as\x20long\x20as\x20you\x20have\x20Go\x20installed\x20in\x20your\x0asystem\x20and\x20configured\x20in\x20your\x20$PATH,\x20you\x20are\x20ready\x20to\x20build\x20Go\x0afrom\x20source.\x20\x0aOr\x20if\x20you\x20prefer\x20you\x20can\x20set\x20$GOROOT_BOOTSTRAP\x20to\x20the\x0aroot\x20of\x20a\x20Go\x20installation\x20to\x20use\x20to\x20build\x20the\x20new\x20Go\x20toolchain;\x0a$GOROOT_BOOTSTRAP/bin/go\x20should\x20be\x20the\x20go\x20command\x20to\x20use.

\x0a\x0aBootstrap\x20toolchain\x20from\x20binary\x20release\x0a\x0a

\x0aTo\x20use\x20a\x20binary\x20release\x20as\x20a\x20bootstrap\x20toolchain,\x20see\x0athe\x20downloads\x20page\x20or\x20use\x20any\x20other\x0apackaged\x20Go\x20distribution.\x0a

\x0a\x0aBootstrap\x20toolchain\x20from\x20source\x0a\x0a

\x0aTo\x20build\x20a\x20bootstrap\x20toolchain\x20from\x20source,\x20use\x0aeither\x20the\x20git\x20branch\x20release-branch.go1.4\x20or\x0ago1.4-bootstrap-20171003.tar.gz,\x0awhich\x20contains\x20the\x20Go\x201.4\x20source\x20code\x20plus\x20accumulated\x20fixes\x0ato\x20keep\x20the\x20tools\x20running\x20on\x20newer\x20operating\x20systems.\x0a(Go\x201.4\x20was\x20the\x20last\x20distribution\x20in\x20which\x20the\x20toolchain\x20was\x20written\x20in\x20C.)\x0aAfter\x20unpacking\x20the\x20Go\x201.4\x20source,\x20cd\x20to\x0athe\x20src\x20subdirectory,\x20set\x20CGO_ENABLED=0\x20in\x0athe\x20environment,\x20and\x20run\x20make.bash\x20(or,\x0aon\x20Windows,\x20make.bat).\x0a

\x0a\x0a

\x0aOnce\x20the\x20Go\x201.4\x20source\x20has\x20been\x20unpacked\x20into\x20your\x20GOROOT_BOOTSTRAP\x20directory,\x0ayou\x20must\x20keep\x20this\x20git\x20clone\x20instance\x20checked\x20out\x20to\x20branch\x0arelease-branch.go1.4.\x20\x20Specifically,\x20do\x20not\x20attempt\x20to\x20reuse\x0athis\x20git\x20clone\x20in\x20the\x20later\x20step\x20named\x20\"Fetch\x20the\x20repository.\"\x20\x20The\x20go1.4\x0abootstrap\x20toolchain\x20must\x20be\x20able\x20to\x20properly\x20traverse\x20the\x20go1.4\x20sources\x0athat\x20it\x20assumes\x20are\x20present\x20under\x20this\x20repository\x20root.\x0a

\x0a\x0aBootstrap\x20toolchain\x20from\x20cross-compiled\x20source\x0a\x0a

\x0aTo\x20cross-compile\x20a\x20bootstrap\x20toolchain\x20from\x20source,\x20which\x20is\x0anecessary\x20on\x20systems\x20Go\x201.4\x20did\x20not\x20target\x20(for\x0aexample,\x20linux/ppc64le),\x20install\x20Go\x20on\x20a\x20different\x20system\x0aand\x20run\x20bootstrap.bash.\x0a

\x0a\x0a

\x0aWhen\x20run\x20as\x20(for\x20example)\x0a

\x0a\x0a
\x0a$\x20GOOS=linux\x20GOARCH=ppc64\x20./bootstrap.bash\x0a
\x0a\x0a

\x0abootstrap.bash\x20cross-compiles\x20a\x20toolchain\x20for\x20that\x20GOOS/GOARCH\x0acombination,\x20leaving\x20the\x20resulting\x20tree\x20in\x20../../go-${GOOS}-${GOARCH}-bootstrap.\x0aThat\x20tree\x20can\x20be\x20copied\x20to\x20a\x20machine\x20of\x20the\x20given\x20target\x20type\x0aand\x20used\x20as\x20GOROOT_BOOTSTRAP\x20to\x20bootstrap\x20a\x20local\x20build.\x0a

\x0a\x0aBootstrap\x20toolchain\x20using\x20gccgo\x0a\x0a

\x0aTo\x20use\x20gccgo\x20as\x20the\x20bootstrap\x20toolchain,\x20you\x20need\x20to\x20arrange\x0afor\x20$GOROOT_BOOTSTRAP/bin/go\x20to\x20be\x20the\x20go\x20tool\x20that\x20comes\x0aas\x20part\x20of\x20gccgo\x205.\x20For\x20example\x20on\x20Ubuntu\x20Vivid:\x0a

\x0a\x0a
\x0a$\x20sudo\x20apt-get\x20install\x20gccgo-5\x0a$\x20sudo\x20update-alternatives\x20--set\x20go\x20/usr/bin/go-5\x0a$\x20GOROOT_BOOTSTRAP=/usr\x20./make.bash\x0a
\x0a\x0aInstall\x20Git,\x20if\x20needed\x0a\x0a

\x0aTo\x20perform\x20the\x20next\x20step\x20you\x20must\x20have\x20Git\x20installed.\x20(Check\x20that\x20you\x0ahave\x20a\x20git\x20command\x20before\x20proceeding.)\x0a

\x0a\x0a

\x0aIf\x20you\x20do\x20not\x20have\x20a\x20working\x20Git\x20installation,\x0afollow\x20the\x20instructions\x20on\x20the\x0aGit\x20downloads\x20page.\x0a

\x0a\x0a(Optional)\x20Install\x20a\x20C\x20compiler\x0a\x0a

\x0aTo\x20build\x20a\x20Go\x20installation\x0awith\x20cgo\x20support,\x20which\x20permits\x20Go\x0aprograms\x20to\x20import\x20C\x20libraries,\x20a\x20C\x20compiler\x20such\x20as\x20gcc\x0aor\x20clang\x20must\x20be\x20installed\x20first.\x20Do\x20this\x20using\x20whatever\x0ainstallation\x20method\x20is\x20standard\x20on\x20the\x20system.\x0a

\x0a\x0a

\x0aTo\x20build\x20without\x20cgo,\x20set\x20the\x20environment\x20variable\x0aCGO_ENABLED=0\x20before\x20running\x20all.bash\x20or\x0amake.bash.\x0a

\x0a\x0aFetch\x20the\x20repository\x0a\x0a

Change\x20to\x20the\x20directory\x20where\x20you\x20intend\x20to\x20install\x20Go,\x20and\x20make\x20sure\x0athe\x20goroot\x20directory\x20does\x20not\x20exist.\x20Then\x20clone\x20the\x20repository\x0aand\x20check\x20out\x20the\x20latest\x20release\x20tag\x20(go1.12,\x0afor\x20example):

\x0a\x0a
\x0a$\x20git\x20clone\x20https://go.googlesource.com/go\x20goroot\x0a$\x20cd\x20goroot\x0a$\x20git\x20checkout\x20<tag>\x0a
\x0a\x0a\x0aWhere\x20<tag>\x20is\x20the\x20version\x20string\x20of\x20the\x20release.\x0a

\x0a\x0a

Go\x20will\x20be\x20installed\x20in\x20the\x20directory\x20where\x20it\x20is\x20checked\x20out.\x20For\x20example,\x0aif\x20Go\x20is\x20checked\x20out\x20in\x20$HOME/goroot,\x20executables\x20will\x20be\x20installed\x0ain\x20$HOME/goroot/bin.\x20The\x20directory\x20may\x20have\x20any\x20name,\x20but\x20note\x0athat\x20if\x20Go\x20is\x20checked\x20out\x20in\x20$HOME/go,\x20it\x20will\x20conflict\x20with\x0athe\x20default\x20location\x20of\x20$GOPATH.\x0aSee\x20GOPATH\x20below.

\x0a\x0a

\x0aReminder:\x20If\x20you\x20opted\x20to\x20also\x20compile\x20the\x20bootstrap\x20binaries\x20from\x20source\x20(in\x20an\x0aearlier\x20section),\x20you\x20still\x20need\x20to\x20git\x20clone\x20again\x20at\x20this\x20point\x0a(to\x20checkout\x20the\x20latest\x20<tag>),\x20because\x20you\x20must\x20keep\x20your\x0ago1.4\x20repository\x20distinct.\x0a

\x0a\x0a(Optional)\x20Switch\x20to\x20the\x20master\x20branch\x0a\x0a

If\x20you\x20intend\x20to\x20modify\x20the\x20go\x20source\x20code,\x20and\x0acontribute\x20your\x20changes\x0ato\x20the\x20project,\x20then\x20move\x20your\x20repository\x0aoff\x20the\x20release\x20branch,\x20and\x20onto\x20the\x20master\x20(development)\x20branch.\x0aOtherwise,\x20skip\x20this\x20step.

\x0a\x0a
\x0a$\x20git\x20checkout\x20master\x0a
\x0a\x0aInstall\x20Go\x0a\x0a

\x0aTo\x20build\x20the\x20Go\x20distribution,\x20run\x0a

\x0a\x0a
\x0a$\x20cd\x20src\x0a$\x20./all.bash\x0a
\x0a\x0a

\x0a(To\x20build\x20under\x20Windows\x20use\x20all.bat.)\x0a

\x0a\x0a

\x0aIf\x20all\x20goes\x20well,\x20it\x20will\x20finish\x20by\x20printing\x20output\x20like:\x0a

\x0a\x0a
\x0aALL\x20TESTS\x20PASSED\x0a\x0a---\x0aInstalled\x20Go\x20for\x20linux/amd64\x20in\x20/home/you/go.\x0aInstalled\x20commands\x20in\x20/home/you/go/bin.\x0a***\x20You\x20need\x20to\x20add\x20/home/you/go/bin\x20to\x20your\x20$PATH.\x20***\x0a
\x0a\x0a

\x0awhere\x20the\x20details\x20on\x20the\x20last\x20few\x20lines\x20reflect\x20the\x20operating\x20system,\x0aarchitecture,\x20and\x20root\x20directory\x20used\x20during\x20the\x20install.\x0a

\x0a\x0a\x0a

\x0aFor\x20more\x20information\x20about\x20ways\x20to\x20control\x20the\x20build,\x20see\x20the\x20discussion\x20of\x0aenvironment\x20variables\x20below.\x0aall.bash\x20(or\x20all.bat)\x20runs\x20important\x20tests\x20for\x20Go,\x0awhich\x20can\x20take\x20more\x20time\x20than\x20simply\x20building\x20Go.\x20If\x20you\x20do\x20not\x20want\x20to\x20run\x0athe\x20test\x20suite\x20use\x20make.bash\x20(or\x20make.bat)\x0ainstead.\x0a

\x0a\x0a\x0a\x0aTesting\x20your\x20installation\x0a\x0a

\x0aCheck\x20that\x20Go\x20is\x20installed\x20correctly\x20by\x20building\x20a\x20simple\x20program.\x0a

\x0a\x0a

\x0aCreate\x20a\x20file\x20named\x20hello.go\x20and\x20put\x20the\x20following\x20program\x20in\x20it:\x0a

\x0a\x0a
\x0apackage\x20main\x0a\x0aimport\x20\"fmt\"\x0a\x0afunc\x20main()\x20{\x0a\x09fmt.Printf(\"hello,\x20world\\n\")\x0a}\x0a
\x0a\x0a

\x0aThen\x20run\x20it\x20with\x20the\x20go\x20tool:\x0a

\x0a\x0a
\x0a$\x20go\x20run\x20hello.go\x0ahello,\x20world\x0a
\x0a\x0a

\x0aIf\x20you\x20see\x20the\x20\"hello,\x20world\"\x20message\x20then\x20Go\x20is\x20installed\x20correctly.\x0a

\x0a\x0aSet\x20up\x20your\x20work\x20environment\x0a\x0a

\x0aYou're\x20almost\x20done.\x0aYou\x20just\x20need\x20to\x20do\x20a\x20little\x20more\x20setup.\x0a

\x0a\x0a

\x0a\x0aHow\x20to\x20Write\x20Go\x20Code\x0aLearn\x20how\x20to\x20set\x20up\x20and\x20use\x20the\x20Go\x20tools\x0a\x0a

\x0a\x0a

\x0aThe\x20How\x20to\x20Write\x20Go\x20Code\x20document\x0aprovides\x20essential\x20setup\x20instructions\x20for\x20using\x20the\x20Go\x20tools.\x0a

\x0a\x0a\x0aInstall\x20additional\x20tools\x0a\x0a

\x0aThe\x20source\x20code\x20for\x20several\x20Go\x20tools\x20(including\x20godoc)\x0ais\x20kept\x20in\x20the\x20go.tools\x20repository.\x0aTo\x20install\x20one\x20of\x20the\x20tools\x20(godoc\x20in\x20this\x20case):\x0a

\x0a\x0a
\x0a$\x20go\x20get\x20golang.org/x/tools/cmd/godoc\x0a
\x0a\x0a

\x0aTo\x20install\x20these\x20tools,\x20the\x20go\x20get\x20command\x20requires\x0athat\x20Git\x20be\x20installed\x20locally.\x0a

\x0a\x0a

\x0aYou\x20must\x20also\x20have\x20a\x20workspace\x20(GOPATH)\x20set\x20up;\x0asee\x20How\x20to\x20Write\x20Go\x20Code\x20for\x20the\x20details.\x0a

\x0a\x0aCommunity\x20resources\x0a\x0a

\x0aThe\x20usual\x20community\x20resources\x20such\x20as\x0a#go-nuts\x20on\x20the\x20Freenode\x20IRC\x20server\x0aand\x20the\x0aGo\x20Nuts\x0amailing\x20list\x20have\x20active\x20developers\x20that\x20can\x20help\x20you\x20with\x20problems\x0awith\x20your\x20installation\x20or\x20your\x20development\x20work.\x0aFor\x20those\x20who\x20wish\x20to\x20keep\x20up\x20to\x20date,\x0athere\x20is\x20another\x20mailing\x20list,\x20golang-checkins,\x0athat\x20receives\x20a\x20message\x20summarizing\x20each\x20checkin\x20to\x20the\x20Go\x20repository.\x0a

\x0a\x0a

\x0aBugs\x20can\x20be\x20reported\x20using\x20the\x20Go\x20issue\x20tracker.\x0a

\x0a\x0a\x0aKeeping\x20up\x20with\x20releases\x0a\x0a

\x0aNew\x20releases\x20are\x20announced\x20on\x20the\x0agolang-announce\x0amailing\x20list.\x0aEach\x20announcement\x20mentions\x20the\x20latest\x20release\x20tag,\x20for\x20instance,\x0ago1.9.\x0a

\x0a\x0a

\x0aTo\x20update\x20an\x20existing\x20tree\x20to\x20the\x20latest\x20release,\x20you\x20can\x20run:\x0a

\x0a\x0a
\x0a$\x20cd\x20go/src\x0a$\x20git\x20fetch\x0a$\x20git\x20checkout\x20<tag>\x0a$\x20./all.bash\x0a
\x0a\x0a\x0aWhere\x20<tag>\x20is\x20the\x20version\x20string\x20of\x20the\x20release.\x0a

\x0a\x0a\x0aOptional\x20environment\x20variables\x0a\x0a

\x0aThe\x20Go\x20compilation\x20environment\x20can\x20be\x20customized\x20by\x20environment\x20variables.\x0aNone\x20is\x20required\x20by\x20the\x20build,\x20but\x20you\x20may\x20wish\x20to\x20set\x20some\x0ato\x20override\x20the\x20defaults.\x0a

\x0a\x0a
    \x0a
  • $GOROOT\x0a

    \x0aThe\x20root\x20of\x20the\x20Go\x20tree,\x20often\x20$HOME/go1.X.\x0aIts\x20value\x20is\x20built\x20into\x20the\x20tree\x20when\x20it\x20is\x20compiled,\x20and\x0adefaults\x20to\x20the\x20parent\x20of\x20the\x20directory\x20where\x20all.bash\x20was\x20run.\x0aThere\x20is\x20no\x20need\x20to\x20set\x20this\x20unless\x20you\x20want\x20to\x20switch\x20between\x20multiple\x0alocal\x20copies\x20of\x20the\x20repository.\x0a

    \x0a
  • \x0a\x0a
  • $GOROOT_FINAL\x0a

    \x0aThe\x20value\x20assumed\x20by\x20installed\x20binaries\x20and\x20scripts\x20when\x0a$GOROOT\x20is\x20not\x20set\x20explicitly.\x0aIt\x20defaults\x20to\x20the\x20value\x20of\x20$GOROOT.\x0aIf\x20you\x20want\x20to\x20build\x20the\x20Go\x20tree\x20in\x20one\x20location\x0abut\x20move\x20it\x20elsewhere\x20after\x20the\x20build,\x20set\x0a$GOROOT_FINAL\x20to\x20the\x20eventual\x20location.\x0a

    \x0a
  • \x0a\x0a$GOPATH\x0a

    \x0aThe\x20directory\x20where\x20Go\x20projects\x20outside\x20the\x20Go\x20distribution\x20are\x20typically\x0achecked\x20out.\x20For\x20example,\x20golang.org/x/tools\x20might\x20be\x20checked\x20out\x0ato\x20$GOPATH/src/golang.org/x/tools.\x20Executables\x20outside\x20the\x0aGo\x20distribution\x20are\x20installed\x20in\x20$GOPATH/bin\x20(or\x0a$GOBIN,\x20if\x20set).\x20Modules\x20are\x20downloaded\x20and\x20cached\x20in\x0a$GOPATH/pkg/mod.\x0a

    \x0a\x0a

    The\x20default\x20location\x20of\x20$GOPATH\x20is\x20$HOME/go,\x0aand\x20it's\x20not\x20usually\x20necessary\x20to\x20set\x20GOPATH\x20explicitly.\x20However,\x0aif\x20you\x20have\x20checked\x20out\x20the\x20Go\x20distribution\x20to\x20$HOME/go,\x0ayou\x20must\x20set\x20GOPATH\x20to\x20another\x20location\x20to\x20avoid\x20conflicts.\x0a

    \x0a\x0a\x0a
  • $GOBIN\x0a

    \x0aThe\x20directory\x20where\x20executables\x20outside\x20the\x20Go\x20distribution\x20are\x20installed\x0ausing\x20the\x20go\x20command.\x20For\x20example,\x0ago\x20get\x20golang.org/x/tools/cmd/godoc\x20downloads,\x20builds,\x20and\x0ainstalls\x20$GOBIN/godoc.\x20By\x20default,\x20$GOBIN\x20is\x0a$GOPATH/bin\x20(or\x20$HOME/go/bin\x20if\x20GOPATH\x0ais\x20not\x20set).\x20After\x20installing,\x20you\x20will\x20want\x20to\x20add\x20this\x20directory\x20to\x0ayour\x20$PATH\x20so\x20you\x20can\x20use\x20installed\x20tools.\x0a

    \x0a\x0a

    \x0aNote\x20that\x20the\x20Go\x20distribution's\x20executables\x20are\x20installed\x20in\x0a$GOROOT/bin\x20(for\x20executables\x20invoked\x20by\x20people)\x20or\x0a$GOTOOLDIR\x20(for\x20executables\x20invoked\x20by\x20the\x20go\x20command;\x0adefaults\x20to\x20$GOROOT/pkg/$GOOS_$GOARCH)\x20instead\x20of\x0a$GOBIN.\x0a

    \x0a
  • \x0a\x0a
  • $GOOS\x20and\x20$GOARCH\x0a

    \x0aThe\x20name\x20of\x20the\x20target\x20operating\x20system\x20and\x20compilation\x20architecture.\x0aThese\x20default\x20to\x20the\x20values\x20of\x20$GOHOSTOS\x20and\x0a$GOHOSTARCH\x20respectively\x20(described\x20below).\x0a

  • \x0a\x0a

    \x0aChoices\x20for\x20$GOOS\x20are\x0aandroid,\x20darwin\x20(macOS/iOS),\x0adragonfly,\x20freebsd,\x20illumos,\x20js,\x0alinux,\x20netbsd,\x20openbsd,\x0aplan9,\x20solaris\x20and\x20windows.\x0a

    \x0a\x0a

    \x0aChoices\x20for\x20$GOARCH\x20are\x0aamd64\x20(64-bit\x20x86,\x20the\x20most\x20mature\x20port),\x0a386\x20(32-bit\x20x86),\x20arm\x20(32-bit\x20ARM),\x20arm64\x20(64-bit\x20ARM),\x0appc64le\x20(PowerPC\x2064-bit,\x20little-endian),\x20ppc64\x20(PowerPC\x2064-bit,\x20big-endian),\x0amips64le\x20(MIPS\x2064-bit,\x20little-endian),\x20mips64\x20(MIPS\x2064-bit,\x20big-endian),\x0amipsle\x20(MIPS\x2032-bit,\x20little-endian),\x20mips\x20(MIPS\x2032-bit,\x20big-endian),\x0as390x\x20(IBM\x20System\x20z\x2064-bit,\x20big-endian),\x20and\x0awasm\x20(WebAssembly\x2032-bit).\x0a

    \x0a\x0a

    \x0aThe\x20valid\x20combinations\x20of\x20$GOOS\x20and\x20$GOARCH\x20are:\x0a\x0a\x0a$GOOS\x20$GOARCH\x0a\x0a\x0aaix\x20ppc64\x0a\x0a\x0aandroid\x20386\x0a\x0a\x0aandroid\x20amd64\x0a\x0a\x0aandroid\x20arm\x0a\x0a\x0aandroid\x20arm64\x0a\x0a\x0adarwin\x20amd64\x0a\x0a\x0adarwin\x20arm64\x0a\x0a\x0adragonfly\x20amd64\x0a\x0a\x0afreebsd\x20386\x0a\x0a\x0afreebsd\x20amd64\x0a\x0a\x0afreebsd\x20arm\x0a\x0a\x0aillumos\x20amd64\x0a\x0a\x0ajs\x20wasm\x0a\x0a\x0alinux\x20386\x0a\x0a\x0alinux\x20amd64\x0a\x0a\x0alinux\x20arm\x0a\x0a\x0alinux\x20arm64\x0a\x0a\x0alinux\x20ppc64\x0a\x0a\x0alinux\x20ppc64le\x0a\x0a\x0alinux\x20mips\x0a\x0a\x0alinux\x20mipsle\x0a\x0a\x0alinux\x20mips64\x0a\x0a\x0alinux\x20mips64le\x0a\x0a\x0alinux\x20riscv64\x0a\x0a\x0alinux\x20s390x\x0a\x0a\x0anetbsd\x20386\x0a\x0a\x0anetbsd\x20amd64\x0a\x0a\x0anetbsd\x20arm\x0a\x0a\x0aopenbsd\x20386\x0a\x0a\x0aopenbsd\x20amd64\x0a\x0a\x0aopenbsd\x20arm\x0a\x0a\x0aopenbsd\x20arm64\x0a\x0a\x0aplan9\x20386\x0a\x0a\x0aplan9\x20amd64\x0a\x0a\x0aplan9\x20arm\x0a\x0a\x0asolaris\x20amd64\x0a\x0a\x0awindows\x20386\x0a\x0a\x0awindows\x20amd64\x0a\x0a\x0a
    \x0a\x0a

  • $GOHOSTOS\x20and\x20$GOHOSTARCH\x0a

    \x0aThe\x20name\x20of\x20the\x20host\x20operating\x20system\x20and\x20compilation\x20architecture.\x0aThese\x20default\x20to\x20the\x20local\x20system's\x20operating\x20system\x20and\x0aarchitecture.\x0a

    \x0a
  • \x0a\x0a

    \x0aValid\x20choices\x20are\x20the\x20same\x20as\x20for\x20$GOOS\x20and\x0a$GOARCH,\x20listed\x20above.\x0aThe\x20specified\x20values\x20must\x20be\x20compatible\x20with\x20the\x20local\x20system.\x0aFor\x20example,\x20you\x20should\x20not\x20set\x20$GOHOSTARCH\x20to\x0aarm\x20on\x20an\x20x86\x20system.\x0a

    \x0a\x0a
  • $GO386\x20(for\x20386\x20only,\x20default\x20is\x20auto-detected\x0aif\x20built\x20on\x20either\x20386\x20or\x20amd64,\x20387\x20otherwise)\x0a

    \x0aThis\x20controls\x20the\x20code\x20generated\x20by\x20gc\x20to\x20use\x20either\x20the\x20387\x20floating-point\x20unit\x0a(set\x20to\x20387)\x20or\x20SSE2\x20instructions\x20(set\x20to\x20sse2)\x20for\x0afloating\x20point\x20computations.\x0a

    \x0a
      \x0a\x09
    • GO386=387:\x20use\x20x87\x20for\x20floating\x20point\x20operations;\x20should\x20support\x20all\x20x86\x20chips\x20(Pentium\x20MMX\x20or\x20later).
    • \x0a\x09
    • GO386=sse2:\x20use\x20SSE2\x20for\x20floating\x20point\x20operations;\x20has\x20better\x20performance\x20than\x20387,\x20but\x20only\x20available\x20on\x20Pentium\x204/Opteron/Athlon\x2064\x20or\x20later.
    • \x0a
    \x0a
  • \x0a\x0a
  • $GOARM\x20(for\x20arm\x20only;\x20default\x20is\x20auto-detected\x20if\x20building\x0aon\x20the\x20target\x20processor,\x206\x20if\x20not)\x0a

    \x0aThis\x20sets\x20the\x20ARM\x20floating\x20point\x20co-processor\x20architecture\x20version\x20the\x20run-time\x0ashould\x20target.\x20If\x20you\x20are\x20compiling\x20on\x20the\x20target\x20system,\x20its\x20value\x20will\x20be\x20auto-detected.\x0a

    \x0a
      \x0a\x09
    • GOARM=5:\x20use\x20software\x20floating\x20point;\x20when\x20CPU\x20doesn't\x20have\x20VFP\x20co-processor
    • \x0a\x09
    • GOARM=6:\x20use\x20VFPv1\x20only;\x20default\x20if\x20cross\x20compiling;\x20usually\x20ARM11\x20or\x20better\x20cores\x20(VFPv2\x20or\x20better\x20is\x20also\x20supported)
    • \x0a\x09
    • GOARM=7:\x20use\x20VFPv3;\x20usually\x20Cortex-A\x20cores
    • \x0a
    \x0a

    \x0aIf\x20in\x20doubt,\x20leave\x20this\x20variable\x20unset,\x20and\x20adjust\x20it\x20if\x20required\x0awhen\x20you\x20first\x20run\x20the\x20Go\x20executable.\x0aThe\x20GoARM\x20page\x0aon\x20the\x20Go\x20community\x20wiki\x0acontains\x20further\x20details\x20regarding\x20Go's\x20ARM\x20support.\x0a

    \x0a
  • \x0a\x0a
  • $GOMIPS\x20(for\x20mips\x20and\x20mipsle\x20only)\x20
    \x20$GOMIPS64\x20(for\x20mips64\x20and\x20mips64le\x20only)\x0a

    \x0a\x09These\x20variables\x20set\x20whether\x20to\x20use\x20floating\x20point\x20instructions.\x20Set\x20to\x20\"hardfloat\"\x20to\x20use\x20floating\x20point\x20instructions;\x20this\x20is\x20the\x20default.\x20\x20Set\x20to\x20\"softfloat\"\x20to\x20use\x20soft\x20floating\x20point.\x0a

    \x0a
  • \x0a\x0a
  • $GOPPC64\x20(for\x20ppc64\x20and\x20ppc64le\x20only)\x0a

    \x0aThis\x20variable\x20sets\x20the\x20processor\x20level\x20(i.e.\x20Instruction\x20Set\x20Architecture\x20version)\x0afor\x20which\x20the\x20compiler\x20will\x20target.\x20The\x20default\x20is\x20power8.\x0a

    \x0a
      \x0a\x09
    • GOPPC64=power8:\x20generate\x20ISA\x20v2.07\x20instructions
    • \x0a\x09
    • GOPPC64=power9:\x20generate\x20ISA\x20v3.00\x20instructions
    • \x0a
    \x0a
  • \x0a\x0a\x0a
  • $GOWASM\x20(for\x20wasm\x20only)\x0a\x09

    \x0a\x09This\x20variable\x20is\x20a\x20comma\x20separated\x20list\x20of\x20experimental\x20WebAssembly\x20features\x20that\x20the\x20compiled\x20WebAssembly\x20binary\x20is\x20allowed\x20to\x20use.\x0a\x09The\x20default\x20is\x20to\x20use\x20no\x20experimental\x20features.\x0a\x09

    \x0a\x09
      \x0a\x09\x09
    • GOWASM=satconv:\x20generate\x20saturating\x20(non-trapping)\x20float-to-int\x20conversions
    • \x0a\x09\x09
    • GOWASM=signext:\x20generate\x20sign-extension\x20operators
    • \x0a\x09
    \x0a
  • \x0a\x0a
\x0a\x0a

\x0aNote\x20that\x20$GOARCH\x20and\x20$GOOS\x20identify\x20the\x0atarget\x20environment,\x20not\x20the\x20environment\x20you\x20are\x20running\x20on.\x0aIn\x20effect,\x20you\x20are\x20always\x20cross-compiling.\x0aBy\x20architecture,\x20we\x20mean\x20the\x20kind\x20of\x20binaries\x0athat\x20the\x20target\x20environment\x20can\x20run:\x0aan\x20x86-64\x20system\x20running\x20a\x2032-bit-only\x20operating\x20system\x0amust\x20set\x20GOARCH\x20to\x20386,\x0anot\x20amd64.\x0a

\x0a\x0a

\x0aIf\x20you\x20choose\x20to\x20override\x20the\x20defaults,\x0aset\x20these\x20variables\x20in\x20your\x20shell\x20profile\x20($HOME/.bashrc,\x0a$HOME/.profile,\x20or\x20equivalent).\x20The\x20settings\x20might\x20look\x0asomething\x20like\x20this:\x0a

\x0a\x0a
\x0aexport\x20GOARCH=amd64\x0aexport\x20GOOS=linux\x0a
\x0a\x0a

\x0aalthough,\x20to\x20reiterate,\x20none\x20of\x20these\x20variables\x20needs\x20to\x20be\x20set\x20to\x20build,\x0ainstall,\x20and\x20develop\x20the\x20Go\x20tree.\x0a

\x0a", diff --git a/internal/dl/tmpl.go b/internal/dl/tmpl.go index 6329eae3..3a77b6a4 100644 --- a/internal/dl/tmpl.go +++ b/internal/dl/tmpl.go @@ -242,66 +242,6 @@ $(document).ready(function() { }); }); - {{end}} {{define "releases"}}