Íme néhány elképesztő előnye a Go-nak, amelyekről nem sokat hallasz

Ebben a cikkben megvitatom, miért adhat esélyt a Go-nak, és hol kezdje.

A Golang egy olyan programozási nyelv, amelyről sokat hallottál az elmúlt pár évben. Annak ellenére, hogy még 2009-ben hozták létre, csak az utóbbi években kezdett népszerűvé válni.

Ez a cikk nem a Go fő értékesítési pontjairól szól, amelyeket általában lát.

Ehelyett szeretnék bemutatni nektek néhány meglehetősen kicsi, de mégis jelentős funkciót, amelyeket csak azután ismerhet meg, miután elhatározta, hogy megpróbálja a Go-t.

Ezek csodálatos tulajdonságok, amelyeket nem a felszínen helyeznek el, de hetek vagy hónapok munkáját megtakaríthatják. Élvezetesebbé tehetik a szoftverfejlesztést is.

Ne aggódjon, ha a Go valami új az Ön számára. Ez a cikk nem igényel semmilyen előzetes tapasztalatot a nyelvvel kapcsolatban. Alul feltettem néhány extra linket, hátha szeretne még többet megtudni.

Olyan témákat fogunk átnézni, mint:

  • GoDoc
  • Statikus kódelemzés
  • Beépített tesztelési és profilozási keretrendszer
  • Versenyfeltételek felismerése
  • Tanulási görbe
  • Visszaverődés
  • Véleményszerűség
  • Kultúra

Felhívjuk figyelmét, hogy a lista nem követi az adott sorrendet. Pokolnak is vélik.

GoDoc

A Go-ban a kóddokumentációt nagyon komolyan veszik. Így az egyszerűség is.

A GoDoc egy statikus kódelemző eszköz, amely gyönyörű dokumentációs oldalakat hoz létre közvetlenül a kódból. Figyelemre méltó dolog a GoDoc-ban, hogy nem használ semmilyen extra nyelvet, például JavaDoc, PHPDoc vagy JSDoc a konstrukció feljegyzéséhez a kódban. Csak angol.

A dokumentáció felvázolásához, felépítéséhez és formázásához annyi információt használ fel, amennyit a kódtól kaphat. És benne van az összes harang és síp, például kereszthivatkozások, kódminták és közvetlen linkek a verziókezelő rendszer adattárába.

Csak annyit tehet, hogy hozzáad egy jó régi // MyFunc transforms Foo into Barmegjegyzést, amely a dokumentációban is megjelenik. Akár olyan kódpéldákat is felvehet, amelyek valóban futtathatók a webes felületen vagy helyben.

A GoDoc az egyetlen dokumentációs motor a Go számára, amelyet az egész közösség használ. Ez azt jelenti, hogy minden Go-ban írt könyvtárnak vagy alkalmazásnak ugyanaz a formátuma a dokumentációnak. Hosszú távon rengeteg időt takarít meg a dokumentumok böngészése közben.

Itt van például a legutóbbi kisállat-projektem GoDoc oldala: pullkee - GoDoc.

Statikus kódelemzés

A Go nagyban támaszkodik a statikus kód elemzésére. Ilyen például a godoc a dokumentációhoz, a gofmt a kódformázáshoz, a golint a kódstílus szögeléséhez és még sok más.

Olyan sok van belőlük, hogy létezik még egy mindent magában foglaló, gometalinter nevű projekt is, amely mindegyiket egyetlen segédprogramba állítja össze.

Ezeket az eszközöket általában önálló parancssori alkalmazásokként valósítják meg, és könnyen integrálhatók bármilyen kódolási környezettel.

A statikus kódelemzés valójában nem valami újdonság a modern programozásban, de a Go egyfajta abszolút értéket hoz. Nem tudom túlértékelni, hogy mennyi idő mentett meg. Emellett biztonságérzetet ad, mintha valaki eltakarná a hátadat.

Nagyon egyszerű létrehozni saját elemzőit, mivel a Go dedikált beépített csomagokat tartalmaz a Go források elemzéséhez és kezeléséhez.

Tudjon meg többet erről a beszélgetésről: GothamGo Kickoff Meetup: Go Static Analysis Tools, Alan Donovan.

Beépített tesztelési és profilozási keretrendszer

Próbáltál már kiválasztani egy tesztelési keretet egy Javascript-projekthez, amelyet a nulláról indítasz? Ha igen, akkor megértheti azt a küzdelmet, amikor ilyen elemzési bénulást él át. Talán rájött arra is, hogy nem a választott keret 80% -át használja.

A probléma ismételten ismétlődik, ha megbízható profilalkotást kell végeznie.

A Go beépített tesztelő eszközzel rendelkezik az egyszerűség és a hatékonyság érdekében. Ez biztosítja a lehető legegyszerűbb API-t és minimális feltételezéseket tesz. Használhatja különféle tesztelésekhez, profilok készítéséhez, sőt futtatható kód példák megadásához is.

