De um tradutor: traduzido para você um artigo de Ilad Leev sobre a transição do Python para o Go . O artigo será útil não apenas para programadores iniciantes, mas também para todos os interessados em Go, de uma maneira ou de outra.Eu gosto de Python. Esse idioma tem sido o meu favorito nos últimos cinco anos. Ele é amigável, eficiente e fácil de aprender. Usado para quase tudo: desde a criação de scripts simples e desenvolvimento da Web até visualização de dados e aprendizado de máquina
O gradual amadurecimento de Go, a vasta comunidade e o fato de que mais e mais empresas estão adotando esse idioma após testes bem-sucedidos me forçaram a prestar atenção nele e me aprofundar na literatura.
Mas este post não é sobre o que é melhor - Python ou Go : existem muitas comparações na rede. Na minha opinião, tudo depende da aplicação. Vou falar sobre por que escolhi o Go, dando algumas dicas e links para recursos úteis para todos os interessados no tópico.
A Skillbox recomenda: Um desenvolvedor prático de Python do zero .
Lembramos que: para todos os leitores de "Habr" - um desconto de 10.000 rublos ao se inscrever em qualquer curso Skillbox usando o código promocional "Habr".

Observações
A primeira coisa que fiz no início da jornada foi estudar o excelente tutorial oficial do
Tour Of Go . Dá uma compreensão da sintaxe do idioma.
Para melhorar meu conhecimento, também li o livro “
Go for Python Programmers ”, que me permitiu avançar para a próxima etapa - tentativa e erro.
Peguei as funções usuais que usei no Python (serializando JSON ou trabalhando com chamadas HTTP) e tentei escrevê-las no Go. Graças a essa comparação visual, consegui identificar as principais diferenças entre os idiomas.
Layout do projetoPrimeiro, o Python não requer uma hierarquia de diretórios específica, enquanto o Go exige.
O Go usa um layout "padrão" que é um pouco mais complicado e requer mais trabalho. Por outro lado, como resultado, obtemos uma base de código bem estruturada, que utiliza uma estrutura modular e, ao expandir o projeto, o código permanece estritamente ordenado.
O tutorial oficial "
Como escrever um código Go " explica como organizar seu trabalho.
Digitação estática forteO Go é estaticamente digitado, e isso fará com que você se sinta prejudicado por aqueles que estão acostumados a linguagens dinamicamente tipadas como Python e Ruby.
Não há dúvida de que as linguagens dinâmicas são mais propensas a erros; o desenvolvedor exige mais esforço na verificação dos dados de entrada. Um exemplo é uma função que calcula a soma de dois números inteiros. Se você passar uma string para uma função (o que não é tão raro), isso levará a um erro de TypeError.
Isso não pode acontecer no Go, porque aqui você precisa declarar um tipo para cada variável e função e que tipo de variável a função retornará.
No começo, era irritante: parecia-me que esse recurso Go estava diminuindo a velocidade, mas depois entendi que, de fato, declarar tudo economiza tempo e reduz a probabilidade de erro.
Simultaneidade nativaO Go possui suporte de simultaneidade nativo usando rotinas e pipes - isso é conveniente.
O conceito de canais a princípio parece um pouco confuso. No entanto, com o tempo, torna-se mais compreensível e você começa a aproveitar novas oportunidades, trabalhando ativamente com elas.
Aqui está uma visualização de tudo o que foi dito por
Ivan Danilyuk .
package main func main() {

Mais exemplos
aqui e
aqui .
Trabalhar com JSONBem, json.loads () não existe mais. Tudo é simples no Python: usamos json.loads e não há problemas.
Mas no Go, uma linguagem de tipo estaticamente, essa operação se torna mais complicada.
Aqui, ao usar JSON, tudo é predefinido. Qualquer campo que não se encaixar na estrutura fornecida será ignorado, e isso é bom. Isso pode ser pensado como um protocolo pré-acordado entre as duas partes. Os dados que você recebeu em JSON devem ser esperados e os campos e tipos de 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"` }
Obviamente, você pode desserializar o JSON sem estruturas, mas sempre que possível, evite isso e leve em consideração a natureza estática da linguagem.
A decodificação JSON no GO é melhor
explicada neste post ou
aqui .
Preguiçoso para converter seu JSON em uma estrutura Go? Não tem problema,
esta ferramenta fará tudo por você .
Código limpoO compilador Go sempre tentará manter seu código limpo. Considera variáveis não utilizadas um erro de compilação. O Go usa uma abordagem única que permite ao sistema resolver a maioria dos problemas de formatação. Portanto, o Go executará o programa gofmt ao salvar ou compilar e corrigir independentemente a formatação.
Você se importa com variáveis? Ok Basta usar _ (sublinhado) e atribuí-lo a um ID vazio.
O tutorial principal para esta parte do trabalho com o idioma são as informações de "
Effective Go ".
Encontrando a biblioteca e a estrutura certasEu usei frameworks e bibliotecas com Python como Flask, Jinja2, Requests e até Kazoo com Python, por isso tive medo de não encontrar nada adequado para o Go.
Mas a comunidade já resolveu esses problemas: a linguagem possui suas próprias bibliotecas exclusivas que permitem que você esqueça completamente o que usou anteriormente.
Aqui estão os meus favoritos.
Solicitações de Python => net / httpO net / http fornece uma implementação conveniente e fácil de usar do cliente e servidor HTTP.
Balão + Jinja2 => GinGin é uma estrutura da Web HTTP com uma API muito simples: parâmetros de caminho, arquivos para download, roteamento de grupo (/ api / v1, / api / v2), formatos de log personalizados que servem arquivos estáticos, renderização HTML e um poderoso middleware personalizado.
Classifique
esta referência.
Criação de CLI => CobraO Cobra é uma biblioteca para a criação de aplicativos CLI poderosos, bem como um programa para gerar aplicativos e arquivos em lote.
O Cobra é usado em muitos projetos Go grandes, incluindo Kubernetes, etcd e OpenShift.
Aqui estão mais algumas bibliotecas que eu recomendo:
Viper ,
Gonfig, e esta lista incrível é o
Awesome-Go .
Outros recursos úteis
[1]
Francesc Campoy - Você definitivamente precisa avaliar este
canal do YouTube e o
perfil do GitHub .
[2]
GopherCon - vídeo .
[3]
Vá a exemplos da Web .
[4]
Golang Weekly ,
Gopher Academy ,
Golang News - contas no Twitter.
Resumir
Como usuário regular de Python por cinco anos, eu tinha medo de que ir para o Go fosse doloroso.
Mas não: existe a base da comunidade Go, que expande e complementa os recursos do idioma, além de vários recursos úteis que o ajudarão na transição.
O Go está crescendo rapidamente, e espero que o Google possa torná-lo o principal idioma para escrever aplicativos e infraestrutura em nuvem.
Inscreva-se agora!

A Skillbox recomenda: