Mi viaje de Python a Go: compartir consejos y recursos

Mi viaje de Python a Go: compartir consejos y recursos

Desde el traductor: transferido Para ti, el artículo de Ilad Leev sobre la transición de Python a Go. El artículo será útil no solo para los programadores novatos, sino también para todos los que de alguna manera estén interesados ​​​​en Go.

Me gusta pitón. Este idioma ha sido mi favorito durante los últimos cinco años. Es amigable, eficiente y fácil de aprender. Se utiliza para casi todo: desde secuencias de comandos simples y desarrollo web hasta visualización de datos y aprendizaje automático.

La paulatina “maduración” de Go, la extensa comunidad y el hecho de que cada vez más empresas adoptan este lenguaje después de pruebas exitosas me obligaron a prestarle atención y profundizar en la literatura. Pero esta publicación no trata sobre cuál es mejor: Python o Go.: Hay una gran cantidad de comparaciones en Internet. En mi opinión, todo depende de la aplicación. Voy a hablar sobre por qué elegí Go, dando algunos consejos y enlaces a recursos útiles para cualquier persona interesada en el tema.

Skillbox recomienda: Curso práctico Desarrollador de Python desde cero.

Recordamos: para todos los lectores de "Habr": un descuento de 10 rublos al inscribirse en cualquier curso de Skillbox utilizando el código promocional "Habr".

Mi viaje de Python a Go: compartir consejos y recursos

Observaciones

Lo primero que hice al comienzo de mi viaje fue estudiar el excelente tutorial oficial “Tour de ir" Da una comprensión de la sintaxis del idioma.

Para mejorar mis conocimientos, también leí el libro “Ir a los programadores de Python”, lo que nos permitió pasar a la siguiente etapa: prueba y error.

Tomé las funciones familiares que usaba en Python (serialización JSON o manejo de llamadas HTTP) e intenté escribirlas en Go. Gracias a esta clara comparación, pude identificar diferencias clave entre idiomas.

Diseño del proyecto

En primer lugar, Python no requiere una jerarquía de directorios específica, mientras que Go sí.

Go utiliza el diseño "estándar", que es un poco más complejo y requiere más trabajo. Por otro lado, el resultado es una base de código bien estructurada que utiliza una estructura modular y el código permanece estrictamente organizado a medida que el proyecto se expande.

Tutorial oficial “Cómo escribir código Go” explica cómo organizar su trabajo.

Escritura estática fuerte

Go está escrito estáticamente, lo que hará que aquellos acostumbrados a lenguajes escritos dinámicamente como Python y Ruby se sientan incómodos.

No hay duda de que los lenguajes dinámicos son más propensos a errores y requieren más esfuerzo por parte del desarrollador para validar los datos de entrada. Un ejemplo es una función que calcula la suma de dos números enteros. Si pasa una cadena a una función (lo cual no es tan raro), resultará en un TypeError.

Esto no puede suceder en Go porque tienes que declarar un tipo para cada variable y función y qué tipo de variable devolverá la función.

Al principio fue molesto (pensé que esta característica de Go ralentizaba las cosas), pero luego me di cuenta de que declarar todo en realidad ahorra tiempo y reduce la probabilidad de errores.

concurrencia nativa

Go tiene soporte nativo de concurrencia mediante subrutinas y canalizaciones, lo cual es conveniente.

El concepto de canales parece un poco confuso al principio. Sin embargo, con el tiempo, esto se vuelve más claro y comienzas a disfrutar de nuevas oportunidades y a trabajar activamente con ellas.

Aquí tenéis una visualización de todo lo dicho desde 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
}

Mi viaje de Python a Go: compartir consejos y recursos

Más ejemplos aquí и aquí.

Trabajar con JSON

Bueno, json.loads() ya no existe. En Python todo es sencillo: usamos json.loads y no hay problemas.

Pero en Go, un lenguaje escrito estáticamente, esta operación se vuelve más compleja.

Aquí, cuando se usa JSON, todo está predefinido. Cualquier campo que no encaje en la estructura dada será ignorado, lo cual es bueno. Puedes considerarlo como un protocolo preacordado entre dos partes. Los datos que reciba en JSON deben ser los que espera, y ambas partes deben "acordar" los campos y tipos de JSON.

{
  “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 supuesto, puedes deserializar JSON sin estructuras, pero esto se debe evitar si es posible y se debe tener en cuenta la naturaleza estática del lenguaje.

Decodificar JSON en GO es lo mejor explicado en esta publicación o aquí.

¿Demasiado vago para convertir su JSON en una estructura Go? Ningún problema, esta herramienta hará todo por ti.

código limpio

El compilador de Go siempre intentará mantener limpio su código. Considera que las variables no utilizadas son un error de compilación. Go utiliza un enfoque único que permite al sistema resolver la mayoría de los problemas de formato. Entonces, Go ejecutará el programa gofmt al guardar o compilar y corregirá el formato.

¿No te importan las variables? ¡DE ACUERDO! Simplemente use _ (guión bajo) y asígnelo a una identificación vacía.

El tutorial de Mastrid para esta parte de trabajar con el idioma es información de “Ir efectivo.

Encontrar la biblioteca y los marcos adecuados

He usado marcos y bibliotecas como Flask, Jinja2, Requests e incluso Kazoo con Python, así que temía no encontrar nada adecuado para Go.

Pero la comunidad ya ha resuelto estos problemas: el lenguaje tiene sus propias bibliotecas únicas que te permiten olvidarte por completo de lo que usabas antes.

Aquí están mis favoritos.

Solicitudes de Python => net/http

net / http proporciona una implementación de servidor y cliente HTTP cómoda y fácil de usar.

Frasco + Jinja2 => Ginebra

Ginebra - Marco web HTTP con una API muy simple: parámetros de ruta, archivos descargables, enrutamiento de grupo (/api/v1, /api/v2), formatos de registro personalizados que sirven archivos estáticos, renderizado HTML y middleware personalizado realmente potente.
Tasa este punto de referencia.

Creación CLI => Cobra

Cobra — una biblioteca para crear potentes aplicaciones CLI, así como un programa para generar aplicaciones y archivos por lotes.
Cobra se utiliza en muchos proyectos Go grandes, incluidos Kubernetes, etcd y OpenShift.

Aquí hay algunas bibliotecas más que recomiendo encarecidamente: Víbora, gonfig y esta increíble lista - Impresionante-ir.

Otros recursos útiles

[ 1 ] Francesc Campoy  - definitivamente necesitas evaluarlos Canal de YouTube и Perfil de GitHub.

[ 2 ] GopherCon - vídeo.

[ 3 ] Ir a ejemplos web.

[ 4 ] Golang Semanal, Academia Gopher, Noticias de Golang — Cuentas de Twitter.

En resumen

Habiendo sido un usuario habitual de Python durante cinco años, temía que cambiar a Go fuera doloroso.

Pero no: hay trabajo de la comunidad Go que amplía y complementa las capacidades del lenguaje, así como varios recursos útiles que te ayudarán con la transición.

Go está creciendo rápidamente y espero que Google pueda convertirlo en el idioma principal para escribir infraestructura y aplicaciones en la nube.

Únete al programa

Mi viaje de Python a Go: compartir consejos y recursos

Skillbox recomienda:

Fuente: habr.com

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster