{"id":617,"date":"2026-09-06T10:52:53","date_gmt":"2026-09-06T13:52:53","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/a-historia-da-linguagem-go\/"},"modified":"2026-09-08T13:02:09","modified_gmt":"2026-09-08T16:02:09","slug":"a-historia-da-linguagem-go","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/a-historia-da-linguagem-go\/","title":{"rendered":"A hist\u00f3ria da linguagem Go"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro encaixando tubos-canal entre goroutines, com o gopher oficial do Go na mesa\" src=\"\/wp-content\/uploads\/2026\/09\/golang-historia-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Go nasceu num quadro branco do Google, em 21 de setembro de 2007, porque C++ demorava demais para compilar. Em novembro de 2025 a linguagem fez 16 anos de c\u00f3digo aberto. Em setembro de 2026 a s\u00e9rie est\u00e1vel \u00e9 a <strong>1.27.1<\/strong>. Docker, Kubernetes, Terraform, o <code data-no-translation=\"\">go<\/code> que voc\u00ea instala no Linux \u2014 tudo isso desce dessa reuni\u00e3o de tr\u00eas pessoas.<\/p>\n<p><!-- more --><\/p>\n<h2>Por que uma linguagem nova<\/h2>\n<p>Google no fim dos anos 2000: servidores em C++ e Java, builds de tr\u00eas quartos de hora, concorr\u00eancia na unha, depend\u00eancias que n\u00e3o fechavam. Rob Pike descreveu o recado em <em>Go at Google: Language Design in the Service of Software Engineering<\/em>: n\u00e3o era moda lingu\u00edstica, era engenharia de software em escala. Compilar r\u00e1pido, tipar est\u00e1tico, falar com a rede sem um framework de threads, e um bin\u00e1rio s\u00f3.<\/p>\n<p>O FAQ oficial fecha a origem: Robert Griesemer, Rob Pike e Ken Thompson come\u00e7aram a rabiscar metas no quadro no dia 21 de setembro de 2007. Em poucos dias virava plano. Em janeiro de 2008 Ken j\u00e1 tinha um compilador que emitia C. Em maio, Ian Lance Taylor, por conta pr\u00f3pria, come\u00e7ava um frontend GCC. Russ Cox entrou no fim de 2008 e tirou o prot\u00f3tipo do laborat\u00f3rio.<\/p>\n<h2>Unix, Plan 9, CSP<\/h2>\n<p>Os tr\u00eas curr\u00edculos explicam o gosto da l\u00edngua. Ken Thompson co-criou o Unix e a linguagem B. Pike veio do Plan 9 e do Inferno, co-inventou UTF-8 com Thompson, e passou d\u00e9cadas em linguagens concorrentes \u2014 Newsqueak, Alef, Limbo \u2014 todas na linha do CSP de Tony Hoare (1978). Griesemer veio de compilador: HotSpot da Java, V8. Go herda o minimalismo Unix, os canais do CSP e a teimosia de um runtime que compila em segundos.<\/p>\n<p>O nome surgiu no e-mail de Pike em 25 de setembro de 2007: \u201cgo\u201d. Curto, verbo, dom\u00ednio f\u00e1cil. \u201cGolang\u201d \u00e9 o apelido de busca \u2014 o <code data-no-translation=\"\">golang.org<\/code> existia porque <code data-no-translation=\"\">go.org<\/code> n\u00e3o estava livre. O site can\u00f4nico hoje \u00e9 <a href=\"https:\/\/go.dev\/\">go.dev<\/a>.<\/p>\n<h2>A ideia central: goroutines e canais<\/h2>\n<p>Antes de seguir a cronologia, vale ver o que a linguagem faz de diferente \u2014 porque n\u00e3o \u00e9 a sintaxe, \u00e9 o modelo de concorr\u00eancia.<\/p>\n<p>Uma <em>goroutine<\/em> n\u00e3o \u00e9 uma thread do sistema. \u00c9 uma fun\u00e7\u00e3o que o runtime do Go agenda sobre um punhado de threads reais, com pilha inicial de poucos kilobytes que cresce sob demanda. Por isso voc\u00ea lan\u00e7a dez mil delas sem pensar duas vezes \u2014 o que com <code data-no-translation=\"\">pthread<\/code> seria irrespons\u00e1vel:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-go\" data-no-translation=\"\">go processar(pedido)   \/\/ \u00e9 isso. N\u00e3o h\u00e1 pool, n\u00e3o h\u00e1 executor, n\u00e3o h\u00e1 Future.<\/code><\/pre>\n<p>A comunica\u00e7\u00e3o entre elas \u00e9 o outro lado do desenho, e vem direto do CSP de Tony Hoare: em vez de compartilhar mem\u00f3ria e proteger com <em>mutex<\/em>, voc\u00ea passa o dado por um canal. O lema da comunidade resume: <em>&#8220;n\u00e3o se comunique compartilhando mem\u00f3ria; compartilhe mem\u00f3ria comunicando&#8221;<\/em>.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-go\" data-no-translation=\"\">resultados := make(chan string)\n\nfor _, host := range hosts {\n    go func(h string) {\n        resultados &lt;- checar(h)      \/\/ envia pelo canal\n    }(host)\n}\n\nfor range hosts {\n    fmt.Println(&lt;-resultados)        \/\/ recebe, bloqueando at\u00e9 chegar\n}<\/code><\/pre>\n<p>E o <code data-no-translation=\"\">select<\/code> \u00e9 o <code data-no-translation=\"\">epoll<\/code> da linguagem: espera em v\u00e1rios canais ao mesmo tempo, incluindo um de timeout.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-go\" data-no-translation=\"\">select {\ncase r := &lt;-resultados:\n    fmt.Println(r)\ncase &lt;-time.After(2 * time.Second):\n    fmt.Println(\"estourou o tempo\")\n}<\/code><\/pre>\n<p>\u00c9 esse conjunto \u2014 goroutine barata, canal, <code data-no-translation=\"\">select<\/code>, e um bin\u00e1rio est\u00e1tico sem VM \u2014 que explica por que praticamente toda ferramenta de infraestrutura da \u00faltima d\u00e9cada escolheu Go. N\u00e3o \u00e9 a linguagem mais expressiva; \u00e9 a que um time inteiro l\u00ea igual na segunda-feira.<\/p>\n<h2>10 de novembro de 2009<\/h2>\n<p>Go virou projeto p\u00fablico nesse dia. O mascote \u2014 o gopher azul de olhos enormes \u2014 veio com o lan\u00e7amento. Ren\u00e9e French, que j\u00e1 tinha desenhado o coelho do Plan 9 (e \u00e9 casada com Pike), adaptou um gopher de uma camiseta da WFMU. Chamou-se Gordon um tempo; desde 2010 \u00e9 s\u00f3 \u201cthe Go gopher\u201d. As GopherCon do mundo inteiro sa\u00edram da\u00ed.<\/p>\n<p>Ainda n\u00e3o era Go 1. Havia dois compiladores: o <code data-no-translation=\"\">gc<\/code> (a linha Plan 9, 6g\/8g) e o gccgo do Taylor. A biblioteca padr\u00e3o copiava o gosto do Plan 9 \u2014 o pacote <code data-no-translation=\"\">fmt<\/code> inclusive o nome.<\/p>\n<h2>Go 1.0 e a promessa<\/h2>\n<p>28 de mar\u00e7o de 2012: Go 1.0. O contrato que segurou a ado\u00e7\u00e3o: programa escrito para Go 1 continua compilando em qualquer 1.x. N\u00e3o haver\u00e1 Go 2 que quebre o mundo. Empresas apostaram. O ritmo virou semestral (fevereiro e agosto, com atraso de dias, n\u00e3o de anos).<\/p>\n<p>Marcos que importam no Linux:<\/p>\n<ul>\n<li><strong>1.5<\/strong> (agosto de 2015): o compilador passa a ser escrito em Go (self-hosting); GC concorrente.<\/li>\n<li><strong>1.11<\/strong> (agosto de 2018): m\u00f3dulos, ainda experimentais. Adeus GOPATH como pris\u00e3o.<\/li>\n<li><strong>1.13<\/strong> (2019): m\u00f3dulos oficiais; <code data-no-translation=\"\">errors.Is<\/code> \/ <code data-no-translation=\"\">%w<\/code>.<\/li>\n<li><strong>1.16<\/strong> (2021): <code data-no-translation=\"\">\/\/go:embed<\/code>, m\u00f3dulos default.<\/li>\n<li><strong>1.18<\/strong> (15 de mar\u00e7o de 2022): generics \u2014 type parameters. O pedido mais antigo da FAQ.<\/li>\n<li><strong>1.21<\/strong> (2023): <code data-no-translation=\"\">GOTOOLCHAIN<\/code> baixa sozinho a vers\u00e3o que o <code data-no-translation=\"\">go.mod<\/code> pede; <code data-no-translation=\"\">min<\/code>\/<code data-no-translation=\"\">max<\/code>; pacotes <code data-no-translation=\"\">slices<\/code> e <code data-no-translation=\"\">maps<\/code>.<\/li>\n<li><strong>1.22<\/strong> (2024): loop var por itera\u00e7\u00e3o (fim do cl\u00e1ssico bug do <code data-no-translation=\"\">for<\/code>); roteamento melhor no <code data-no-translation=\"\">net\/http<\/code>.<\/li>\n<li><strong>1.25<\/strong> (agosto de 2025): o coletor <em>Green Tea<\/em> aparece como experimento (10\u201340% menos custo de coleta em muitos servi\u00e7os).<\/li>\n<li><strong>1.26<\/strong> (10 de fevereiro de 2026): o <em>Green Tea<\/em> vira o coletor <strong>padr\u00e3o<\/strong>; <em>modernizers<\/em> no <code data-no-translation=\"\">go fix<\/code>.<\/li>\n<li><strong>1.27<\/strong> (agosto de 2026; 1.27.1 em 28 de agosto): <strong>m\u00e9todos gen\u00e9ricos<\/strong> \u2014 proposta do Griesemer aprovada em mar\u00e7o de 2026 \u2014, o novo motor de JSON (<code data-no-translation=\"\">encoding\/json\/v2<\/code>) e criptografia p\u00f3s-qu\u00e2ntica na biblioteca padr\u00e3o. Some tamb\u00e9m a op\u00e7\u00e3o de desligar o Green Tea.<\/li>\n<\/ul>\n<h2>A infra da internet<\/h2>\n<p>Docker (2013) \u00e9 Go. Kubernetes tamb\u00e9m. Terraform, Prometheus, o cliente do Git, metade das CLIs de nuvem. Um bin\u00e1rio est\u00e1tico, sem VM, sem <code data-no-translation=\"\">node_modules<\/code> de 400 MB \u2014 isso vendeu a l\u00edngua para quem opera Linux. No ranking TIOBE de 2026 o Go oscila perto da 12\u00aa casa; no GitHub e nos reposit\u00f3rios de infra, o peso \u00e9 outro.<\/p>\n<p>A concorr\u00eancia \u00e9 o cart\u00e3o: <code data-no-translation=\"\">go func()<\/code>, canais, <code data-no-translation=\"\">select<\/code>. N\u00e3o \u00e9 Erlang, n\u00e3o \u00e9 Java com thread pool. \u00c9 CSP que cabe num syslog.<\/p>\n<h2>O que Go recusou<\/h2>\n<p>Sem heran\u00e7a de tipos, sem exce\u00e7\u00e3o no estilo <code data-no-translation=\"\">throw<\/code>, sem macros, sem overload de m\u00e9todo. Generics chegaram tarde e estreitos. M\u00e9todos gen\u00e9ricos s\u00f3 em 2026. A FAQ ainda diz: se voc\u00ea sente falta de X, talvez Y j\u00e1 cubra. Pike, em 2023 (<em>What We Got Right, What We Got Wrong<\/em>), admite o que pesou: o gopher acertou; o GOPATH demorou a morrer; a comunica\u00e7\u00e3o do \u201cporqu\u00ea\u201d chegou em 2013, quatro anos depois do lan\u00e7amento.<\/p>\n<p>As queixas que sobraram, e que valem para quem vai decidir a stack:<\/p>\n<ul>\n<li><strong><code data-no-translation=\"\">if err != nil<\/code> em toda linha.<\/strong> A aus\u00eancia de exce\u00e7\u00e3o deixa o erro expl\u00edcito \u2014 e deixa tamb\u00e9m um ter\u00e7o do arquivo repetindo a mesma verifica\u00e7\u00e3o. \u00c9 o debate mais antigo da comunidade, e nenhuma proposta de a\u00e7\u00facar sint\u00e1tico passou at\u00e9 hoje.<\/li>\n<li><strong><code data-no-translation=\"\">nil<\/code> continua existindo.<\/strong> Ponteiro nulo, mapa nulo, interface nula que n\u00e3o \u00e9 nula: o Go n\u00e3o seguiu o caminho do <code data-no-translation=\"\">Option<\/code> que o <a href=\"\/es\/2026\/09\/a-historia-da-linguagem-rust\/\">Rust<\/a> tomou, e o <em>panic<\/em> por desrefer\u00eancia segue sendo o bug mais comum em produ\u00e7\u00e3o.<\/li>\n<li><strong>Coletor de lixo \u00e9 coletor de lixo.<\/strong> O Green Tea reduziu bastante o custo, mas quem precisa de lat\u00eancia previs\u00edvel no percentil 99,9 ainda esbarra nele \u2014 e \u00e9 exatamente a\u00ed que o Rust entra na conversa.<\/li>\n<li><strong>A governan\u00e7a \u00e9 do Google.<\/strong> Aberta, com propostas p\u00fablicas e revis\u00e3o \u00e0 vista, mas a palavra final \u00e9 da equipe da empresa. \u00c9 diferente da funda\u00e7\u00e3o independente que o Rust e o Kubernetes montaram.<\/li>\n<\/ul>\n<p>Nada disso \u00e9 acidente. O Go foi desenhado para times grandes escreverem servi\u00e7o de rede com pouca cerim\u00f4nia, n\u00e3o para ser a linguagem mais poderosa da sala. As recusas s\u00e3o o produto.<\/p>\n<h2>No Linux, hoje<\/h2>\n<p>A s\u00e9rie est\u00e1vel em setembro de 2026 \u00e9 a <strong>1.27.1<\/strong>, de 28 de agosto. O caminho recomendado \u00e9 o tarball do go.dev, porque o pacote da distro costuma ficar uma ou duas vers\u00f5es atr\u00e1s:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># descobre a vers\u00e3o atual sem abrir o navegador\nVER=$(curl -fsSL 'https:\/\/go.dev\/VERSION?m=text' | head -n1)\necho \"$VER\"\n\n# instala no lugar can\u00f4nico\ncurl -fLO \"https:\/\/go.dev\/dl\/${VER}.linux-amd64.tar.gz\"\nsudo rm -rf \/usr\/local\/go\nsudo tar -C \/usr\/local -xzf \"${VER}.linux-amd64.tar.gz\"\n\n# PATH permanente\necho 'export PATH=$PATH:\/usr\/local\/go\/bin' | sudo tee \/etc\/profile.d\/go.sh\nsource \/etc\/profile.d\/go.sh\ngo version<\/code><\/pre>\n<p>Para manter v\u00e1rias vers\u00f5es lado a lado \u2014 \u00fatil quando um projeto ainda est\u00e1 preso numa antiga \u2014 o pr\u00f3prio Go resolve, sem gerenciador externo:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">go install golang.org\/dl\/go1.26@latest\ngo1.26 download\ngo1.26 version<\/code><\/pre>\n<p>Desde a 1.21, ali\u00e1s, o <code data-no-translation=\"\">GOTOOLCHAIN<\/code> faz isso sozinho: se o <code data-no-translation=\"\">go.mod<\/code> pede uma vers\u00e3o que voc\u00ea n\u00e3o tem, a toolchain certa \u00e9 baixada na hora do build.<\/p>\n<p>O howto completo est\u00e1 em <a href=\"\/es\/2019\/12\/install-golang-linux\/\">Instalando Golang no Linux<\/a>; o irm\u00e3o de 2017, com o 1.8.3, ficou em <a href=\"\/es\/2017\/05\/instalando-golang-no-linux\/\">Instalando Golang 1.8.3 no Linux<\/a>.<\/p>\n<h2>Linha do tempo<\/h2>\n<ul>\n<li><strong>21 de setembro de 2007<\/strong> \u2014 Griesemer, Pike e Thompson rabiscam as metas no quadro branco do Google.<\/li>\n<li><strong>25 de setembro de 2007<\/strong> \u2014 no e-mail de Pike, a linguagem ganha nome: <em>go<\/em>.<\/li>\n<li><strong>Janeiro de 2008<\/strong> \u2014 Ken Thompson tem um compilador que emite C.<\/li>\n<li><strong>Maio de 2008<\/strong> \u2014 Ian Lance Taylor come\u00e7a, por conta pr\u00f3pria, o frontend do GCC.<\/li>\n<li><strong>Fim de 2008<\/strong> \u2014 Russ Cox entra e tira o prot\u00f3tipo do laborat\u00f3rio.<\/li>\n<li><strong>10 de novembro de 2009<\/strong> \u2014 o projeto \u00e9 aberto; o gopher de Ren\u00e9e French vem junto.<\/li>\n<li><strong>28 de mar\u00e7o de 2012<\/strong> \u2014 <strong>Go 1.0<\/strong> e a promessa de compatibilidade que segurou a ado\u00e7\u00e3o.<\/li>\n<li><strong>2013<\/strong> \u2014 o Docker nasce em Go e leva a linguagem para a infraestrutura.<\/li>\n<li><strong>2014<\/strong> \u2014 o Kubernetes tamb\u00e9m; o <code data-no-translation=\"\">cargo<\/code> do Go, o <code data-no-translation=\"\">go get<\/code>, ainda dependia do GOPATH.<\/li>\n<li><strong>Agosto de 2015<\/strong> \u2014 a 1.5 se auto-hospeda (compilador escrito em Go) e ganha GC concorrente.<\/li>\n<li><strong>Agosto de 2018<\/strong> \u2014 a 1.11 traz m\u00f3dulos, ainda experimentais; o GOPATH come\u00e7a a morrer.<\/li>\n<li><strong>2019<\/strong> \u2014 a 1.13 torna os m\u00f3dulos oficiais.<\/li>\n<li><strong>2021<\/strong> \u2014 a 1.16 traz <code data-no-translation=\"\">\/\/go:embed<\/code> e m\u00f3dulos por padr\u00e3o.<\/li>\n<li><strong>15 de mar\u00e7o de 2022<\/strong> \u2014 a 1.18 finalmente entrega <em>generics<\/em>.<\/li>\n<li><strong>2023<\/strong> \u2014 a 1.21 traz <code data-no-translation=\"\">GOTOOLCHAIN<\/code>, <code data-no-translation=\"\">min<\/code>\/<code data-no-translation=\"\">max<\/code>, <code data-no-translation=\"\">slices<\/code> e <code data-no-translation=\"\">maps<\/code>.<\/li>\n<li><strong>2024<\/strong> \u2014 a 1.22 conserta o bug cl\u00e1ssico da vari\u00e1vel de la\u00e7o.<\/li>\n<li><strong>Agosto de 2025<\/strong> \u2014 a 1.25 traz o coletor <em>Green Tea<\/em> como experimento.<\/li>\n<li><strong>10 de fevereiro de 2026<\/strong> \u2014 a 1.26 torna o Green Tea padr\u00e3o.<\/li>\n<li><strong>Agosto de 2026<\/strong> \u2014 a 1.27 entrega m\u00e9todos gen\u00e9ricos, JSON v2 e criptografia p\u00f3s-qu\u00e2ntica.<\/li>\n<\/ul>\n<h2>O que ficou<\/h2>\n<p>Tr\u00eas pessoas, um quadro, uma l\u00edngua que recusou peso e ganhou a nuvem. Dezesseis anos depois do open source, o contrato da 1.x ainda vale e o gopher ainda \u00e9 azul. A aposta oposta, da mesma d\u00e9cada, est\u00e1 em <a href=\"\/es\/2026\/09\/a-historia-da-linguagem-rust\/\">A hist\u00f3ria da linguagem Rust<\/a>; o mapa completo, em <a href=\"\/es\/2017\/05\/linguagens-de-programacao\/\">As 7 principais linguagens<\/a>. E o que o Go construiu est\u00e1 em <a href=\"\/es\/2026\/09\/a-historia-do-docker\/\">A hist\u00f3ria do Docker<\/a> e <a href=\"\/es\/2026\/09\/a-historia-do-kubernetes\/\">A hist\u00f3ria do Kubernetes<\/a>. Fontes: <a href=\"https:\/\/go.dev\/doc\/faq\">FAQ<\/a>, <a href=\"https:\/\/go.dev\/blog\/16years\">Go\u2019s Sweet 16<\/a>, <a href=\"https:\/\/commandcenter.blogspot.com\/2017\/09\/go-ten-years-and-climbing.html\">Pike, dez anos<\/a>, wiki e notas de release em <a href=\"https:\/\/go.dev\/doc\/devel\/release\">go.dev\/doc\/devel\/release<\/a>.<\/p>\n<p style=\"font-size:.9em;opacity:.75\">Gopher baseado no mascote oficial de <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Gogophercolor.png\">Renee French<\/a>, licen\u00e7a CC BY 3.0.<\/p>","protected":false},"excerpt":{"rendered":"<p>Go nasceu num quadro branco do Google, em 21 de setembro de 2007, porque C++ demorava demais para compilar. Em novembro de 2025 a linguagem fez 16 anos de c\u00f3digo aberto. Em setembro de 2026 a s\u00e9rie est\u00e1vel \u00e9 a 1.27.1. Docker, Kubernetes, Terraform, o go que voc\u00ea instala no Linux \u2014 tudo isso desce &#8230; <a title=\"A hist\u00f3ria da linguagem Go\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/a-historia-da-linguagem-go\/\" aria-label=\"Read more about A hist\u00f3ria da linguagem Go\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,46,2],"tags":[58,31,280,279],"class_list":["post-617","post","type-post","status-publish","format-standard","hentry","category-desenv","category-devops","category-linux","tag-go","tag-golang","tag-google","tag-historia"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=617"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/617\/revisions"}],"predecessor-version":[{"id":1442,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/617\/revisions\/1442"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}