De un traductor: tradujo para usted un artículo de Ilad Leev sobre la transición de Python a Go . El artículo será útil no solo para programadores novatos, sino también para todos los que estén interesados en Go de una forma u otra.Me gusta Python 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 crear scripts simples y desarrollo web hasta visualización de datos y aprendizaje automático
La "maduración" gradual de Go, la vasta comunidad y el hecho de que cada vez más empresas adopten este lenguaje después de que las pruebas exitosas me hayan obligado a prestarle atención y profundizar en la literatura.
Pero esta publicación no trata sobre cuál es mejor: Python o Go : hay muchas comparaciones en la red. En mi opinión, todo depende de la aplicación. Voy a hablar sobre por qué elegí Ir, dando algunos consejos y enlaces a recursos útiles para todos los interesados en el tema.
Skillbox recomienda: Un desarrollador de Python de curso práctico desde cero .
Le recordamos: para todos los lectores de "Habr": un descuento de 10.000 rublos al registrarse en cualquier curso de Skillbox con el código de promoción "Habr".

Observaciones
Lo primero que hice al comienzo del viaje fue estudiar el excelente tutorial oficial del
Tour Of Go . Da una comprensión de la sintaxis del lenguaje.
Para mejorar mi conocimiento, también leí el libro "
Ir a Python Programmers ", que me permitió pasar a la siguiente etapa: prueba y error.
Tomé las funciones habituales que usé en Python (serializar JSON o trabajar con llamadas HTTP) e intenté escribirlas en Go. Gracias a tal comparación visual, pude identificar diferencias clave entre idiomas.
Diseño del proyectoEn primer lugar, Python no requiere una jerarquía de directorio específica, mientras que Go sí.
Go utiliza un diseño "estándar" que es un poco más complicado y requiere más trabajo. Por otro lado, como resultado, obtenemos una base de código bien estructurada, que utiliza una estructura modular, y al expandir el proyecto, el código permanece estrictamente ordenado.
El tutorial oficial "
Cómo escribir Go Code " explica cómo organizar su trabajo.
Mecanografía fuerte estáticaGo está estáticamente tipado, y te hará sentir perdido para aquellos que están acostumbrados a tipear dinámicamente lenguajes como Python y Ruby.
No hay duda de que los lenguajes dinámicos son más propensos a errores; el desarrollador requiere más esfuerzo para verificar los datos de entrada. Un ejemplo es una función que calcula la suma de dos enteros. Si pasa una cadena a una función (que no es tan rara), esto conducirá a un error TypeError.
Esto no puede suceder en Go, porque aquí debe declarar un tipo para cada variable y función y qué tipo de variable devolverá la función.
Al principio fue molesto: me pareció que esta función Go se estaba ralentizando, pero luego comprendí que, de hecho, declarar todo ahorra tiempo y reduce la probabilidad de errores.
Concurrencia nativaGo tiene soporte de concurrencia nativa utilizando rutinas y tuberías, esto es conveniente.
El concepto de canales al principio parece un poco confuso. Sin embargo, con el tiempo, se vuelve más comprensible, y comienza a disfrutar de nuevas oportunidades, trabajando activamente con ellas.
Aquí hay una visualización de todo lo dicho por
Ivan Danilyuk .
package main func main() {

Más ejemplos
aquí y
aquí .
Trabajar con JSONBueno, json.loads () ya no existe. Todo es simple en Python: usamos json.loads y no hay problemas.
Pero en Go, un lenguaje estáticamente escrito, esta operación se vuelve más complicada.
Aquí, cuando se usa JSON, todo está predefinido. Cualquier campo que no se ajuste a la estructura dada será ignorado, y eso es bueno. Esto puede considerarse como un protocolo previamente acordado entre las dos partes. Los datos que recibió en JSON deben esperarse, y los campos y los tipos de JSON están "acordados" por ambas 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 supuesto, puede deserializar JSON sin estructuras, pero siempre que sea posible, esto debe evitarse y la naturaleza estática del lenguaje debe tenerse en cuenta.
La decodificación JSON en GO se
explica mejor
en esta publicación o
aquí .
¿Perezoso para convertir tu JSON en una estructura Go? No hay problema,
esta herramienta hará todo por usted .
Código limpioEl compilador Go siempre intentará mantener limpio su código. Considera las variables no utilizadas como 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á independientemente el formato.
¿Te importan las variables? Esta bien Simplemente use _ (guión bajo) y asígnelo a una identificación vacía.
El tutorial mastrid para esta parte de trabajar con el lenguaje es la información de "
Effective Go ".
Encontrar la biblioteca y el marco correctosUtilicé frameworks y bibliotecas con Python como Flask, Jinja2, Requests e incluso Kazoo con Python, por lo 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 le permiten olvidarse por completo de lo que utilizó anteriormente.
Aquí están mis favoritos.
Solicitudes de Python => net / httpnet / http proporciona una implementación conveniente y fácil de usar del cliente y servidor HTTP.
Frasco + Jinja2 => GinebraGin es un marco web HTTP con una API muy simple: parámetros de ruta, archivos descargables, enrutamiento grupal (/ api / v1, / api / v2), formatos de registro personalizados que sirven archivos estáticos, representación HTML y un middleware personalizado realmente poderoso.
Califica
este punto de referencia.
Creación de CLI => CobraCobra es una biblioteca para crear potentes aplicaciones CLI, así como un programa para generar aplicaciones y archivos por lotes.
Cobra se utiliza en muchos proyectos grandes de Go, incluidos Kubernetes, etcd y OpenShift.
Aquí hay algunas bibliotecas más que recomiendo:
Viper ,
Gonfig, y esta increíble lista es
Awesome-Go .
Otros recursos útiles
[1]
Francesc Campoy : definitivamente debes calificar este
canal de YouTube y el
perfil de GitHub .
[2]
GopherCon - video .
[3]
Ir a ejemplos web .
[4]
Golang Weekly ,
Gopher Academy ,
Golang News - Cuentas de Twitter.
Para resumir
Como usuario habitual de Python durante cinco años, temía que ir a Go fuera doloroso.
Pero no: existe la base de la comunidad Go, que amplía y complementa las capacidades del lenguaje, así como varios recursos útiles que lo 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 ahora!

Skillbox recomienda: