{"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\/en\/2026\/09\/a-historia-da-linguagem-go\/","title":{"rendered":"The history of the Go language"},"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 was born on a Google whiteboard on 21 September 2007 because C++ took too long to compile. In November 2025, the language celebrated 16 years of open source. In September 2026, the stable series is <strong>1.27.1<\/strong>. Docker, Kubernetes, Terraform, the <code data-no-translation=\"\">go<\/code> you install on Linux \u2014 all of it stems from that meeting of three people.<\/p>\n<p><!-- more --><\/p>\n<h2>Why a new language<\/h2>\n<p>Google toward the end of the 2000 decade: servers in C++ and Java, builds lasting three quarters of an hour, manual concurrency, dependencies that would not resolve. Rob Pike described the message in <em>Go at Google: Language Design in the Service of Software Engineering<\/em>: it was not a language fad, it was software engineering at scale. Compile quickly, use static typing, talk to the network without a threading framework, and produce a single binary.<\/p>\n<p>The official FAQ pins down the origin: Robert Griesemer, Rob Pike, and Ken Thompson started sketching goals on the whiteboard on 21 September 2007. Within days it became a plan. In January 2008, Ken already had a compiler that emitted C. In May, Ian Lance Taylor independently began a GCC frontend. Russ Cox joined in late 2008 and took the prototype out of the lab.<\/p>\n<h2>Unix, Plan 9, CSP<\/h2>\n<p>The three r\u00e9sum\u00e9s explain the language's taste. Ken Thompson co-created Unix and the B language. Pike came from Plan 9 and Inferno, co-invented UTF-8 with Thompson, and spent decades on concurrent languages \u2014 Newsqueak, Alef, Limbo \u2014 all following Tony Hoare's CSP (1978). Griesemer came from compilers: Java's HotSpot, V8. Go inherits Unix minimalism, CSP channels, and the stubbornness of a runtime that compiles in seconds.<\/p>\n<p>The name appeared in Pike's email on 25 September 2007: \u201cgo.\u201d Short, a verb, an easy domain. \u201cGolang\u201d is the search nickname \u2014 <code data-no-translation=\"\">golang.org<\/code> existed because <code data-no-translation=\"\">go.org<\/code> was not available. The canonical website today is <a href=\"https:\/\/go.dev\/\">go.dev<\/a>.<\/p>\n<h2>The central idea: goroutines and channels<\/h2>\n<p>Before continuing the chronology, it is worth seeing what the language does differently \u2014 because it is not the syntax, it is the concurrency model.<\/p>\n<p>A <em>goroutine<\/em> is not a system thread. It is a function that the Go runtime schedules across a handful of real threads, with an initial stack of a few kilobytes that grows on demand. That is why you launch ten thousand of them without a second thought \u2014 which with <code data-no-translation=\"\">pthread<\/code> would be irresponsible:<\/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>Communication between them is the other side of the design, and it comes straight from Tony Hoare's CSP: instead of sharing memory and protecting it with a <em>mutex<\/em>, you pass data through a channel. The community's motto sums it up: <em>\u201cdo not communicate by sharing memory; share memory by communicating\u201d<\/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>And <code data-no-translation=\"\">select<\/code> is the <code data-no-translation=\"\">epoll<\/code> of the language: it waits on multiple channels at once, including a timeout channel.<\/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>It is this combination \u2014 cheap goroutines, channels, <code data-no-translation=\"\">select<\/code>, and a static binary without a VM \u2014 that explains why virtually every infrastructure tool of the past decade chose Go. It is not the most expressive language; it is the one an entire team reads the same way on Monday.<\/p>\n<h2>10 November 2009<\/h2>\n<p>Go became a public project that day. The mascot \u2014 the blue gopher with enormous eyes \u2014 came with the launch. Ren\u00e9e French, who had already drawn the Plan 9 bunny (and is married to Pike), adapted a gopher from a WFMU T-shirt. It was called Gordon for a while; since 2010 it has simply been \u201cthe Go gopher.\u201d GopherCons around the world came from there.<\/p>\n<p>It was not Go 1 yet. There were two compilers: <code data-no-translation=\"\">gc<\/code> (the Plan 9 line, 6g\/8g) and Taylor's gccgo. The standard library echoed Plan 9's taste \u2014 the package <code data-no-translation=\"\">fmt<\/code> even its name.<\/p>\n<h2>Go 1.0 and the promise<\/h2>\n<p>28 March 2012: Go 1.0. The contract that sustained adoption: a program written for Go 1 keeps compiling on any 1.x. There will be no Go 2 that breaks the world. Companies committed. The cadence became twice a year (February and August, with delays of days, not years).<\/p>\n<p>Milestones that matter on Linux:<\/p>\n<ul>\n<li><strong>1.5<\/strong> (August 2015): the compiler becomes written in Go (self-hosting); concurrent GC.<\/li>\n<li><strong>1.11<\/strong> (August 2018): modules, still experimental. Goodbye to GOPATH as a prison.<\/li>\n<li><strong>1.13<\/strong> (2019): official modules; <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>, modules by default.<\/li>\n<li><strong>1.18<\/strong> (15 March 2022): generics \u2014 type parameters. The oldest request in the FAQ.<\/li>\n<li><strong>1.21<\/strong> (2023): <code data-no-translation=\"\">GOTOOLCHAIN<\/code> automatically downloads the version that <code data-no-translation=\"\">go.mod<\/code> requests; <code data-no-translation=\"\">min<\/code>\/<code data-no-translation=\"\">max<\/code>; packages <code data-no-translation=\"\">slices<\/code> and <code data-no-translation=\"\">maps<\/code>.<\/li>\n<li><strong>1.22<\/strong> (2024): per-iteration loop variables (end of the classic bug with <code data-no-translation=\"\">for<\/code>); better routing in <code data-no-translation=\"\">net\/http<\/code>.<\/li>\n<li><strong>1.25<\/strong> (August 2025): the collector <em>Green Tea<\/em> appears as an experiment (10\u201340% lower collection overhead in many services).<\/li>\n<li><strong>1.26<\/strong> (10 February 2026): <em>Green Tea<\/em> becomes the <strong>default<\/strong>; <em>modernizers<\/em> in <code data-no-translation=\"\">go fix<\/code>.<\/li>\n<li><strong>1.27<\/strong> (August 2026; 1.27.1 on 28 August): <strong>generic methods<\/strong> \u2014 Griesemer's proposal approved in March 2026 \u2014, the new JSON engine (<code data-no-translation=\"\">encoding\/json\/v2<\/code>) and post-quantum cryptography in the standard library. The option to disable Green Tea also disappears.<\/li>\n<\/ul>\n<h2>The internet's infrastructure<\/h2>\n<p>Docker (2013) is Go. So is Kubernetes. Terraform, Prometheus, the Git client, half of the cloud CLIs. A static binary, no VM, no <code data-no-translation=\"\">node_modules<\/code> of 400 MB \u2014 that sold the language to Linux operators. In the 2026 TIOBE ranking, Go hovers around position 12\u00aa; on GitHub and in infrastructure repositories, its weight is different.<\/p>\n<p>Concurrency is the calling card: <code data-no-translation=\"\">go func()<\/code>, channels, <code data-no-translation=\"\">select<\/code>. It is not Erlang, not Java with a thread pool. It is CSP that fits in a syslog.<\/p>\n<h2>What Go rejected<\/h2>\n<p>No type inheritance, no exceptions in the style of <code data-no-translation=\"\">throw<\/code>, no macros, no method overloading. Generics arrived late and narrow. Generic methods only in 2026. The FAQ still says: if you miss X, perhaps Y already covers it. Pike, in 2023 (<em>What We Got Right, What We Got Wrong<\/em>), acknowledges what mattered: the gopher was right; GOPATH took too long to die; communication of the \u201cwhy\u201d arrived in 2013, four years after launch.<\/p>\n<p>The complaints that remain, and matter to anyone choosing a stack:<\/p>\n<ul>\n<li><strong><code data-no-translation=\"\">if err != nil<\/code> on every line.<\/strong> The absence of exceptions makes errors explicit \u2014 and also leaves a third of the file repeating the same check. It is the community's oldest debate, and no syntactic sugar proposal has passed to this day.<\/li>\n<li><strong><code data-no-translation=\"\">nil<\/code> still exists.<\/strong> Nil pointer, nil map, nil interface that is not nil: Go did not follow the path of <code data-no-translation=\"\">Option<\/code> that <a href=\"\/en\/2026\/09\/a-historia-da-linguagem-rust\/\">Rust<\/a> took, and a <em>panic<\/em> from dereferencing remains the most common bug in production.<\/li>\n<li><strong>A garbage collector is a garbage collector.<\/strong> Green Tea significantly reduced the overhead, but anyone needing predictable latency at percentile 99,9 still runs into it \u2014 and that is exactly where Rust enters the conversation.<\/li>\n<li><strong>Governance belongs to Google.<\/strong> Open, with public proposals and visible reviews, but the company's team has the final say. It differs from the independent foundations Rust and Kubernetes established.<\/li>\n<\/ul>\n<p>None of this is accidental. Go was designed for large teams to write network services with little ceremony, not to be the most powerful language in the room. The rejections are the product.<\/p>\n<h2>On Linux today<\/h2>\n<p>The stable series in September 2026 is <strong>1.27.1<\/strong>, from 28 August. The recommended route is the go.dev tarball, because distribution packages are usually one or two versions behind:<\/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>To keep multiple versions side by side \u2014 useful when a project is still stuck on an older one \u2014 Go itself handles it, without an external manager:<\/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>Since 1.21, incidentally, <code data-no-translation=\"\">GOTOOLCHAIN<\/code> does this automatically: if <code data-no-translation=\"\">go.mod<\/code> requests a version you do not have, the correct toolchain is downloaded at build time.<\/p>\n<p>The complete how-to is in <a href=\"\/en\/2019\/12\/install-golang-linux\/\">Installing Golang on Linux<\/a>; its 2017 sibling, with 1.8.3, remains in <a href=\"\/en\/2017\/05\/instalando-golang-no-linux\/\">Installing Golang 1.8.3 on Linux<\/a>.<\/p>\n<h2>Timeline<\/h2>\n<ul>\n<li><strong>21 September 2007<\/strong> \u2014 Griesemer, Pike, and Thompson sketch the goals on Google's whiteboard.<\/li>\n<li><strong>25 September 2007<\/strong> \u2014 in Pike's email, the language gets its name: <em>go<\/em>.<\/li>\n<li><strong>January 2008<\/strong> \u2014 Ken Thompson has a compiler that emits C.<\/li>\n<li><strong>May 2008<\/strong> \u2014 Ian Lance Taylor independently starts the GCC frontend.<\/li>\n<li><strong>Late 2008<\/strong> \u2014 Russ Cox joins and takes the prototype out of the lab.<\/li>\n<li><strong>10 November 2009<\/strong> \u2014 the project opens up; Ren\u00e9e French's gopher comes with it.<\/li>\n<li><strong>28 March 2012<\/strong> \u2014 <strong>Go 1.0<\/strong> and the compatibility promise that sustained adoption.<\/li>\n<li><strong>2013<\/strong> \u2014 Docker is born in Go and takes the language into infrastructure.<\/li>\n<li><strong>2014<\/strong> \u2014 Kubernetes too; Go's <code data-no-translation=\"\">cargo<\/code> the <code data-no-translation=\"\">go get<\/code>, still depended on GOPATH.<\/li>\n<li><strong>August 2015<\/strong> \u2014 1.5 becomes self-hosting (compiler written in Go) and gains concurrent GC.<\/li>\n<li><strong>August 2018<\/strong> \u2014 1.11 brings modules, still experimental; GOPATH starts to die.<\/li>\n<li><strong>2019<\/strong> \u2014 1.13 makes modules official.<\/li>\n<li><strong>2021<\/strong> \u2014 1.16 brings <code data-no-translation=\"\">\/\/go:embed<\/code> and modules by default.<\/li>\n<li><strong>15 March 2022<\/strong> \u2014 1.18 finally delivers <em>generics<\/em>.<\/li>\n<li><strong>2023<\/strong> \u2014 1.21 brings <code data-no-translation=\"\">GOTOOLCHAIN<\/code>, <code data-no-translation=\"\">min<\/code>\/<code data-no-translation=\"\">max<\/code>, <code data-no-translation=\"\">slices<\/code> and <code data-no-translation=\"\">maps<\/code>.<\/li>\n<li><strong>2024<\/strong> \u2014 1.22 fixes the classic loop variable bug.<\/li>\n<li><strong>August 2025<\/strong> \u2014 1.25 brings the collector <em>Green Tea<\/em> as an experiment.<\/li>\n<li><strong>10 February 2026<\/strong> \u2014 1.26 makes Green Tea the default.<\/li>\n<li><strong>August 2026<\/strong> \u2014 1.27 delivers generic methods, JSON v2, and post-quantum cryptography.<\/li>\n<\/ul>\n<h2>Wrap-up<\/h2>\n<p>Three people, a whiteboard, a language that rejected weight and won the cloud. Sixteen years after going open source, the 1.x contract still holds and the gopher is still blue. The opposite bet, from the same decade, is in <a href=\"\/en\/2026\/09\/a-historia-da-linguagem-rust\/\">The history of the Rust language<\/a>; the complete map, in <a href=\"\/en\/2017\/05\/linguagens-de-programacao\/\">The 7 main programming languages<\/a>. And what Go built is in <a href=\"\/en\/2026\/09\/a-historia-do-docker\/\">The history of Docker<\/a> and <a href=\"\/en\/2026\/09\/a-historia-do-kubernetes\/\">The history of Kubernetes<\/a>. Sources: <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, ten years<\/a>, wiki and release notes at <a href=\"https:\/\/go.dev\/doc\/devel\/release\">go.dev\/doc\/devel\/release<\/a>.<\/p>\n<p style=\"font-size:.9em;opacity:.75\">Gopher based on the official mascot by <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Gogophercolor.png\">Renee French<\/a>, CC BY 3.0 license.<\/p>","protected":false},"excerpt":{"rendered":"<p>Go began on a Google whiteboard on September 21, 2007, because C++ took too long to compile. In November 2025, the language marked 16 years of open source development. In September 2026, the stable release is 1.27.1. Docker, Kubernetes, Terraform, the go you install on Linux \u2014 all of it descends \u2026 <a title=\"The history of the Go language\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/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\/en\/wp-json\/wp\/v2\/posts\/617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=617"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/617\/revisions"}],"predecessor-version":[{"id":1442,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/617\/revisions\/1442"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}