
A fordítótól: fordították . A cikk nemcsak kezdő programozók számára lehet hasznos, hanem mindenkinek, aki érdeklődik a Go iránt.
Szeretem a Pythont. Ez a nyelv az utolsó öt évben a kedvencem volt. Barátságos, hatékony, és könnyen tanulható. Szinte mindenre használható: egyszerű szkriptek készítésétől és webfejlesztéstől kezdve az adatok vizualizációjáig és a gépi tanulásig.
A Go fokozatos „érlelése”, a széles közösség, valamint az a tény, hogy egyre több cég fogadja el ezt a nyelvet sikeres tesztek után, arra késztettek, hogy figyelmet fordítsak rá és elmélyedjek a irodalomban. De ez a bejegyzés nem arról szól, hogy mi a jobb – Python vagy Go: az interneten rengeteg összehasonlítás található. Véleményem szerint minden az alkalmazási területtől függ. El szeretném mondani, miért választottam a Go-t, adok néhány tanácsot és linket hasznos forrásokhoz mindenkinek, aki érdeklődik a téma iránt.
A Skillbox ajánlja: Gyakorlati kurzus .
Emlékeztetjük: minden «Habr» olvasónak 10 000 rubeles kedvezmény jár bármely Skillbox kurzus jelentkezésekor a «Habr» promóciós kód felhasználásával.

Megfigyelések
Az első dolog, amit az út kezdetén tettem, az volt, hogy megtanultam egy nagyszerű hivatalos útmutatót „”. Ez megadja a nyelv szintaxisának megértését.
A tudásom fejlesztése érdekében olvastam egy másik könyvet is „”, ami lehetővé tette, hogy átugorjam a következő szakaszra – kísérletezés és hibák.
Azokkal a megszokott funkciókkal próbálkoztam, amelyeket a Pythonban használtam (JSON sorosítás vagy HTTP hívások kezelése), és megpróbáltam megírni őket Go-ban. Az ilyen kézzelfogható összehasonlítás révén sikerült feltárnom a nyelvek közötti kulcsfontosságú eltéréseket.
A projekt felépítése
Elsősorban a Python nem igényel speciális mappastruktúrát, míg a Go igen.
A Go a „szabványos” felépítést használja, amely egy kicsit bonyolultabb és több munkát igényel. Másrészt az eredmény egy jól strukturált kód alap, ahol moduláris felépítés használatos, és a projekt bővítésekor a kód továbbra is szigorúan rendezett marad.
A hivatalos útmutató „” magyarázza, hogyan lehet megszervezni a munkáját.
Statikus szigorú típusszabályozás
A Go statikusan típusos, és ez idegennek érezheti magát azok számára, akik a dinamikusan típusos nyelvekhez, mint a Python és a Ruby, szoktak.
Nincs kétség afelől, hogy a dinamikus nyelvek hajlamosabbak a hibákra, a fejlesztőtől pedig több erőfeszítést igényel a bemeneti adatok ellenőrzése. Példa — egy olyan függvény, amely két egész szám összegét számolja. Ha egy karakterláncot adunk át a függvénynek (ami nem olyan ritka), az TypeError hibához vezet.
A Go-ban ilyesmi nem történhet meg, mivel itt minden változóhoz és függvényhez meg kell határozni a típust, valamint azt is, hogy a függvény milyen típust ad vissza.
Először zavaró volt: azt hittem, hogy a Go ezen jellemzője lassítja a munkát – de később rájöttem, hogy valójában mindennek a deklarálása időt takarít meg, és csökkenti a hibák valószínűségét.
Natív párhuzamosság
A Go natív párhuzamosságot biztosít szubprogramok és csatornák használatával — ez nagyon kényelmes.
A csatornák koncepciója elsőre kissé zavarosnak tűnik. Azonban idővel egyre világosabbá válik, és elkezded élvezni az új lehetőségeket, aktívan dolgozva velük.
Itt van az összes eddigit vizuálisan .
package main
func main() {
// új csatorna létrehozása int típussal
ch := make(chan int)
// új anonim goroutine indítása
go func() {
// 42 küldése a csatornára
ch <- 42
}()
// olvasás a csatornából
<-ch
} 
További példák és .
A JSON kezelés
Nos, json.loads() már nincs. A Pythonban ez egyszerű: használjuk a json.loads-ot, és nincs probléma.
De a Go-ban, amely statikusan típusos nyelv, ez a művelet bonyolultabbá válik.
Itt a JSON használata során minden előre meghatározott. Bármilyen mező, amely nem illeszkedik a megadott struktúrába, figyelmen kívül marad, ami jó. Ezt előre megállapodott protokollként lehet értelmezni a két fél között. Az adatok, amelyeket JSON-ban kapsz, várhatók, és a JSON mezők és típusok "megállapodtak" mindkét fél által.
{
"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"`
}Természetesen JSON-t strukturák nélkül is deszerializálhatsz, de ezt a lehetőségekhez képest érdemes elkerülni, figyelembe véve a nyelv statikus természetét.
A JSON dekódolása a GO-ban a legjobban vagy .
Lusták vagytok konvertálni a JSON-ot Go struktúrába? Nincs probléma, .
Tiszta kód
A Go compiler will always strive to keep your code 'clean.' It considers unused variables a compilation error. Go uses a unique approach that allows the system to solve most formatting issues. Thus, Go will run the gofmt program upon saving or compiling and will automatically correct the formatting.
Don't care about variables? Okay! Just use _ (underscore) and assign it to an empty identifier.
A must-read tutorial for this part of working with the language is information from “”.
Searching for suitable libraries and frameworks
I used frameworks and libraries with Python like Flask, Jinja2, Requests, and even Kazoo, so I was worried I wouldn’t find anything suitable for Go.
But the community has already solved these issues: the language has its own unique libraries that allow you to completely forget about what you used before.
Here are my favorites.
Python Requests => net/http
provides a convenient and easy-to-use implementation of an HTTP client and server.
Flask + Jinja2 => Gin
is an HTTP web framework with a very simple API: path parameters, file uploads, group routing (/api/v1, /api/v2), custom log formats, serving static files, HTML rendering, and truly powerful custom middleware.
Check out the benchmark.
CLI Creation => Cobra
is a library for creating powerful CLI applications, as well as a tool for generating applications and command files.
Cobra is used in many large Go projects, including Kubernetes, etcd, and OpenShift.
Here are a few more libraries that I highly recommend: , and this amazing list — .
Other useful resources
[1] — you definitely need to check out these és .
[2] .
[3] .
[4] , , — Twitter accounts.
Összegzés
Having been a regular Python user for five years, I was afraid that switching to Go would be painful.
But no: there are community practices in Go that enhance and extend the capabilities of the language, as well as various useful resources that will help you with the transition.
Go is rapidly evolving, and I hope that Google will make it the primary language for cloud applications and infrastructure.
Csatlakozzatok!

A Skillbox ajánlja:
- Kétéves gyakorlati tanfolyam .
- Oktatási online kurzus .
- Gyakorlati éves kurzus .
Forrás: habr.com