CI-barát kimenetet készít out-of-box, és a használata általában ugyanolyan egyszerű, mint a futtatás go test. Természetesen olyan fejlett funkciókat is támogat, mint a tesztek párhuzamos futtatása, kihagyott jelölés és még sok más.

Versenyfeltételek felismerése

Lehet, hogy már tud a Goroutines-ről, amelyeket a Go alkalmazásban használnak az egyidejű kódfuttatás elérésére. Ha nem, akkor itt egy igazán rövid magyarázat.

A komplex alkalmazásokban az egyidejű programozás soha nem könnyű, a sajátos technikától függetlenül, részben a versenykörülmények lehetőségének köszönhetően.

Egyszerűen fogalmazva, a versenykörülmények akkor fordulnak elő, amikor több egyidejű művelet előre nem látható sorrendben fejeződik be. Ez hatalmas számú hibához vezethet, amelyeket különösen nehéz üldözni. Töltött már egy napot egy integrációs teszt hibakeresésével, amely csak a kivégzések mintegy 80% -ában működött? Valószínűleg versenyfeltétel volt.

Mindezek ellenére az egyidejű programozást nagyon komolyan veszik a Go-ban, és szerencsére elég hatékony eszközünk van arra, hogy levadásszuk ezeket a versenyfeltételeket. Teljes mértékben integrálva van a Go eszközláncába.

Itt többet olvashat róla, és megtanulhatja a használatát: Bemutatjuk a Go Race Detector - The Go blogot.

Tanulási görbe

Egyetlen este megtanulhatja az ALL Go nyelvi jellemzőit. Úgy értem. Természetesen létezik a szokásos könyvtár, és a legjobb gyakorlatok a különböző, specifikusabb területeken. Két óra azonban elegendő idő lenne ahhoz, hogy magabiztosan írjon egy egyszerű HTTP-kiszolgálót vagy egy parancssori alkalmazást.

A projekt csodálatos dokumentációval rendelkezik, és a haladó témák többségét már a blogjuk is lefedte: a Go programozási nyelv blog.

A Go sokkal könnyebben hozható el a csapatához, mint a Java (és a család), a Javascript, a Ruby, a Python vagy akár a PHP. A környezet könnyen beállítható, és a csapatának befektetése sokkal kisebb, mielőtt az első gyártási kódot kitölthetné.

Visszaverődés

A kódreflexió lényegében az a képesség, hogy besurranhat a motorháztető alá, és különböző típusú metainformációkhoz férhet hozzá a nyelvi konstrukciókról, például változókról vagy függvényekről.

Tekintettel arra, hogy a Go statikusan tipizált nyelv, számos különféle korlátozásnak van kitéve, ha lazábban beírt absztrakt programozásról van szó. Különösen az olyan nyelvekhez képest, mint a Javascript vagy a Python.

Ráadásul a Go nem hajtja végre a Generics nevű koncepciót, ami még nagyobb kihívást jelent a több típussal elvont módon történő munka érdekében. Ennek ellenére sokan úgy gondolják, hogy ez valóban előnyös a nyelv számára, a Generics által előidézett bonyolultság miatt. És teljesen egyetértek.

Go filozófiája szerint (ami maga is egy külön téma), keményen meg kell próbálnia, hogy ne alakítsa túl a megoldásait. És ez érvényes a dinamikusan tipizált programozásra is. Ragaszkodjon a statikus típusokhoz, amennyire csak lehetséges, és használjon interfészeket, ha pontosan tudja, hogy milyen típusokkal van dolga. Az interfészek nagyon erősek és mindenütt jelen vannak a Go-ban.

Vannak azonban olyan esetek, amikor nem lehet tudni, hogy milyen adatokkal néz szembe. Remek példa a JSON. Mindenféle adatot oda-vissza konvertál az alkalmazásokban. Karakterláncok, pufferek, mindenféle számok, beágyazott struktúrák és egyebek.

Ahhoz, hogy ezt lehessen elérni, szükség van egy eszközre, amely az összes adatot futás közben megvizsgálja, és típusától és felépítésétől függően másképp működik. Tükröződés a mentéshez! A Go rendelkezik egy első osztályú reflektáló csomaggal, amely lehetővé teszi, hogy a kód ugyanolyan dinamikus legyen, mint egy olyan nyelven, mint a Javascript.

Fontos figyelmeztetés, hogy tudd, milyen árat fizetsz a használatáért - és csak akkor használd, ha nincs egyszerűbb módszer.

Bővebben itt olvashat róla: Az elmélkedés törvényei - The Go blog.

Itt olvashat néhány valós kódot a JSON csomagforrásokból is: src / encoding / json / encode.go - Forráskód

Véleményszerűség

Van egyébként ilyen szó?

A Javascript világból érkezve az egyik legfélelmetesebb folyamat, amellyel szembesültem, annak eldöntése, hogy mely konvenciókat és eszközöket kell használnom. Hogyan formázzam a kódomat? Milyen tesztkönyvtárat használjak? Hogyan folytassam a struktúrát? Milyen programozási paradigmákra és megközelítésekre kell támaszkodnom?

