Programovanie

Go tutorial: Začíname s Google Go

Prečo by ste chceli používať jazyk Go? V zásade je to stručný, jednoduchý, bezpečný a rýchly kompilovaný jazyk s vynikajúcimi funkciami súbežnosti a ľahko zvláda veľké projekty. Je to tiež bezplatný otvorený zdroj, aj keď bol pôvodne vyvinutý v spoločnosti Google.

Podľa Roba Pikea, jedného z dizajnérov jazyka, „cieľom projektu Go bolo eliminovať pomalosť a neobratnosť vývoja softvéru v spoločnosti Google, a tým zvýšiť produktivitu a škálovateľnosť procesu. Jazyk bol navrhnutý pre ľudí, ktorí píšu - a čítajú, ladia a udržiavajú - veľké softvérové ​​systémy. “

V súlade s týmito cieľmi nemá Go veľa funkcií v niektorých ďalších významných jazykoch - a to je vlastne sila. Go nie je objektovo orientovaný, nemá hlavičkové súbory ani deklarácie dopredu, nemá hierarchiu typov, nemá preťaženie metód alebo operátorov, nemá generické typy, nemá virtuálny stroj za behu, nemá výnimky a nemá tvrdenia.

Na druhej strane to, čo má Go, funguje celkom dobre. Dokáže zostaviť veľké programy za pár sekúnd. Má nízkorozpočtové korutíny (tzv goroutiny), ktoré dokážu efektívne komunikovať prostredníctvom kanály. Má rozhrania a zloženie rozhrania. Go navyše podporuje prvotriedne funkcie, funkcie vyššieho rádu, používateľom definované typy funkcií, funkčné literály, uzávierky a viacnásobné návratové hodnoty - inými slovami podporuje štýl funkčného programovania v jazyku so silným typom písma.

Ak chcete požiadať o niektorú z chýbajúcich funkcií, ktoré som spomenul vyššie, mali by ste si prečítať diskusiu o jazykových zmenách v časti Go language FAQ: Odpoveď je zvyčajne „Nie, pretože ...“ Najlepšie programy Go sú vo všeobecnosti navrhnuté úplne od začiatku na použitie funkcií jazyka Go, a nie preložené doslovne z iných jazykov, ktoré používajú rôzne abstrakcie.

Nainštalujte Go

Krátke pokyny na inštaláciu aplikácie Go sa zobrazia v zdrojovom úložisku. Môžete si stiahnuť binárne vydania Go pre Windows, MacOS a Linux alebo nainštalovať Go zo zdroja. Pokyny na inštaláciu aplikácie Go zo zdroja nájdete na GitHub.

Ak už máte Go nainštalovaný, mali by ste skontrolovať aktuálnu verziu buildu v spodnej časti //golang.org/ a potom skontrolovať svoju nainštalovanú verziu z príkazového riadku:

$ go verzia

Ak je vaša inštalácia zastaraná, stiahnite si a nainštalujte aktuálnu verziu. Reštartujte všetky otvorené príkazové riadky (Windows) alebo terminály. Opakovať go verzia a uistite sa, že verzia je taká, akú ste očakávali; ak nie, môže byť inde nainštalovaná staršia verzia aplikácie Go, ktorú je potrebné odstrániť.

(Nie, nie som paranoidný. Podarilo sa mi dostať sa do situácie, ktorú som popísal pomocou Homebrew na inštaláciu jednej verzie a štandardného balíka MacOS na inštaláciu ďalšej verzie o mesiac alebo neskôr. Inštalujú sa na rôzne miesta na serveri $ CESTA. Len čo som zistil, čo sa stalo, mohol som odinštalovať starú verziu pomocou Homebrew.)

Ďalšou možnosťou inštalácie, ak chcete podporu a odškodnenie a ste schopní platiť, je použitie ActiveGo.

Po nainštalovaní kompilátora a nástrojov Go by ste mali prejsť kompiláciou a spustením programu Go, ako je to popísané v časti „Testovanie inštalácie“ na stránke inštalácie.

Nastavte si svoje prostredie Go

