
Del traductor: se han trasladado . El artículo será útil no solo para los programadores principiantes, sino también para todos los que, de alguna manera, están interesados en Go.
Me gusta Python. Este lenguaje ha sido mi favorito durante los últimos cinco años. Es amigable, eficiente y fácil de aprender. Se utiliza prácticamente para todo: desde la creación de simples scripts y el desarrollo web hasta la visualización de datos y el aprendizaje automático.
El gradual "maduración" de Go, su amplia comunidad y el hecho de que cada vez más empresas adoptan este lenguaje tras pruebas exitosas me hicieron prestarle atención y profundizar en su literatura. Pero esta publicación no trata sobre qué es mejor: Python o Go: hay una gran cantidad de comparaciones en la red. En mi opinión, todo depende del área de aplicación. Voy a contar por qué elegí Go, dando algunos consejos y enlaces a recursos útiles para todos los interesados en el tema.
Skillbox recomienda: Curso práctico .
Recordamos: para todos los lectores de «Habr» — un descuento de 10,000 rublos al registrarse en cualquier curso de Skillbox usando el código promocional «Habr».

Observaciones
Lo primero que hice al inicio de mi camino fue estudiar el excelente tutorial oficial “”. Proporciona comprensión de la sintaxis del lenguaje.
Para mejorar mis conocimientos, también leí el libro “”, que me permitió pasar a la siguiente etapa: prueba y error.
Tomé funciones familiares que usaba en Python (serialización JSON o trabajo con llamadas HTTP) y traté de escribirlas en Go. Gracias a esta comparación visual, pude identificar las diferencias clave entre los lenguajes.
Estructura del proyecto
Primero que todo, Python no requiere una jerarquía de directorios específica, mientras que Go sí.
Go utiliza una estructura "estándar", que es un poco más compleja y requiere más trabajo. Por otro lado, como resultado obtenemos una base de código bien estructurada, donde se utiliza una estructura modular, y al expandir el proyecto, el código permanece estrictamente ordenado.
El tutorial oficial “” explica cómo organizar tu trabajo.
Tipado estático estricto
Go es estáticamente tipado, y esto hará que los que están acostumbrados a lenguajes dinámicamente tipados como Python y Ruby se sientan fuera de lugar.
No hay duda de que los lenguajes dinámicos son más propensos a errores, se requiere 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 enteros. Si se pasa una cadena a la función (lo cual no es tan raro), se producirá un error de tipo TypeError.
En Go, esto no puede ocurrir, ya que aquí es necesario declarar el tipo para cada variable y función, así como el tipo que la función devolverá.
Al principio es frustrante: pensé que esta característica de Go ralentizaba el trabajo, pero luego comprendí que de hecho declarar todo ahorra tiempo y disminuye la probabilidad de error.
Paralelismo nativo
Go tiene soporte nativo para paralelismo mediante goroutines y canales, lo que resulta conveniente.
El concepto de canales parece algo confuso al principio. Sin embargo, con el tiempo, se vuelve más comprensible y comienzas a disfrutar de las nuevas posibilidades al trabajar activamente con ellos.
Aquí hay una visualización de todo lo mencionado por .
package main
func main() {
// crear un nuevo canal de tipo int
ch := make(chan int)
// iniciar una nueva goroutine anónima
go func() {
// enviar 42 al canal
ch <- 42
}()
// leer del canal
<-ch
} 
Más ejemplos y .
Trabajando con JSON
Bueno, json.loads() ya no existe. En Python es sencillo: usamos json.loads y no hay problema.
Pero en Go, un lenguaje estáticamente tipado, esta operación se vuelve más complicada.
Aquí, al usar JSON, todo está previamente definido. Cualquier campo que no se ajuste a la estructura especificada se ignorará, y eso es bueno. Se puede pensar en esto como un protocolo preacordado entre dos partes. Los datos que recibes en JSON deben ser esperados, y los campos y tipos 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, puedes deserializar JSON sin estructuras, pero siempre se debe evitar esto en la medida de lo posible, considerando la naturaleza estática del lenguaje.
La decodificación de JSON en GO se explica mejor o .
¿Te da pereza convertir tu JSON en una estructura Go? No hay problema, .
Código limpio
El compilador de Go siempre tratará de mantener tu código «limpio». 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 formateo. Así, Go ejecutará el programa gofmt al guardar o compilar y corregirá automáticamente el formateo.
¿No te importan las variables? ¡Está bien! Simplemente usa _ (guion bajo) y asígnalo a un identificador vacío.
El tutorial Maestrid para esta parte del trabajo con el lenguaje es la información de “”.
Buscar la biblioteca y los frameworks adecuados
He usado con Python frameworks y bibliotecas como Flask, Jinja2, Requests e incluso Kazoo, 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 permiten olvidar completamente lo que usabas antes.
Aquí están mis favoritos.
Python Requests => net/http
proporciona una implementación de cliente y servidor HTTP que es conveniente y fácil de usar.
Flask + Jinja2 => Gin
es un framework web HTTP con una API muy simple: parámetros en la ruta, archivos subidos, enrutamiento de grupos (/api/v1, /api/v2), formatos de registro personalizados, servido de archivos estáticos, renderizado de HTML y middleware personalizado realmente potente.
Evalúa el benchmark.
Creación de CLI => Cobra
es una biblioteca para crear potentes aplicaciones de CLI, así como un programa para generar aplicaciones y archivos de comandos.
Cobra se utiliza en muchos grandes proyectos de Go, 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 evaluar estos y .
[2] .
[3] .
[4] , , son cuentas de Twitter.
Resumen
Siendo un usuario habitual de Python durante cinco años, temía que la transición a Go fuera dolorosa.
Pero no: hay desarrollos de la comunidad de Go que amplían y complementan las capacidades del lenguaje, así como varios recursos útiles que te ayudarán en la transición.
Go está evolucionando rápidamente, y espero que Google logre convertirlo en el lenguaje principal para desarrollar aplicaciones y soluciones en la nube.
¡Únete!

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