Meng Rees vu Python op Go - Tipps a Ressourcen deelen

Meng Rees vu Python op Go - Tipps a Ressourcen deelen

Vum Iwwersetzer: iwwersat Fir Iech, dem Ilad Leev sÀin Artikel iwwer den Iwwergank vu Python op Go. Den Artikel wÀert nëtzlech sinn net nëmme fir UfÀnger Programméierer, awer och fir jiddereen deen iergendwéi un Go interesséiert ass.

Ech hu gÀr Python. Dës Sprooch war meng Léifsten fir déi lescht fënnef Joer. Hien ass frëndlech, effizient an einfach ze léieren. Benotzt fir bal alles: vun einfache Skripting a Webentwécklung bis Datenvisualiséierung a Maschinnléieren

Déi graduell "Reifung" vu Go, déi extensiv Gemeinschaft an d'Tatsaach, datt ëmmer méi Firmen dës Sprooch no erfollegrÀichen Tester adoptéieren, hunn mech gezwongen drop opmierksam ze maachen an an d'Literatur ze verdéiwen. Awer dëse Post ass net iwwer wat besser ass - Python oder Go: Et ginn eng grouss Zuel vu VerglÀicher um Internet. Menger Meenung no hÀnkt alles vun der Applikatioun of. Ech wÀert schwÀtzen iwwer firwat ech Go gewielt hunn, ginn e puer Tipps a Linken op nëtzlech Ressourcen fir jiddereen interesséiert am Thema.

Skillbox recommandéiert: Praktesch Cours Python Entwéckler vun Null.

Mir erënneren Iech: fir all Habr Lieser - eng Remise vun 10 Rubel wann Dir Iech an all Skillbox Cours aschreift mat dem Habr Promo Code.

Meng Rees vu Python op Go - Tipps a Ressourcen deelen

Observatiounen

Dat éischt wat ech am Ufank vu menger Rees gemaach hunn war den exzellenten offiziellen Tutorial studéieren "Tour Of Go" Et gëtt e VerstÀndnis vun der Syntax vun der Sprooch.

Fir mÀi Wëssen ze verbesseren, liesen ech och d'Buch "Gitt fir Python Programmer", wat eis erlaabt huet op déi nÀchst Etapp weiderzemaachen - Versuch a Feeler.

Ech hunn déi vertraute Funktiounen geholl, déi ech am Python benotzt hunn (JSON Serialiséierung oder HTTP-Uriff behandelen) a probéiert se a Go ze schreiwen. Dank dësem klore Verglach konnt ech Schlëssel Differenzen tëscht Sproochen identifizéieren.

Projet Layout

Als éischt erfuerdert Python keng spezifesch Verzeechneshierarchie, wÀrend Go et mécht.

Go benotzt de "Standard" Layout, deen e bësse méi komplex ass a méi Aarbecht erfuerdert. Op der anerer SÀit ass d'Resultat eng gutt strukturéiert Codebasis déi eng modulÀr Struktur benotzt, an de Code bleift strikt organiséiert wéi de Projet erweidert.

Offiziell Tutorial "WĂ©i schreiwen ech Go Code" erklĂ€ert wĂ©i Dir Är Aarbecht organisĂ©iert.

Statesch staark Tippen

Go ass statesch getippt, wat déi benotzt fir dynamesch getippte Sprooche wéi Python a Ruby onwuel fillt.

Et gëtt keen Zweiwel datt dynamesch Sprooche méi Feeler ufÀlleg sinn a méi Effort vum Entwéckler erfuerderen fir Inputdaten ze validéieren. E Beispill ass eng Funktioun déi d'Zomm vun zwee ganz Zuelen berechent. Wann Dir e String un eng Funktioun passéiert (wat net sou rar ass), wÀert et zu engem TypeError resultéieren.

Dëst kann net am Go geschéien well Dir en Typ fir all Variabel a Funktioun muss deklaréieren a wéi eng Variabel d'Funktioun zréckkënnt.

Am Ufank war et lÀsteg - ech hu geduecht datt dës Feature vu Go d'Saache verlangsamt huet - awer dunn hunn ech gemierkt datt alles deklaréieren tatsÀchlech ZÀit spuert an d'Wahrscheinlechkeet vu Feeler reduzéiert.

Gebierteg GlÀichzÀiteg

Go huet gebierteg Concurrency ËnnerstĂ«tzung mat Subroutinen a PĂ€ifen, wat bequem ass.

D'Konzept vun de Channels schéngt am Ufank e bësse konfus. Wéi och ëmmer, mat der ZÀit gëtt et méi kloer, an Dir fÀnkt un nei Méiglechkeeten ze genéissen an aktiv mat hinnen ze schaffen.

Hei ass eng Visualiséierung vun allem wat gesot gëtt Ivan Danilyuk.

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
}