Ami néha alapvetően elakasztott. A kód megírása és a felhasználók kielégítése helyett ezt tettem.

Először is meg kell jegyeznem, hogy teljesen odaértem, ahonnan ezeknek a konvencióknak származniuk kell. Mindig te és a csapatod. Egyébként még a tapasztalt Javascript-fejlesztők egy csoportja is könnyen tapasztalhatja, hogy teljesen más eszközökkel és paradigmákkal rendelkezik a tapasztalatok nagy részével, hogy ugyanolyan eredményeket érjen el.

Ez az elemzési bénulási felhő felrobban az egész csapatban, és megnehezíti az egyének integrációját is egymással.

Nos, a Go más. Csak egy stílus útmutatója van, amelyet mindenki követ. Csak egy tesztelési keretrendszere van, amely az alapvető eszköztárba van beépítve. Sok határozott véleménye van arról, hogyan kell strukturálni és fenntartani a kódot. Hogyan válasszunk neveket. Milyen strukturáló mintákat kell követni. Hogyan lehet jobban csinálni a párhuzamosságot.

Bár ez túl korlátozónak tűnhet, rengeteg időt takarít meg Ön és csapata számára. A kissé korlátozott valójában nagyszerű dolog, amikor kódolsz. Ez egyszerűbb utat ad Önnek az új kódok elkészítésekor, és megkönnyíti a meglévőkkel kapcsolatos okfejtéseket.

Ennek eredményeként a Go projektek többsége kódban bonyolultnak tűnik.

Kultúra

Az emberek azt mondják, hogy minden alkalommal, amikor új beszélt nyelvet tanul, az adott nyelvet beszélő emberek kultúrájának bizonyos részeibe is belemerül. Így minél több nyelvet tanul, annál több személyes változást tapasztalhat.

Ugyanez van a programozási nyelvekkel is. Függetlenül attól, hogy a jövőben hogyan fogsz alkalmazni egy új programozási nyelvet, ez mindig új perspektívát ad a programozásról általában, vagy néhány speciális technikáról.

Legyen szó funkcionális programozásról, mintaillesztésről vagy prototípus öröklésről. Miután megtanulta, magával viszi ezeket a megközelítéseket, amelyek kibővítik a szoftverfejlesztőként meglévő problémamegoldó eszközkészletet. Ez megváltoztatja azt is, ahogyan a jó minőségű programozást általában látja.

És a Go itt fantasztikus befektetés. A Go kultúrájának fő pillére az egyszerű, földhözragadt kód megtartása anélkül, hogy sok redundáns absztrakciót létrehozna, és a karbantarthatóságot a legfelsőbb helyre helyezné. A kultúra része az is, hogy a legtöbb időt ténylegesen a kódbázison dolgozzuk, ahelyett, hogy bütykölnénk az eszközökkel és a környezettel. Vagy választani ezek különböző változatai között.

A Go arról is szól, hogy „csak egy módon lehet dolgot csinálni”.

Egy kis mellékjegyzet. Részben az is igaz, hogy a Go általában akkor áll az útjába, amikor viszonylag összetett absztrakciókat kell építenie. Nos, azt mondanám, hogy ez a kompromisszum az egyszerűsége miatt.

Ha valóban sok absztrakt kódot kell írni összetett kapcsolatokkal, akkor jobb, ha olyan nyelveket használ, mint a Java vagy a Python. Még akkor is, ha ez nem nyilvánvaló, nagyon ritkán fordul elő.

Mindig használja a legjobb eszközt a munkához!

Következtetés

Lehet, hogy már hallottál a Go-ról. Vagy talán valami, ami egy ideje nem tartózkodik a radarodon. Akárhogy is, nagy eséllyel a Go nagyon jó választás lehet az Ön vagy csapata számára, amikor új projektet indít vagy javítja a meglévőt.

Ez nem egy teljes lista a Go összes csodálatos dolgáról. Csak az alulértékelteket .

Kérjük, próbálja ki a Go-t egy A Tour of Go-val, amely hihetetlen hely a kezdéshez.

Ha többet szeretne megtudni a Go előnyeiről, nézze meg az alábbi linkeket:

  • Miért kellene megtanulnod a Go-t? - Keval Patel - közepes
  • Búcsú Node.js - TJ Holowaychuk - közepes

Ossza meg észrevételeit a megjegyzésekben!

Még akkor is, ha nem kifejezetten új nyelvet keres, hogy használjon, érdemes egy-két órát eltölteni annak érzésével. És talán a jövőben nagyon hasznos lehet számodra.

Mindig keresse kézművének legjobb eszközeit!

Ha tetszik ez a cikk, kérjük, fontolja meg további követésemet, és kattintson a vicces zöld kis kezekre közvetlenül a szöveg alatt, hogy megossza. ???

Nézze meg a Githubomat, és kövessen a Twitteren!