Go är definitivt ett riktigt trevligt språk. De som designade språket ville skapa något som har många av fördelarna från dynamiskt typade skriptspråk (duck-typing) men ändå är ett starkt- och statiskt-typat kompilerat språk för systemprogrammering (i.e. samma målgrupp som bl.a. C, C++, Java och C#).
Rob Pike, som är expert på concurrent-programming, brukar vara väldigt noga att påpeka att Go är ett språk designat för just concurrent-programming och inte för parallel-programming. Det är lätt att blanda ihop dessa två.
Concurrent-programming är ett sätt att strukturerar sitt program och det tenderar att fungera extremt väl i program med massiv I/O-last (back-end system). Concurrent-programming är definitivt väldigt användbart i enkeltrådade program och på system som bara har en CPU-tråd, så ett sådant program behöver inte alls exekverar parallellt.
Parallel-programming är i stället ett mål att maximera effekten av system med många CPU-kärnor, typiska användningsområden här är high-performance-computing. Visst kan man använda Go även här, men C, C++ och Fortran med tillägg som Cilk+ eller OpenMP är nog bättre val här. Visst kan man uttrycka instruktions-parallellism i Go (går även i C#4 och Java7), men i Cilk+ kan man även uttrycka data-parallellism vilket gör det väldigt enkelt för kompilatorn att använda sig av SSE/AVX (något som överhuvudtaget inte går i C# och Java för tillfället).
De som designade Go må jobba på Google, men det är inte ett språk som kontrolleras av Google då språk, kompilator och standardbibliotek är släppt under BSD-licens. D.v.s. man får göra precis vad man vill, inklusive stoppa in det i egna projekt som man inte gör OpenSource!
Just nu finns det två kompilatorer för Go, en med namnet "gc" som är den man hittar på den officiella sidan för språket Go. Den andra är gccgo som är en "front-end" till gcc. Gccgo kan enkelt installeras via pakethanteraren om man kör Ubuntu, Fedora eller liknande. Gccgo tenderar att generera binärer som presterar bättre än de binärer man får med gc om problemet är CPU-bundent, är problemet I/O-bundent spelar kompilatorn sällan någon större roll.
Även om de flesta som använder Go nog kör det på Linux så har "gc" kompilator även stöd för Windows, och stödet är faktiskt riktigt bra. I Windows NT kärnan finns det något som kallas I/O Completion Ports, en finess som gör det möjligt att utveckla I/O-intensiva program som skalar väldigt bra. Det går att använda denna finess även i .Net och Java6/7, men det används inte de funktioner som folk oftast kör med och att använda det leder till lite mer komplicerade program. I Go används det alltid utan att man ens behöver tänka på det!