Meng Rees vu Python op Go - Tipps a Ressourcen deelen

Méi Beispiller hei О hei.

Schafft mat JSON

Gutt, json.loads() ass net méi. Am Python ass alles einfach: mir benotzen json.loads, an et gi keng Problemer.

Awer am Go, enger statesch getippten Sprooch, gëtt dës Operatioun méi komplex.

Hei, wann Dir JSON benotzt, ass alles virdefinéiert. All Feld dat net an déi gegebene Struktur passt gëtt ignoréiert, wat gutt ass. Dir kënnt et als e viraus ausgemaache Protokoll tëscht zwou Parteien denken. D'Daten, déi Dir am JSON kritt, solle sinn wat Dir erwaart, an d'JSON Felder an Aarte solle vu béide Parteien "ausgemaach" ginn.

{
  “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"`
}

Natierlech kĂ«nnt Dir JSON ouni Strukturen deserialisĂ©ieren, awer dĂ«st sollt vermeit ginn wa mĂ©iglech an d'statesch Natur vun der Sprooch sollt berĂŒcksichtegt ginn.

Decodéieren JSON op GO ass am beschten an dësem Post erklÀert oder hei.

Ze faul fir Ären JSON an eng Go Struktur ze konvertĂ©ieren? Kee Problem, dĂ«st Tool wĂ€ert alles fir Iech maachen.

Propper Code

De Go Compiler wĂ€ert Ă«mmer probĂ©ieren Äre Code propper ze halen. Et betruecht onbenotzt Variabelen als KompilĂ©ierungsfehler. Go benotzt eng eenzegaarteg Approche dĂ©i de System erlaabt dĂ©i meescht FormatĂ©ierungsproblemer ze lĂ©isen. Also, Go wĂ€ert de gofmt Programm lafen wann Dir spĂ€ichert oder kompilĂ©iert a korrigĂ©iert d'FormatĂ©ierung selwer.

Sidd Dir egal iwwer Variabelen? OK! Benotzt einfach _ (ËnnerstĂ«tzung) an zielt et op eng eidel ID.

D'Mastrid Tutorial fir dësen Deel vun der Sprooch ze schaffen ass Informatioun vun "Effektiv Go".

Fannt déi richteg Bibliothéik a Kaderen

Ech hunn Kaderen a Bibliothéike benotzt wéi Flask, Jinja2, Requests, a souguer Kazoo mam Python, also hat ech Angscht datt ech nÀischt géif fannen wat fir Go passt.

Awer d'Gemeinschaft huet dës Probleemer scho geléist: d'Sprooch huet seng eege eenzegaarteg Bibliothéiken, déi Iech erlaben komplett ze vergiessen wat Dir virdru benotzt hutt.

Hei sinn meng Favoritten.

Python Requests => net/http

net/http bitt eng praktesch an einfach ze benotzen HTTP Client a Server Implementatioun.

Flask + Jinja2 => Gin

Gin - HTTP Web Kader mat enger ganz einfacher API: Wee Parameteren, erofzelueden Fichieren, Grupp Routing (/api/v1, /api/v2), personaliséiert Log Formater déi statesch Fichieren déngen, HTML Rendering a wierklech mÀchteg personaliséiert Middleware.
Taux dat benchmark.

CLI Kreatioun => Cobra

Cobra - eng Bibliothéik fir mÀchteg CLI Uwendungen ze kreéieren, souwéi e Programm fir Uwendungen a Batchdateien ze generéieren.
Cobra gëtt a ville grousse Go Projeten benotzt, dorënner Kubernetes, etcd an OpenShift.

Hei sinn e puer méi Bibliothéiken déi ech staark recommandéieren: Viper, Gonfig an dës erstaunlech Lëscht - Awesome-Go.

Aner hëllefrÀich Ressourcen

[1] Francesc Campoy  - Dir musst definitiv dĂ«s bewĂ€erten YouTube Kanal Đž GitHub Profil.

[2] GopherCon - Video. [3] Go Web Beispiller. [4] Golang Weekly, Gopher Academy, Golang Neiegkeeten - Twitter Konten.

Ze summéieren

Nodeems ech e reegelméissege Python Benotzer fir fënnef Joer war, hat ech Angscht datt de Wiessel op Go schmerzhaf wier.

Awer nee: et gëtt Aarbecht vun der Go Gemeinschaft déi d'FÀegkeete vun der Sprooch erweidert an ergÀnzt, souwéi verschidde nëtzlech Ressourcen déi Iech beim Iwwergang hëllefen.

Go wiisst séier, an ech hoffen, datt Google et als primÀr Sprooch maache kann fir Cloud-Applikatiounen an Infrastruktur ze schreiwen.

Maacht elo bÀi!

Meng Rees vu Python op Go - Tipps a Ressourcen deelen

Skillbox recommandéiert:

Source: will.com