Home Artigos O que é e por que Go (Golang)?

O que é e por que Go (Golang)?

0
0
1,000

Go, comumente chamada de Golang, é uma linguagem de programação relativamente nova, foi lançada oficialmente em 2009, porém sua versão 1.0, primeira versão estável, foi lançada em 2012. A versão atual é a 1.8.3 (até a data desse artigo) com data programada para o lançamento oficial da versão 1.9.

Por que Go?

Vou falar daquilo que me atraiu em Go:

1 – Suas credenciais, que são fantásticas! Go foi criada no Google, e na minha opinião, o Google é hoje a maior e melhor empresa de desenvolvimento de softwares do mundo!
Ok, mas por que o Google criou uma linguagem nova?
Go foi criado a partir de necessidades que outras linguagens não conseguiam mais suprir (explico no decorrer do artigo). A propósito o Google usa hoje basicamente quatro linguagens de programação para tudo: C++, Java, Python e Go, além de JavaScript para front-end.

2 – Go foi criado por gênios: Ken Thompson, Rob Pike, Robert Griesemer entre outros engenheiros. Estes caras são simplesmente gênios, são rockstars da ciência da computação! Só pra você ter uma ideia, dentre outras coisas, esses caras participaram e contribuíram para a criação de coisas como: linguagem C, Unix, codificação UTF-8 e JVM! =)

Só isso?! Essas são algumas das coisas mais fundamentais que existem na ciência da computação. UTF-8 é o esquema de codificação mais amplamente usado no mundo. Unix e linguagem C são a base de praticamente todos os sistemas operacionais modernos e das linguagens de programação. E esses caras estavam lá, quando tudo isso foi criado. E agora, eles juntos, criaram algo novo: Go. Acho que isso é suficiente pra chamar sua atenção, certo?

Ok, mas o que tem de tão fantástico nessa linguagem?
No site oficial do Go (golang.org) na seção FAQ, a primeira pergunta é: Qual o propósito desse projeto? E essa é a resposta:

“Nenhuma linguagem de sistemas importante emergiu em mais de uma década, mas durante esse tempo o cenário da computação mudou tremendamente. Existem várias tendências:

Os computadores são muito mais rápidos, mas o desenvolvimento de software não é mais rápido.
O gerenciamento de dependência é uma grande parte do desenvolvimento de software hoje, mas os “arquivos de cabeçalho” das linguagens na tradição C são antitéticos para a análise de dependência limpa e rápida compilação.
Existe uma crescente rebelião contra sistemas de tipo incômodo como os de Java e C ++, empurrando as pessoas para linguagens dinamicamente digitadas, como Python e JavaScript.
Alguns conceitos fundamentais como coleta de lixo e computação paralela não são bem suportados por linguagens de sistemas populares.
O surgimento de computadores multicore tem gerado preocupação e confusão.
Acreditamos que vale a pena tentar novamente com uma nova linguagem, uma linguagem simultânea, lixo coletado com compilação rápida. Quanto aos pontos acima:

É possível compilar um grande programa Go em poucos segundos em um único computador.
Go fornece um modelo para a construção de software que torna a análise de dependência fácil e evita grande parte da sobrecarga de C-style incluir arquivos e bibliotecas.
O sistema do tipo Go não tem hierarquia, portanto não é gasto tempo definindo as relações entre os tipos. Além disso, embora o Go tenha tipos estáticos, a linguagem tenta fazer com que os tipos se sintam mais leves do que em linguagens OO típicas.
Go é totalmente coleta de lixo e fornece suporte fundamental para execução e comunicação simultâneas.
Pelo seu design, a Go propõe uma abordagem para a construção de software de sistema em máquinas multicore.”

Outro artigo fantástico falando sobre isso escrito por Rob Pike: Go at Google: Language Design in the Service of Software Engineering.

Aqui fiz uma compilação das informações que julguei mais relevantes pra falar dos benefícios da linguagem Go:

Desempenho: Go é uma linguagem rápida, muito rápida, mais rápida que qualquer outra linguagem. Talvez a única linguagem que bata o Go em desempenho é o C, aliás, Go é escrito em C;

Multiple Cores: Todas as linguagens de sistema anteriores foram escritas para serem executadas em um único processador. Acontece que ninguém mais usa computadores single core. Go foi escrita para tirar proveito de múltiplos processadores. Nenhuma outra linguagem faz isso tão bem, escala tão bem horizontalmente e o melhor, nativamente, como Go faz;

Concorrência: É muito fácil trabalhar com concorrência em Go. A linguagem implementa bem e nativamente;

Compilada: Go é uma linguagem compilada, em binários, sem máquinas virtuais ou interpretadores. Isso aumenta muito seu desempenho;

Rede: Go é totalmente otimizada e bem escrita para ambientes de rede;

Garbage Collector: Go tem um eficiente e performático garbage collector. Não se preocupe com gerenciamento de memória;

Sintaxe Limpa: Sintaxe limpa, quase como uma linguagem de script;

Biblioteca Nativa: Go tem uma poderosa biblioteca nativa, bem escrita e que cobre todas as necessidades;

Portátil: Compila em diversos sistemas operacionais;

Open Source: Linguagem open source, você pode (e deve) contribuir com o projeto, se quiser.

Segue mais um texto do Google explicando o porquê de se criar uma nova linguagem:

“Go nasceu da frustração com as linguagens e ambientes existentes para a programação de sistemas. A programação tornou-se muito difícil e a escolha das linguagens foi em parte culpada. Era preciso escolher entre compilação eficiente, execução eficiente ou facilidade de programação; Os três não estavam disponíveis na mesma linguagem. Programadores foram escolhendo facilidade sobre segurança e eficiência, movendo-se para linguagens dinamicamente tipificadas, como Python e JavaScript em vez de C ++ ou, em menor medida, Java.