Programátori Go zvyčajne uchovávajú všetok svoj kód v jednom pracovnom priestore s kôš, pkga src priečinky. V rámci každého priečinka majú projekty zvyčajne cesty, ktoré súvisia s úložiskami Git, ako napríklad GitHub alebo GitLab. Napríklad si celý kód jazyka Go ponechávam pod ~ / prácaa nastavím môj GOPATH premenná prostredia na $ DOMOV / práca. Cesta k môjmu priečinku zdrojového kódu „hello.go“ je $ GOPATH / src / github.com / meheller / ahoj.

Pridávam aj GOPATH / kôš adresár na moju cestu, kvôli pohodliu pri spúšťaní programov Go z ľubovoľného adresára:

export GOPATH = $ HOME / práca

export PATH = $ PATH: $ (go env GOPATH) / bin

Jazykové pomôcky Go sa nainštalujú v GOPATH v predvolenom nastavení, takže uvedenie GOPATH / kôš adresár na ceste tiež uľahčí ich vyhľadanie editorom a IDE zodpovedným za prácu v prostredí Go. Väčšinu pomocných programov môžete nainštalovať pomocou $ choď dostať akonáhle viete, ktoré z nich potrebujete a ich cesty k úložisku. Úložiská sa dajú ľahko vyhľadať pomocou vyhľadávania Google. V niektorých prípadoch nainštaluje pomocné programy editorský doplnok pre Go (napr. gocode) automaticky.

Ak si ho nenastavíte sami, GOPATH predvolené hodnoty pre $ DOMOV / choď v systémoch Unix a MacOS a % USERPROFILE% / go vo Windows.

Choďte do jazykových nástrojov, editorov a IDE

Niekoľko pomocných programov Go je nainštalovaných ako súčasť balíka s kompilátorom. Ostatné je možné nainštalovať pomocou choď si zohnať príkaz. Najpoužívanejšie nástroje príkazového riadku Go sú uvedené nižšie.

 
názovSynopsa
choďSpravuje zdrojový kód Go a spúšťa ďalšie tu uvedené príkazy.
cgoUmožňuje vytváranie balíkov Go, ktoré volajú kód C.
krytProgram na vytváranie a analýzu profilov pokrytia generovaných ísť otestovať -profil.
opraviťNájde programy Go, ktoré používajú staré funkcie jazyka a knižnice, a prepíše ich tak, aby používali novšie.
fmtBalíky Formáty Go. K dispozícii aj ako nezávislý gofmt príkaz so všeobecnejšími možnosťami.
godocExtrahuje a generuje dokumentáciu pre balíčky Go.
veterinárPreskúma zdrojový kód Go a nahlási podozrivé konštrukty, ako napr Printf volania, ktorých argumenty sa nezhodujú s formátovacím reťazcom.

Zvyčajný spôsob volania väčšiny z týchto príkazov je ako čiastkové príkazy choď, napríklad choď fmt. Ostatným je potrebné zavolať cez internet choď nástroj čiastkový príkaz. Na mojej inštalácii, choď nástroj vráti nasledujúci zoznam známych nástrojov:

$ go nástroj

addr2line

asm

buildid

cgo

zostaviť

kryt

dist

doc

opraviť

odkaz

nm

objdump

balenie

pprof

test2json

prehliadka

stopa

veterinár

Tieto nástroje sú zdokumentované ako súčasť úplného zoznamu príkazov Go. Mimochodom, uistite sa, že GOPATH sa nastavuje pred pridaním akýchkoľvek nástrojov Go alebo akýchkoľvek doplnkov editora Go, ktoré používajú nástroje Go.

Repozitáru Go od verzie 1.4 chýbala podpora akýchkoľvek editorov alebo IDE, ale o Go je veľa, a to buď po vybalení z krabice, alebo s doplnkovými modulmi. O mnohých z nich som hovoril v článku z roku 2017; existuje tiež neoficiálny zoznam udržiavaný komunitou Golang.

Moje obľúbené IDE v jazyku Go sú GoLand (zobrazené vyššie; od doby, keď som článok napísal v roku 2017, premenovaný na Gogland) a Komodo. Oba sú platené produkty s bezplatnými skúšobnými verziami.

Budete si chcieť nainštalovať ladenie Delve for Go. V systéme MacOS budete možno musieť do Xcode pridať pomôcky príkazového riadku a prípadne pridať mäkký odkaz na debugserver, ako je opísané v komentári z 5. júna v zozname problémov s Delve. Beží xcode-select - nainštalovať tiež opraví problémy s nájdením debugserver, aj keď hrubou silou.

