GO: A linguagem de programacao do Google
Adriano Popovicz - Paulo Mauricio Haddad Filho

GO é uma linguagem de programação de código aberto criada pela empresa Google. Lançada em 2009, ela possui um foco em programação concorrente, onde o sistema operacional visa executar várias tarefas ao mesmo tempo, aproveitando o tempo em que o processador ficará ocioso. Seu código foi baseado em funções do sistema operacional Inferno, e seus criadores são: Robert Griesemer, Rob Pike e Ken Thompson
Robert Griesemer é um cientista de computação. anteriormente ao Go, ele trabalhou na engine JavaScript V8 da Google, a linguagem Sawzall, na maquina virtual Java HotSpot, e no sistema Strongtalk.
Kenneth Thompson é um cientista da computação, conhecido pela sua influência na criação do sistema operacional UNIX, pela invenção da linguagem de programação B, antecessora da linguagem de programação C.
Robert C. Pike é um engenheiro de software e escritor, ele foi responsável pelo projeto dos sistemas operacionais Plan 9 e Inferno, e da linguagem de programação Limbo, quando trabalhou na equipe que desenvolveu o sistema Unix, nos laboratórios Bell.
Go é uma linguagem de programação compilada, isto garante uma vantagem em relação a programas interpretados, já que ao compilar um programa o compilador analisa o código procurando erros de sintática, mas também de semântica, evitando que erros sejam encontrados quando o código esta em execução, e também possuem a vantagem de serem convertidos para linguagem de maquina que tendem a serem mais rápidos do que linguagens interpretadas.
Go apesar de ser uma linguagem compilada possui vantagens vistas em linguagens interpretadas. Um exemplo de praticidades de linguagens interpretadas que o Go possui é na declaração de variáveis, que pode ser dado com ou sem a inferência de tipos, como pode ser observada na imagem abaixo:

A principal mentalidade quando a linguagem Go foi criada foi a intenção de dar aos programadores uma outra opção de linguagem de alto desempenho além do C, pensando nas necessidades mais modernas como a concorrência e evitar uso de gerenciamento de memoria em código, dando também um suporte simplificado a concorrência.
Comparado a outras linguagens que utilizam, o Garbage Collector, uma função que tenta recuperar recursos de memoria que estavam sendo utilizados por objetos que não estão mais sendo utilizados pelo programa, no Go possui uma vantagem as implementações em outras linguagens já que no Go ele é uma função que está presente no conceito da criação do programa sendo assim uma função presente no Core do sistema, gastando assim menos recursos do que a implementação em outras linguagens
Sua sintaxe é bem parecida com a linguagem C, sendo programada de forma estruturada mas possuindo características de linguagens interpretadas, uma das diferenças entre as duas, é que GO não usa parênteses nas funções for e if. Suas declarações são feitas em forma de Pascal limpo.
Outras empresas além da Google fazem uso do Go, como por exemplo a Microsoft no seu serviço de nuvem Azure, e o software de containers Docker que foi escrito em Go.

Características únicas:
Programação orientada a objetos sem a utilização de classes ou hierarquia;
- GO usa estruturas no lugar de classes, que são chamadas nas funções:
type Carro struct { Cor string ano int } func (a Carro) Ligar() { fmt.Println("ligado") }
Tratamento estrito para exceções com as funções panic, recover e defer;
- A função panic é usada para tratar o erro em uma função que retorna um valor que não queremos. Ela faz com que a função pare, imprima uma mensagem de erro, rastreie a rotina e retorne um valor diferente de 0.
- A função recover retoma o controle da função parada pelo comando panic. Isso só é útil se você tiver funções diferidas. Ela irá captar o valor da panic, e continuará a execução normal.
- Defer é usada para atrasar a execução de uma função. A chamada será empurrada para uma lista, que será executada após o retorno de outra função. Sua utilização comum é em funções que fazem limpeza de memória.
Suporte para métodos criados utilizando structs;
- Você pode definir um ponteiro de chamada para a estrutura na função;
- GO faz conversões automáticas para valores e ponteiros de chamadas;
Implementação paralela a partir da função go (goroutine);
- A função go passa como parâmetro uma função, para que ela seja executada em paralelo por uma thread;
func a(fa string) { for i := 0; i <3; i++{ fmt.Println(fa,":",i) } } func main() { a("direct") go a("goroutine") // Será executado por uma thread go func(msg string) { // Será executado por outra thread fmt.Println(msg) }("going")
Ferramenta gofmt;
- Formata o código fonte automaticamente;
Como usar:
- Para aplicar fmt em um arquivo chamado “teste.go”, basta usar o seguinte comando de execução: gofmt -w teste.go
Alguns exemplos de códigos na linguagem GO:
Olá, Mundo!
package main
import "fmt"
func main() {
fmt.Println("Olá, Mundo!")
}
ECHO
package main
import (
"os"
"flag" // analisador sintático da linha de comando
)
var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
Space = " "
Newline = "\n"
)
func main() {
flag.Parse() // escaneia a lista de argumentos e configura as bandeiras
var s string = ""
for i := 0; i < flag.NArg(); i++ {
if i > 0 {
s += Space
}
s += flag.Arg(i)
}
if !*omitNewline {
s += Newline
}
os.Stdout.WriteString(s)
}
Curiosidades:
- GO é compilado por 2 compiladores atualmente: o gcc, e o gccgo;
- Existe uma linguagem chamada Go!, a qual não foi registrada pelo autor, e não tem relação com a linguagem da empresa Google;
- Levou cerca de 2 anos para que a linguagem fosse desenvolvida e disponibilizada;