Go é uma tentativa de combinar a facilidade de programação de uma linguagem interpretada e dinamicamente tipificada com a eficiência e segurança de uma linguagem compilada estaticamente tipificada. Ele também pretende ser moderno, com suporte para computação em rede e multicore. Finalmente, destina-se a ser rápido: ele deve levar no máximo alguns segundos para construir um grande executável em um único computador. Para atingir estes objetivos, é necessário abordar uma série de questões linguísticas: um sistema de tipo expressivo mas leve; Concorrência e coleta de lixo; Especificação de dependência rígida; e assim por diante. Estes não podem ser bem tratados por bibliotecas ou ferramentas; Uma nova linguagem era necessária.

O artigo Go at Google discute os antecedentes e motivação por trás do design da linguagem Go, bem como fornece mais detalhes sobre muitas das respostas apresentadas neste FAQ.”

Na “GoCon Tokyo” em  31 de maio de  2014, Brad Fitzpatrick expôs alguns gráficos interessantes sobre Go em comparação com outras linguagens:

After Go

No livro, Go in Action, seu autor Bill Kennedy faz mais uma descrição muito interessante sobre Go:

“Go tem sua própria elegância e idiomática que tornam a linguagem produtiva e divertida de codificar. Os projetistas de linguagem criaram uma linguagem que permitiria que eles fossem produtivos sem perder o acesso às construções de programação de nível inferior de que precisavam. Esse equilíbrio é alcançado através de um conjunto minimizado de palavras-chave, funções internas e sintaxe. Go também fornece uma biblioteca padrão abrangente. A biblioteca padrão fornece todos os pacotes de núcleo que os programadores precisam para construir programas de rede e de web reais. “

Sobre empresas usando Go.
Quem hoje já usa Go? Afinal não faz sentido aprender ou usar uma linguagem que ninguém usa. Dê uma olhada na lista de empresas que já estão utilizando Go de alguma forma, em seus softwares:

  • Google;
  • Youtube;
  • Apple (!);
  • Dropbox;
  • Docker;
  • Flipboard;
  • Firefox;
  • The Economist;
  • The New York Times;
  • Gov.uk;
  • IBM;
  • Heroku;
  • GE Software;
  • Booking.com;
  • Bitbucket;
  • Digitalocean;
  • BBC ;
  • MongoDB;
  • Intel;
  • Gtihub;
  • Twitter;
  • Facebook;
  • Uber;
  • Nokia;
  • Tumblr;
  • Empreas da China em peso

Ou seja, quase todos os grandes players do mercado já estão adotando Go. Um artigo muito interessante escrito por uma empresa chinesa mostra o poder da linguagem Go e como esse poder pode ser visto na prática:

“Inicialmente, nosso sistema baseado em Go funcionava em 20 servidores, com 20 milhões de conexões em tempo real no total. O sistema enviou 2 milhões de mensagens por dia. Esse sistema agora é executado em 400 servidores, suportando 200 milhões + conexões em tempo real. Agora, ele envia mais de 10 bilhões de mensagens diariamente.”

Go tem atraído muitos programadores de outros projetos. Um caso interessante é o do programador TJ Holowaychuk, que foi um dos primeiros contribuidores do Node.js. Ele escreveu um artigo chamado Adeus Node.js, onde basicamente ele se despede e informa que não participará mais do desenvolvimento do Node.js, migrando então para Go.

Falando em Go na prática, pra qual finalidade podemos usar? Eu poderia citar essas:

  • web apps;
  • network servers;
  • mobile applications;
  • machine learning;
  • image processing;
  • load balancers;
  • system admin;
  • hardware;
  • scripts;
  • crypto

Pra finalizar, espero ter dado um bom overview da linguagem Go. Ainda estamos bem carentes de material em português no assunto e minha intenção, a partir desse primeiro post, é difundir essa tecnologia.

Go é definitivamente minha grande aposta para o futuro das linguagens de programação e espero que muitos de vocês que estão lendo esse artigo comecem a se interessar, aprender e a usar em seus projetos.

Termino esse artigo com mais o artigo de lançamento do Google, escrito por Robert Griesemer, Rob Pike, Ken Thompson, Ian Taylor, Russ Cox, Jini Kim e Adam Langley (The Go Team):

“Aqui no Google, acreditamos que a programação deve ser rápida, produtiva e, o mais importante, divertida. É por isso que estamos entusiasmados em abrir uma nova linguagem experimental chamada Go. Go combina a velocidade de desenvolvimento de trabalhar em uma linguagem dinâmica como Python com o desempenho e a segurança de uma linguagem compilada como C ou C ++. As compilações típicas são instantâneas; Mesmo binários grandes compilam em apenas alguns segundos. E o código compilado é executado perto da velocidade de C. Go permite que você se mova rápido.

Go é uma ótima linguagem para programação de sistemas com suporte para multiprocessamento, uma abordagem leve e leve no design orientado a objetos, além de alguns recursos interessantes como fechamentos verdadeiros e reflexão.

Quer escrever um servidor com milhares de threads de comunicação? Quer gastar menos tempo lendo blogs enquanto espera por construções? Quer ver rapidamente o protótipo de sua última idéia? Go é o caminho a percorrer! Confira o vídeo para obter mais informações ou visite golang.org.”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Veja Também

Validação de CPF e CNPJ em Go

Simples e direto. Funções para validar CPF e CNPJ em Go. …