Mojimi obľúbenými editormi podporujúcimi Go s GUI sú Atom a Visual Studio Code; obaja sú zadarmo. Ak zvolíte Atom, zvážte pridanie balíkov go-plus a go-debug; Ak zvolíte Visual Studio Code, zvážte pridanie vscode-go.

Ak ste hardcore používatelia Vim alebo Emacs, potom vo všetkých ohľadoch zostaňte na tom, čo viete - nie, že by som mohol dokonca vytrhnúť vášho editora z vašich chladných, mŕtvych rúk. Vim-go pridáva podporu jazyka Go pre Vim a režim go pridáva podporu jazyka Go pre Emacs.

Prehliadka cesty

Dozviete sa toho dosť, absolvovaním prehliadky „Tour of Go“ online alebo offline. Za predpokladu, že ste dokončili lokálnu inštaláciu kompilátora a nástrojov Go, môžete nainštalovať prehliadku a spustiť ju lokálne spustením týchto dvoch príkazov:

$ go get golang.org/x/tour/gotour

$ dostal

Druhý riadok by mal spustiť webový server a otvoriť okno prehľadávača. Bude to vyzerať presne ako online prehliadka, ale môže bežať o niečo rýchlejšie, pretože vytvára a spúšťa ukážky kódu na vašom vlastnom počítači. Po dokončení stlačte Ctrl-C v príkazovom okne a zastavte server.

Prehliadka je rozdelená do troch častí. Chcem, aby ste absolvovali celú prehliadku vrátane kvízov, ale každú časť zhrniem ako prehľad a položím vám niekoľko otázok. Odpovede na moje otázky uvádzam na konci článku (žiadne kukanie!).

Choďte na jazykové základy

Choďte na základnú lekciu 1

Otázka 1. V tomto príklade existujú tri balíčky. Čo sú to a ako sa používajú? Prečo program vracia vždy rovnaké číslo, aj keď existuje rand funkcia?

Všimnite si, že som nezavolal lekciu 2. Nevynechávajte lekcie len preto, že som ich nekomentoval.

Choďte na základnú lekciu 3

Ak použijete tento príklad, zobrazia sa chybové správy:

prog.go: 9: 14: nemôže odkazovať na nevyexportované meno math.pi

prog.go: 9: 14: undefined: math.pi

Otázka 2. Prečo chyby? Ako môžete opraviť program?

Choďte na základnú lekciu 4

Otázka 3. Porovnajte toto vyhlásenie s ekvivalentom v C. Čo sa líši?

Choďte na základnú lekciu 8

Otázka 4. Prečo tento program nespôsobuje chyby?

Choďte na základnú lekciu 10

Otázka 5. Aký je to typ k? Prečo? Ak typ nie je zrejmý, pozrite sa na lekciu 11 a zistite, ako ho zobraziť.

Choďte na základnú lekciu 12

Táto lekcia odpovedá na otázku, ktorú som položil v lekcii 8.

Prejdite na lekciu riadenia toku 1

Otázka 6. Čím sa líši od pre slučka vo vašom obľúbenom jazyku? Myslíte si, že sú potrebné ďalšie cyklické konštrukcie vo vašom obľúbenom jazyku? Menia vaše informácie ďalšie informácie v nasledujúcich troch lekciách?

Prejdite na lekciu riadenia toku 7

Pred spustením tohto programu ho skontrolujte a napíšte, čo si myslíte, že sa vytlačí. Spustite program. Mal si pravdu? Ak nie, čo ste nepochopili?

Prejdite na lekciu 8. Flow Flow

Toto je druh cvičenia, ktoré môžete získať na začiatku pohovoru na tabuli. Čas si vypracovajte sami. Počas riešenia problému povedzte, na čo myslíte.

Otázka 7. Zvyšok časti riadenia toku je potrebné pochopiť. Po absolvovaní lekcií 9 až 13 vysvetlite Go prepínač a odložiť výroky takým spôsobom, aby sa ich programátor v jazyku C, Java alebo JavaScript mohol vyhnúť.

Choďte na viac typov Lekcia 1

