
Do tradutor: traduzido . O artigo será útil não apenas para iniciantes, mas para todos que, de alguma forma, estão interessados em Go.
Eu gosto de Python. Essa linguagem foi minha favorita nos últimos cinco anos. É amigável, eficiente e fácil de aprender. É usada praticamente para tudo: desde a criação de scripts simples e desenvolvimento web até visualização de dados e aprendizado de máquina.
O amadurecimento gradual do Go, a ampla comunidade e o fato de que mais empresas estão adotando essa linguagem após testes bem-sucedidos me fizeram prestar atenção e mergulhar na literatura sobre ela. Mas este post não é sobre qual é melhor — Python ou Go: há inúmeras comparações na internet. Na minha opinião, tudo depende da área de aplicação. Vou contar por que escolhi Go, dando algumas dicas e links para recursos úteis para todos os interessados no assunto.
A Skillbox recomenda: Curso Prático .
Lembramos: para todos os leitores do «Habr» — desconto de 10.000 rublos na inscrição em qualquer curso Skillbox com o código promocional «Habr».

Observações
A primeira coisa que fiz no início da minha jornada foi estudar o excelente tutorial oficial “”. Ele dá uma compreensão da sintaxe da linguagem.
Para aprofundar meus conhecimentos, li também o livro “”, que me permitiu passar para a próxima etapa — tentativas e erros.
Peguei funções que costumava usar no Python (serialização JSON ou trabalho com chamadas HTTP) e tentei escrevê-las em Go. Graças a essa comparação visual, consegui identificar as principais diferenças entre as linguagens.
Estrutura do projeto
Antes de tudo, Python não exige uma hierarquia de diretórios específica, enquanto Go sim.
Go utiliza uma estrutura “padrão” que é um pouco mais complexa e requer mais trabalho. Por outro lado, resultamos em uma base de código bem estruturada, onde é utilizada uma estrutura modular, e ao expandir o projeto, o código permanece bem organizado.
O tutorial oficial “” explica como organizar seu trabalho.
Tipagem estática rigorosa
Go é estaticamente tipado, e isso pode fazer com que aqueles que estão acostumados a linguagens dinamicamente tipadas como Python e Ruby se sintam fora de lugar.
Não há dúvida de que linguagens dinâmicas estão mais propensas a erros, exigindo mais esforço do desenvolvedor ao validar dados de entrada. Por exemplo, uma função que calcula a soma de dois números inteiros. Se uma string for passada para a função (o que acontece com uma frequência considerável), isso resultará em um erro TypeError.
No Go, isso não pode acontecer, pois aqui é necessário declarar o tipo para cada variável e função, assim como o tipo que a função retornará.
A princípio, isso é irritante: eu achava que esse recurso do Go diminuía a velocidade do trabalho — mas depois veio a compreensão de que na verdade declarar tudo economiza tempo e diminui a probabilidade de erros.
Paralelismo nativo
O Go tem suporte nativo a paralelismo usando goroutines e canais — isso é prático.
O conceito de canais pode parecer um pouco confuso no início. No entanto, com o passar do tempo, ele se torna mais claro, e você começa a apreciar novas possibilidades ao trabalhar ativamente com eles.
Aqui está uma visualização de tudo que foi dito por .
package main
func main() {
// criar novo canal do tipo int
ch := make(chan int)
// iniciar nova goroutine anônima
go func() {
// enviar 42 para o canal
ch <- 42
}()
// ler do canal
<-ch
} 
Mais exemplos e .
Trabalhando com JSON
Bem, json.loads() não existe mais. No Python, é simples: usamos json.loads, e não há problema.
Mas no Go, uma linguagem estaticamente tipada, essa operação se torna mais complicada.
Aqui, ao usar JSON, tudo é pré-definido. Qualquer campo que não se encaixá na estrutura definida será ignorado, e isso é bom. Isso pode ser visto como um protocolo previamente acordado entre duas partes. Os dados que você recebe em JSON devem ser esperados, e os campos e tipos JSON são "acordados" por ambas as partes.
{
"first": "Elad",
"last": "Leev",
"location":"IL",
"id": "93"
}type AccountData struct {
First string `json:"first"`
Last string `json:"last"`
Location string `json:"location"`
ID string `json:"id"`
}Claro, você pode deserializar JSON sem estruturas, mas isso deve ser evitado sempre que possível, considerando a natureza estática da linguagem.
A decodificação de JSON em GO é melhor ou .
Está com preguiça de converter seu JSON em uma estrutura Go? Sem problemas, .
Código limpo
O compilador Go sempre tentará manter seu código "limpo". Ele considera variáveis não utilizadas um erro de compilação. Go utiliza uma abordagem única que permite que o sistema resolva a maioria dos problemas de formatação. Assim, Go executará o programa gofmt ao salvar ou compilar e corrigirá automaticamente a formatação.
Você não se importa com variáveis? Tudo bem! Basta usar _ (sublinhado) e atribuí-lo a um identificador vazio.
Um tutorial importante para esta parte do trabalho com a linguagem é a informação de “”.
Procurando pela biblioteca e frameworks apropriados
Usei frameworks e bibliotecas com Python, como Flask, Jinja2, Requests e até Kazoo, então tinha medo de não encontrar nada adequado para Go.
Mas a comunidade já resolveu esses problemas: a linguagem possui suas próprias bibliotecas únicas que permitem esquecer completamente o que você usou antes.
Aqui estão meus favoritos.
Python Requests => net/http
oferece uma implementação conveniente e fácil de usar de cliente e servidor HTTP.
Flask + Jinja2 => Gin
— um framework web HTTP com uma API muito simples: parâmetros no caminho, arquivos carregados, roteamento de grupos (/api/v1, /api/v2), formatos de log personalizados, servindo arquivos estáticos, renderização de HTML e middleware realmente poderoso e customizado.
Avalie o benchmark.
Criação de CLI => Cobra
— uma biblioteca para criar poderosas aplicações de CLI, além de uma ferramenta para geração de aplicações e arquivos de comandos.
Cobra é utilizada em muitos grandes projetos Go, incluindo Kubernetes, etcd e OpenShift.
Aqui estão mais algumas bibliotecas que recomendo fortemente: , e esta incrível lista — .
Outros recursos úteis
[1] — você definitivamente deve conferir este e .
[2] .
[3] .
[4] , , — contas do Twitter.
Resumindo
Sendo um usuário constante de Python por cinco anos, eu temia que a transição para Go seria dolorosa.
Mas não foi: existem contribuições da comunidade Go que ampliam e complementam as capacidades da linguagem, além de vários recursos úteis que facilitarão a transição para você.
Go está se desenvolvendo rapidamente, e espero que o Google consiga torná-lo a principal linguagem para a criação de aplicações e infraestrutura em nuvem.
Junte-se a nós!

A Skillbox recomenda:
- Curso Prático de Dois Anos .
- Curso online educacional .
- Curso prático de um ano .
Fonte: habr.com
