Parafraseando a banda indie Cracker, o que o mundo precisa agora é de outra linguagem de programação como eu preciso de um buraco na cabeça. Dito isto, Go lentamente, mas certamente inundou o mundo do desenvolvimento como uma videira rastejante, cobrindo tudo o que veio antes dele em uma exuberante - e de muitas maneiras superior - cobertura do poder de programação. Com sua crescente popularidade, há uma série de razões para você dar uma olhada mais de perto.
A história diz que os engenheiros do Google projetaram go enquanto aguardavam outros programas para compilar. Sua frustração com seu conjunto de ferramentas os forçou a repensar a programação do sistema do zero, criando uma solução enxuta, média e compilada que permite multithreading, concurrency e performance maciça sob pressão.
Executar o ir em hardware moderno — e até mesmo dentro de contêineres ou em máquinas virtuais — pode ser um verdadeiro prazer. Como o Go foi projetado para ser executado em vários núcleos, ele foi construído para suportar a concorrência e a escala à medida que os núcleos são adicionados. Além disso, suas capacidades multithreading — mais especificamente, suas goroutines — são uma adição surpreendente e bem-vinda ao seu saco de truques.
Construído para a concorrência
Antes de cavarmos mais, vamos olhar para goroutines. Estas são essencialmente funções simultâneas que são executadas enquanto o resto do programa é concluído. Em outras palavras, você pode disparar um goroutine, tê-lo correr, e continuar enquanto ele e milhares de seus irmãos processam em segundo plano. Tempo limite de rede? Não se preocupe, seu goroutine vai gerenciá-lo enquanto o loop principal continua. Falha completa no banco de dados? Seu goroutine saberá, e você pode graciosamente trabalhar em torno do assunto.
Dê uma olhada neste exemplo simples:
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("Hello world goroutine")
}
func main() {
go hello()
time.Sleep(1 * time.Second)
fmt.Println("main function")
}
A função main funciona como em C. Neste código, main dispara um goroutine — indicado pela palavra-chave go — chamado hello(). O programa tira um cochilo rápido e depois continua. Se algo acontecesse na função hello() função main não notaria. Tudo o que importa é que o trabalho seja feito.
O programa termina quando a rotina main acorda e dispara um Println. A função hello() pode ser qualquer coisa — uma chamada de dados, uma transação, uma entrada na fila — e seria executada enquanto o resto do programa avançava. Como a videira acima mencionada, pense em goroutines como pequenas flores que se ramificam e morrem enquanto a videira principal continua.
Quer vê-lo em ação? Confira este trecho no Go Playground e você verá como os goroutines funcionam.
Só este recurso vale o preço da entrada. Para aplicativos web, os goroutines permitem que você execute trabalhos simultâneos, evitando bloqueios nas estradas. Se você estiver esperando a entrada de dados, por exemplo, um goroutine pode disparar para fornecer texto pré-povoado, mesmo quando o usuário está digitando. Em outras palavras, seu programa continuará funcionando mesmo que os processos simultâneos desistam mais do que o esperado.
O melhor de tudo, goroutines são baratos, fazendo ir rápido.
"Os Goroutines são multiplexados para menos segmentos de SO", escreveu Naveen Ramanathan no GoLangBot, um recurso de aprendizagem go. "Pode haver apenas um fio em um programa com milhares de Goroutines. Se algum Goroutine nesse segmento bloquear, por exemplo, aguardando a entrada do usuário, então outro segmento do SISTEMA OPERACIONAL será criado e os goroutines restantes são movidos para o novo segmento do SISTEMA OPERACIONAL. Tudo isso é cuidado pelo tempo de execução e nós, como programadores, somos abstraídos desses detalhes intrincados e recebemos uma API limpa para trabalhar com concorrência."
Por que você deveria aprender "Go"?
Você provavelmente já viu alguns tweets ou blogs nos últimos anos argumentando que Go é melhor que Perl/Python/C/etc. Todos nós temos usado algo — caramba, eu até uso php de linha de comando — para fazer pequenas coisas em nossos servidores. Quer ver um tronco? Perl. Quer enviar tweets regulares? Python. Quer gerenciar dados recebidos de milhares de usuários simultâneos? Java ou C++ sempre foi sua resposta. Então vai "melhor"?
Bem, Vá, pode fazer tudo isso. Vá garantir que sua caixa de ferramentas seja compilável em todas as plataformas e em todos os hardwares. Ele usa uma solução de gerenciamento de pacotes surpreendentemente simples que "apenas funciona" e é extremamente portátil. Você pode facilmente substituir seus idiomas de script com Go e seus idiomas compilados definitivamente terão uma corrida para o seu dinheiro quando empilhados contra soluções Go.
Go foi construído para engenharia de software hoje. Nem tudo de novo é ótimo, mas quando uma linguagem de programação é projetada exatamente para o ambiente que a maioria de nós usa agora — servidores escaláveis e baseados em nuvem que são otimizados para o desempenho — muita coisa pode dar certo. Go é compilável em quase qualquer máquina, para que você possa usá-lo para criar um webapp completo ou uma ferramenta para limpar os dados recebidos para processamento. Como Perl antes dele, Go é um canivete suíço, mas que tirou toda a sobrecarga e lixo extra que se acarretou em plataformas de programação nas últimas décadas.
Go é simples. Como um dev, eu tenho sido capaz de pegar idiomas e frameworks durante um fim de semana longo. Isso me dá uma compreensão de algumas plataformas importantes e, como eu não tenho que codificar diariamente, corda suficiente para me enforcar quando se trata de criar pequenos projetos paralelos. Ir tem sido diferente. Para quem já conhece o básico da programação ou alguns outros idiomas, aprender Go leva no máximo algumas horas. Uma vez que você sabe seus truques, você está pronto para codificar. Novamente, porque é tão rápido, você vai querer usá-lo para quase tudo o que você usou intérpretes de linha de comando para, substituindo assim seus scripts de bash, esboços Python e esforços Java.
Go é rápido. Dê uma olhada nesta lista de tarefas inteligentes em Go por Mohamad Fadhil. O código é bastante simples — configure um banco de dados MySQL no Docker, adicione um pouco de HTML e quase instantaneamente você tem um aplicativo web super rápido que compila na linha de comando. Além disso, Fadhil explora por que ele gosta de Ir em primeiro lugar: velocidade.
Em um teste de regex,regex-redux, Go correu em 3,55 segundos, enquanto Java correu em 5,58. O programa Go pesava 102 linhas de código, enquanto o programa Java pesava 70. Verdade, Go era um pouco mais pesado que Java, mas dada a velocidade com que Go superou a próxima linguagem mais popular do sistema, é claro que você não está sacrificando a velocidade.
Go está em curso para assumir muitos projetos de código aberto e privado e como ele se torna mais útil como uma linguagem padrão tanto para microsserviços quanto para a web. Ele poderia começar a substituir soluções menos performáticas como Java e C.
Não tome minha palavra. Confira GoLang.org para obter conselhos sobre a escrita de aplicativos web, ferramentas de linha de comando e serviços.
"Pessoalmente, eu acredito que Go é o novo Java. Muitos projetos de código aberto (por exemplo, Jaeger, Kubernetes, Docker, InfluxDB, Serf, etc.) estão agora escritos em Go. Em contraste, os projetos mais antigos (por exemplo, Apache Kafka, Apache Hadoop, Apache Spark, etc.) são escritos em Java", escreveu Fadhil.
Go é como xadrez ou, bem, o jogo de Go: leva um momento para aprender e uma vida inteira para dominar. Felizmente, ao contrário do xadrez, a dificuldade de Go vai para baixo com a experiência e logo você estará codificando programas rápidos e furiosos em uma das línguas mais modernas do mundo.
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.