Pred spustením tohto programu ho skontrolujte a napíšte, čo si myslíte, že sa vytlačí. Spustite program. Mal si pravdu? Ak nie, čo ste nepochopili?

Čo si myslíš o tom, že máš ukazovatele, ale nie aritmetiku ukazovateľa?

Postupujte podľa časti Ďalšie typy, kým sa nedostanete k cvičeniu v lekcii 18. Otázka 8. Čo ste sa dozvedeli o poliach a rezoch Go? Teraz dokončite cvičenie.

Pokračujte v cvičení v lekcii 23.

Otázka 9. Vysvetlite Go mapa. Prečo by ste ho chceli používať?

Dokončite sekciu Ďalšie typy.

Otázka 10. Môže sa program Go použiť ako funkčný programovací jazyk napriek tomu, že je kompilovaný? Kedy a prečo by ste použili uzávery?

Choďte na metódy a rozhrania

Prejdite si všetkých 25 lekcií v tejto časti počnúc //tour.golang.org/methods/1.

Otázka 11. Keď skončíte, vysvetlite, v čom sa použitie metód a rozhraní Go líši od tried C ++. Ktoré sa vám páčia lepšie? Prečo?

Choďte súbežne

Goroutine je jednou z definujúcich čŕt Go pre súbežnosť. Na prvej lekcii v časti venovanej súbežnosti sa pokúste skontrolovať program (nižšie) a napísať, čo si podľa vás vytlačí.

Spustite program. Mal si pravdu? Vysvetlite, čo sa vlastne deje a prečo.

Kanály sú cestou k implicitnej synchronizácii goroutinov. V nasledujúcej lekcii (nižšie) sa znova pokúste skontrolovať program pred spustením.

Otázka 12. Prečo je v tomto príklade iba jeden kanál, aj keď existujú dva hovory goroutine?

Príkaz select umožňuje goroutine čakať na viaceré komunikačné operácie. V akom poradí sú výpisy spustené v nižšie uvedenom programe?

Cvičenie na ekvivalentných binárnych stromoch je ďalším, s ktorým sa môžete stretnúť v rozhovore pre tabuľu. Pri implementácii riešenia si nájdite čas a vysvetlite svoje myslenie. Podobne vykonajte cvičenie implementácie webového prehľadávača, akoby ste boli na pohovore.

Odpovede na otázky Go

Odpoveď 1. Balíky sú označené štítkom balíček vyhlásenie k súčasnému programu a dovoz vyhlásenie pre použité externé balíčky. V tomto jednoduchom programe hlavný je vlastný balík programu a importuje sa fmt aby mohla tlačiť, a matematika/rand aby mohla vygenerovať náhodné číslo.

Rôzne metódy v rand pri generovaní náhodných čísel sa spoliehajú na čas hodín, ale čas je pevne stanovený v mám prostredie. Ako následné cvičenie nájdite balík a metódu, ktorá hlási čas (rada: ak sa zaseknete, pozrite sa sem), a použite ju na vytlačenie aktuálneho času. Spustite to viackrát v mám prostredí, a tiež vytvoriť program lokálne a spustiť ho niekoľkokrát na svojom vlastnom počítači.

Odpoveď 2. Export v Go musí byť vždy písaný veľkými písmenami a v jazyku sa rozlišujú veľké a malé písmená. matematika.Pi je správna metóda.

Odpoveď 3. V deklaráciách premenných C / C ++ postupujte podľa formulára (napr. int i, j, k;), zatiaľ čo v Go prejde typ za názvom premennej a možno ho vynechať, pokiaľ sa dá odvodiť typ. V C / C ++ návratový typ predchádza názvu funkcie, zatiaľ čo v Go prichádza za zoznam parametrov funkcie a pred telo funkcie. V jazyku C / C ++ sú koncové bodkočiarky povinné.

Odpoveď 4. Nevyhadzuje chyby, pretože premenné Go, ktoré nie sú inak nastavené, sa inicializujú na nulovú hodnotu typu, napr. 0 alebo nepravdivé. V C / C ++ kompilátor označí neinicializované premenné.

Odpoveď 5.k je celé číslo, pretože bolo inicializované na 3.

$config[zx-auto] not found$config[zx-overlay] not found