Go é uma nova liguagem experimental open source do Google que se assemelha a c, porém adicionando funcionalidades como reflexão, coletor de lixo, tipos dinâmicos, concorrência e paralelismo.
O Apresentador do Go no Tech Talk do canal, Rob Pike, um dos principais desenvolvedores trabalhando no Go, disse que a linguagem é experimental porque "nós não pensamos que esta é a resposta para tudo, mas estamos apostando e pensamos que é o tempo certo para dizer ao mundo sobre isso". A linguagem tem construtores de concorrência incluídas na linguagem e visa permitir que os desenvolvedores criem facilmente tarefas paralelas. Segundo os autores, alguns dos objetivos da linguagem são:
- Combine a eficácia de uma linguagem estática com a facilidade de escrever uma dinâmica. Praticamente, o desenvolvedor pode optar por estático ou dinâmico.
- Segurança. A linguagem é type-safe não permitindo conversões implícitas, apenas as explícitas. Além disso, a linguagem é memory-safe, por não prestar a aritmética de ponteiro e fazer coleta de lixo.
- Proporcionar um bom apoio para a concorrência e comunicação.
- Ter uma eficiente coleta de lixo livre de latência.
- Compilação de alta velocidade.
Algumas das características interessantes são:
- A linguagem tem ponteiros, mas não a aritmética de ponteiro.
- Tem interfaces.
- Tem canais síncronos. Estes canais são usados para comunicação entre threads e é a base para a concorrência. Go estimula o compartilhamento de memória, comunicando-o, não se comunicando através de memória partilhada. Somente uma thread pode ter acesso a um valor compartilhado em um tempo, os valores que estão sendo passados entre segmentos através de canais.
- Goroutines. Esta é uma outra construção utilizados para a concorrência. A goroutine é simplesmente uma função ou um método prefixado pela palavra-chave "go". A goroutine está associada com uma thread e se comunica com outras goroutines através de canais.
- Paralelização. Goroutines e canais podem ser usados para executar computações em múltiplos processadores.
- Reflexão. Um pode refletir sobre todos os tipos, canais.
- Embedding. É uma maneira simples de herança.
A linguagem tem dois compiladores até agora. Um vem com nomes diferentes para diferentes plataformas, 6g - 64-bit x86 ou AMD64, 8g - 32-bit x86 ou amd32, e 5g para plataformas ARM. O outro compilador é gccgo. 6g tem um coletor de lixo do tipo marque-e-varre enquanto gccgo não tem nenhum, mas uma nova baseada no Recycler IBM está sendo trabalhado para ambos os compiladores. Não há IDE nem um depurador ainda.
Um dos objetivos do Go é ter um compilador rápido, o qual parece ter sido atingido. O compilador 6g é mais rápido, enquanto o código gccgo é mais lento, porém ele cria um código mais otimizado. O compilador gera somente código de máquina, não gera bytecodes para uma máquina virtual, e eles dizem que funciona quase tão rápido quanto um código C sendo de 10 a 20% mais lento do que um código semelhante escrito em C.
Já existem muitas bibliotecas disponíveis para funções básicas, mas muitos mais são necessários. Godoc gera documentação de código-fonte semelhante ao javadoc. Go é um projeto open source lançado sob a licença BSD.
Recursos: Website Go, Apresentação do Go por Rob Pike.