A miña viaxe de Python a Go - compartindo consellos e recursos

A miña viaxe de Python a Go - compartindo consellos e recursos

Do tradutor: traducido para ti o artigo de Ilad Leev sobre a transición de Python a Go. O artigo será útil non só para programadores novatos, senón tamén para todos os que estean interesados ​​en Go dun xeito ou doutro.

Gústame Python. Esta lingua foi a miña favorita durante os últimos cinco anos. É amigable, eficiente e fácil de aprender. Úsase para case todo, desde simples scripts e desenvolvemento web ata visualización de datos e aprendizaxe automática

A paulatina maduración de Go, a vasta comunidade e o feito de que cada vez son máis as empresas que adopten esta lingua tras probas exitosas fíxome prestar atención a ela e afondar na literatura. Pero esta publicación non trata sobre cal é mellor: Python ou Go.: hai un gran número de comparacións na rede. Na miña opinión, todo depende da aplicación. Vou falar sobre por que escollín Go, dando algúns consellos e ligazóns a recursos útiles para quen estea interesado no tema.

Skillbox recomenda: Curso práctico Desenvolvedor Python desde cero.

Recordámolo: para todos os lectores de "Habr" - un desconto de 10 rublos ao inscribirse en calquera curso de Skillbox usando o código promocional "Habr".

A miña viaxe de Python a Go - compartindo consellos e recursos

Observacións

O primeiro que fixen ao comezo da viaxe foi estudar o excelente titorial oficial "Tour de Go". Dá unha comprensión da sintaxe da lingua.

Para mellorar os meus coñecementos, tamén lin o libro “Vaia por programadores de Python”, o que nos permitiu pasar á seguinte fase: proba e erro.

Tomei funcións coñecidas que usei en Python (serialización JSON ou traballo con chamadas HTTP) e intentei escribilas en Go. Grazas a esta comparación visual, puiden identificar as principais diferenzas entre as linguas.

Maquetación do proxecto

En primeiro lugar, Python non require unha xerarquía de directorios específica, mentres que Go sí.

Go usa un deseño "estándar", que é un pouco máis complexo e require máis traballo. Por outra banda, o resultado é un código base ben estruturado que utiliza unha estrutura modular e, cando o proxecto se expande, o código segue estritamente ordenado.

Tutoria oficial "Como escribir o código Goexplica como organizar o seu traballo.

Escritura estática forte

Go está escrito de forma estática, e isto fará que aqueles que estean afeitos a linguaxes de escritura dinámica como Python e Ruby se sintan fóra de lugar.

Non hai dúbida de que as linguaxes dinámicas son máis propensas a erros, é necesario máis esforzo por parte do programador á hora de validar os datos de entrada. Un exemplo é unha función que calcula a suma de dous números enteiros. Pasar unha cadea a unha función (o que non é raro) dará lugar a un TypeError.

Isto non pode ocorrer en Go, porque aquí tes que declarar un tipo para cada variable e función, e que tipo de variable devolverá a función.

Ao principio, isto era molesto, pensei que esta función de Go ralentizaba as cousas, pero despois decateime de que declarar todo aforra tempo e reduce as posibilidades de erros.

Concurrencia nativa

Go ten soporte nativo para concorrencia mediante subrutinas e canalizacións, o que é útil.

O concepto de canles parece un pouco confuso ao principio. Non obstante, co paso do tempo, faise máis comprensible e comeza a gozar de novas oportunidades, traballando activamente con elas.

Aquí tes unha visualización de todo o que se di Iván 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
}

A miña viaxe de Python a Go - compartindo consellos e recursos

Máis exemplos aquí и aquí.

Traballando con JSON

Ben, json.loads() xa desapareceu. En Python, todo é sinxelo: usamos json.loads e non hai problemas.

Pero en Go, unha linguaxe de escritura estática, esta operación faise máis difícil.

Aquí, ao usar JSON, todo está predefinido. Calquera campo que non encaixe na estrutura dada ignorarase, o que está ben. Isto pódese considerar como un protocolo preestablecido entre as dúas partes. Os datos que recibiches en JSON deberían ser os que esperabas e os campos e os tipos de JSON están "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"`
}

Por suposto, pode deserializar JSON sen estruturas, pero isto debe evitarse sempre que sexa posible e debe ter en conta a natureza estática da linguaxe.

A decodificación JSON en GO é mellor explicado nesta publicación ou aquí.

Demasiado preguiceiro converter o teu JSON nunha estrutura Go? Sen problema, esta ferramenta fará todo por ti.

Código limpo

O compilador Go sempre tentará manter o teu código limpo. Trata as variables non utilizadas como un erro de compilación. Go ten un enfoque único que permite ao sistema resolver a maioría dos problemas de formato. Por exemplo, Go executará o programa gofmt cando garde ou compile e corrixa o formato por si mesmo.

Impórtanche as variables? OK! Só tes que usar _ (subliñado) e asígnalo a un ID baleiro.

O titorial de Mastrid para esta parte do traballo coa linguaxe é a información de “Ir efectivo".

Atopar a biblioteca e os marcos adecuados

Usei frameworks e bibliotecas como Flask, Jinja2, Requests e mesmo Kazoo con Python, polo que tiña medo de non atopar nada axeitado para Go.

Pero a comunidade xa resolveu estes problemas: a lingua ten as súas propias bibliotecas únicas que che permiten esquecer por completo o que usabas antes.

Aquí están os meus favoritos.

Solicitudes de Python => net/http

net/http ofrece unha implementación de servidor e cliente HTTP conveniente e fácil de usar.

Flask + Jinja2 => Gin

gin é un marco web HTTP cunha API moi sinxela: parámetros no camiño, ficheiros para cargar, enrutamento de grupos (/api/v1, /api/v2), formatos de rexistro personalizados que serven ficheiros estáticos, renderización HTML e middleware personalizado realmente potente.
Taxa isto punto de referencia.

Creación de CLI => Cobra

Cobra - unha biblioteca para crear potentes aplicacións CLI, así como un programa para xerar aplicacións e ficheiros por lotes.
Cobra é usado por moitos grandes proxectos de Go, incluíndo Kubernetes, etcd e OpenShift.

Aquí tes algunhas bibliotecas máis que recomendo encarecidamente: víbora, Gonfig e esta incrible lista - Genial Go.

Outros recursos útiles

[1] Francesc Campoy  - Definitivamente cómpre avaliar estes Canle de YouTube и Perfil de GitHub.

[2] GopherCon - vídeo. [3] Go Web Exemplos. [4] golang semanal, Academia Gopher, noticias de golang - Contas de Twitter.

Resumindo

Sendo un usuario habitual de Python durante cinco anos, temía que cambiar a Go fose doloroso.

Pero non: hai novidades da comunidade Go, que amplían e complementan as capacidades da lingua, así como diversos recursos útiles que che axudarán na transición.

Go está a crecer rapidamente e espero que Google poida converterse no idioma de referencia para escribir aplicacións e infraestruturas na nube.

Únete agora!

A miña viaxe de Python a Go - compartindo consellos e recursos

Skillbox recomenda:

Fonte: www.habr.com