
Fra oversĂŠtteren: overfĂžrt . The article will be useful not only for beginner programmers but for anyone interested in Go in any way.
I like Python. This language has been my favorite for the last five years. It is friendly, efficient, and easy to learn. It is used for almost everything: from creating simple scripts and web development to data visualization and machine learning.
The gradual 'maturation' of Go, its extensive community, and the fact that more and more companies are adopting this language after successful trials made me pay attention to it and dive into the literature. But this post is not about which one is better â Python or Go: there are countless comparisons online. In my opinion, it all depends on the area of application. I intend to explain why I chose Go, offering some tips and links to useful resources for anyone interested in the topic.
Skillbox anbefaler: Praktisk kursus .
Vi minder om: til alle lĂŠsere af 'Habr' â rabat pĂ„ 10.000 rubler ved tilmelding til et hvilket som helst Skillbox-kursus med rabatkoden 'Habr'.

Observations
The first thing I did at the beginning of my journey was to study the excellent official tutorial ââ. It provides an understanding of the syntax of the language.
To improve my knowledge, I also read the book ââ, which allowed me to move on to the next stage â trial and error.
I took familiar functions that I used in Python (JSON serialization or working with HTTP calls) and tried to write them in Go. This clear comparison allowed me to identify key differences between the languages.
Project Layout
First of all, Python does not require a specific directory hierarchy, while Go does.
Go uses a 'standard' layout, which is slightly more complex and requires more work. On the other hand, as a result, we get a well-structured code base that uses a modular structure, and when expanding the project, the code remains strictly organized.
The official tutorial ââ explains how to organize your work.
Static Strong Typing
Go is statically typed, and this will make those used to dynamically typed languages like Python and Ruby feel out of place.
Der er ingen tvivl om, at dynamiske sprog er mere udsatte for fejl; udvikleren skal lĂŠgge mere arbejde i at validere input. Et eksempel er en funktion, der beregner summen af to heltal. Hvis der sendes en streng til funktionen (hvilket sker oftere, end man tror), vil det medfĂžre en TypeError.
I Go kan dette ikke ske, da man skal erklĂŠre typen for hver variabel og funktion samt hvilken type variabel funktionen vil returnere.
FÞrst er det irriterende: jeg troede, at denne egenskab ved Go gjorde det langsommere, - men sÄ indsÄ jeg, at deklarationen af alt faktisk sparer tid, og at sandsynligheden for fejl reduceres.
IndfĂždt parallelisme
Go har indbygget stĂžtte til parallelisme ved hjĂŠlp af goroutines og kanaler - det er praktisk.
Konceptet med kanaler virker til at begynde med lidt forvirrende. Men med tiden bliver det mere klart, og man begynder at nyde de nye muligheder ved aktivt at arbejde med dem.
Her er en visualisering af alt det, der er blevet sagt fra .
package main
func main() {
// opret en ny kanal af typen int
ch := make(chan int)
// start en ny anonym goroutine
go func() {
// send 42 til kanalen
ch <- 42
}()
// lĂŠs fra kanalen
<-ch
} 
Flere eksempler og .
Arbejde med JSON
NĂ„, json.loads() er der ikke lĂŠngere. I Python er det enkelt: brug json.loads, og der er ikke problemer.
Men i Go, et statisk typet sprog, bliver denne operation mere kompliceret.
NÄr du bruger JSON i Go, er alt foruddefineret. Ethvert felt, der ikke passer ind i den givne struktur, vil blive ignoreret, og det er godt. Man kan tÊnke pÄ dette som en forudsigelig protokol mellem to parter. De data, du modtager i JSON, skal vÊre forventede, og felterne samt JSON-typerne er 'aftalt' mellem begge parter.
{
"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"`
}SelvfÞlgelig kan du deserialisere JSON uden strukturer, men dette bÞr undgÄs, nÄr det er muligt, og den statiske natur af sproget bÞr tages i betragtning.
Dekodning af JSON i GO forklares bedst eller .
Er du doven til at konvertere din JSON til Go-struktur? Ingen problemer, .
Rent kode
Go-kompilatoren vil altid forsÞge at holde din kode 'ren'. Den betragter ikke-brugte variabler som en kompilationsfejl. Go bruger en unik tilgang, som tillader systemet at lÞse de fleste formateringsproblemer. NÄr du gemmer eller kompilere, vil Go kÞre programmet gofmt og automatisk rette formateringen.
Er du ligeglad med variabler? Okay! Bare brug _ (underscore) og tildel den til en tom identifikator.
En must-read tutorial til denne del af arbejdet med sproget er information fra ââ.
SĂžgning efter egnede biblioteker og rammer
Jeg brugte rammer og biblioteker som Flask, Jinja2, Requests og endda Kazoo med Python, sÄ jeg var bange for, ikke at finde noget passende til Go.
Men fĂŠllesskabet har allerede lĂžst disse problemer: sproget har sine egne unikke biblioteker, som gĂžr, at du helt kan glemme det, du brugte tidligere.
Her er mine favoritter.
Python Requests => net/http
tilbyder en praktisk og brugervenlig implementation af HTTP-klient og server.
Flask + Jinja2 => Gin
er et HTTP-webframework med et meget simpelt API: parametre i stien, uploadede filer, gruppering af ruter (/ api / v1, / api / v2), brugerdefinerede logformat, betjening af statiske filer, rendering af HTML og virkelig kraftfuld brugerdefineret middleware.
Vurder benchmark.
CLI oprettelse => Cobra
er et bibliotek til oprettelse af kraftfulde CLI-ansĂžgninger, samt et vĂŠrktĂžj til at generere applikationer og kommandofiler.
Cobra anvendes i mange store Go-projekter, herunder Kubernetes, etcd og OpenShift.
Her er nogle flere biblioteker, som jeg varmt anbefaler: , og denne fantastiske liste â .
Andre nyttige ressourcer
[1] ââ âdu skal bestemt tjekke disse og .
[2] .
[3] .
[4] , , â Twitter-konti.
Sammenfatning
Som en langvarig bruger af Python i fem Är, var jeg bange for, at overgangen til Go ville vÊre smertefuld.
Men nej: der er samfundsudviklinger i Go, der udvider og supplerer sprogets muligheder, samt forskellige nyttige ressourcer, som ogsÄ vil hjÊlpe dig med overgangen.
Go udvikler sig hurtigt, og jeg hÄber, at Google kan gÞre det til det primÊre sprog for udvikling af cloud-applikationer og infrastruktur.
Deltag!

Skillbox anbefaler:
- ToÄrigt praktisk kursus .
- Online uddannelseskursus .
- Praktisk Ärs kursus .
Kilde: habr.com
