
Do tradutor: traducido . 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 .
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".

Observacións
O primeiro que fixen ao comezo da viaxe foi estudar o excelente titorial oficial "". Dá unha comprensión da sintaxe da lingua.
Para mellorar os meus coñecementos, tamén lin o libro “”, 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 "explica 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 .
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áis exemplos и .
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 ou .
Demasiado preguiceiro converter o teu JSON nunha estrutura Go? Sen problema, .
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 “".
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
ofrece unha implementación de servidor e cliente HTTP conveniente e fácil de usar.
Flask + Jinja2 => 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 punto de referencia.
Creación de CLI => 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: , e esta incrible lista - .
Outros recursos útiles
[1] - Definitivamente cómpre avaliar estes и .
[2] . [3] . [4] , , - 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!

Skillbox recomenda:
- Curso práctico de dous anos .
- Curso educativo online .
- Curso práctico anual .
Fonte: www.habr.com
