Meu caminho do Python para o Go - compartilhando dicas e recursos



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 projeto

Primeiro, 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 forte

O 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 nativa

O 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() { // create new channel of type int ch := make(chan int) // start new anonymous goroutine go func() { // send 42 to channel ch <- 42 }() // read from channel <-ch } 



Mais exemplos aqui e aqui .

Trabalhar com JSON

Bem, 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 limpo

O 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 certas

Eu 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 / http

O net / http fornece uma implementação conveniente e fácil de usar do cliente e servidor HTTP.

Balão + Jinja2 => Gin

Gin é 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 => Cobra

O 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:

Source: https://habr.com/ru/post/pt444866/


All Articles