
Desde el traductor: transferido . 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 .
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".

Observaciones
Lo primero que hice al comienzo de mi viaje fue estudiar el excelente tutorial oficial “" Da una comprensión de la sintaxis del idioma.
Para mejorar mis conocimientos, también leí el libro “”, 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 “” 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 .
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
} 
Más ejemplos и .
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 o .
¿Demasiado vago para convertir su JSON en una estructura Go? Ningún problema, .
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 “.
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
proporciona una implementación de servidor y cliente HTTP cómoda y fácil de usar.
Frasco + Jinja2 => 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 punto de referencia.
Creación CLI => 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: , y esta increíble lista - .
Otros recursos útiles
[ 1 ] - definitivamente necesitas evaluarlos и .
[ 2 ] .
[ 3 ] .
[ 4 ] , , — 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

Skillbox recomienda:
- Curso práctico de dos años. .
- Curso educativo en línea .
- curso práctico anual .
Fuente: habr.com
