Programavimas

„Go Go“ pamoka: pradėkite naudoti „Google Go“

Kodėl norėtumėte naudoti „Go“ kalbą? Iš esmės tai yra glausta, paprasta, saugi ir greitai sukompiliuojama kalba, turinti nuostabias lygiagretumo savybes, ir ji lengvai tvarko didelius projektus. Tai taip pat nemokamas atvirasis šaltinis, nors iš pradžių buvo sukurtas „Google“.

Pasak Robo Pike'o, vieno iš šios kalbos kūrėjų, „Go projekto tikslai buvo pašalinti programinės įrangos kūrimo lėtumą ir nerangumą„ Google “ir taip padaryti procesą produktyvesnį ir pritaikomą. Kalbą sukūrė žmonės, kurie rašo ir skaito, derina ir prižiūri dideles programinės įrangos sistemas “.

Atsižvelgiant į šiuos tikslus, „Go“ trūksta daugelio kitų žinomų kalbų bruožų - ir tai iš tikrųjų yra stiprybė. „Go“ nėra orientuotas į objektą, jis neturi antraštės failų ar persiuntimo deklaracijų, neturi tipų hierarchijos, neturi metodo ar operatoriaus perkrovos, neturi bendrųjų, neturi Virtualioji mašina vykdymui, ji neturi išimčių ir neturi teiginių.

Kita vertus, tai, ką turi „Go“, veikia gana gerai. Tai gali sudaryti dideles programas per kelias sekundes. Jame yra žemų viršutinių korutinų (vadinamų gorutines), kurie gali efektyviai bendrauti per kanalus. Jis turi sąsajas ir sąsajų sudėtį. Be to, „Go“ palaiko pirmos klasės funkcijas, aukštesnės eilės funkcijas, vartotojo apibrėžtus funkcijų tipus, funkcijų pažaidinius žodžius, uždarymus ir kelias grąžinimo vertes - kitaip tariant, palaiko funkcinį programavimo stilių griežtai įvesta kalba.

Jei norite pateikti užklausą dėl bet kokių trūkstamų funkcijų, kurias minėjau aukščiau, galbūt norėsite perskaityti kalbos pakeitimų aptarimą „Go“ kalbos DUK: Atsakymas paprastai yra „Ne, nes ...“ sukurtas nuo nulio, kad būtų galima naudoti „Go“ kalbos funkcijas, o ne versti pažodžiui iš kitų kalbų, naudojančių skirtingas abstrakcijas.

Įdiekite „Go“

Trumpos „Go“ diegimo instrukcijos rodomos šaltinio saugykloje. Galite atsisiųsti „Windows“, „MacOS“ ir „Linux“ dvejetainius „Go“ leidimus arba įdiegti „Go“ iš šaltinio. „GitHub“ rasite instrukcijas, kaip įdiegti „Go from source“.

Jei jau esate įdiegę „Go“, turėtumėte patikrinti dabartinę versijos versiją //golang.org/ apačioje, tada patikrinkite įdiegtą versiją komandinėje eilutėje:

$ go versija

Jei diegimas pasenęs, atsisiųskite ir įdiekite dabartinę versiją. Iš naujo paleiskite visus atidarytus komandų raginimus („Windows“) arba terminalus. Pakartokite eiti versija ir įsitikinkite, kad versija yra tokia, kokios tikėjotės; jei ne, kitur gali būti įdiegta senesnė „Go“ versija, kurią reikia pašalinti.

(Ne, aš nesu paranojikas. Aš sugebėjau patekti į aprašytą situaciją naudodamas „Homebrew“, kad įdiegčiau vieną versiją, ir standartinį „MacOS“ paketą, kad kitą versiją įdiegtumėte praėjus maždaug mėnesiui. Jie įdiegiami skirtingose ​​vietose $ PATH. Kai supratau, kas nutiko, galėjau pašalinti seną versiją iš „Homebrew“.)

Kitas diegimo variantas, jei norite palaikymo ir žalos atlyginimo ir mokate, yra „ActiveGo“ naudojimas.

Įdiegę „Go“ kompiliatorių ir įrankius, turėtumėte atlikti „Go“ programos sudarymo ir paleidimo pratimą, kaip aprašyta diegimo puslapio skyriuje „Patikrinkite savo diegimą“.

Nustatykite „Go“ aplinką

„Go“ programuotojai visą savo kodą paprastai laiko vienoje darbo vietoje su šiukšliadėžė, pkgir src aplankai. Kiekviename aplanke projektai paprastai turi kelius, susijusius su „Git“ saugyklomis, tokiomis kaip „GitHub“ arba „GitLab“. Pavyzdžiui, aš laikau visą savo „Go“ kalbos kodą ~ / darbasir nustatykite mano GOPATAS aplinkos kintamasis $ NAMAI / darbas. Kelias į mano „hello.go“ šaltinio kodų aplanką yra $ GOPATH / src / github.com / meheller / labas.

Aš taip pat pridedu GOPATH / šiukšliadėžė katalogą į mano kelią, kad būtų patogiau paleisti „Go“ programas iš bet kurio katalogo:

eksportuoti GOPATH = $ HOME / darbas

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

„Go“ kalbos paslaugų programos bus įdiegtos GOPATAS pagal nutylėjimą, todėl įdėti GOPATH / šiukšliadėžė kelyje esantis katalogas taip pat palengvina jų ir „Go-note“ redaktorių bei IDE jų paiešką. Galite įdiegti daugumą komunalinių paslaugų naudodami $ eik gauti kai žinosite, kurių jums reikia, ir jų saugyklos kelius. Paprastai saugyklas lengva rasti naudojant „Google“ paiešką. Kai kuriais atvejais „Go“ redaktoriaus papildinys įdiegs komunalines paslaugas (pvz., gocode) automatiškai.

Jei to nenustatysite patys, GOPATAS pagal nutylėjimą $ HOME / eiti „Unix“ ir „MacOS“ bei % USERPROFILE% / eiti sistemoje „Windows“.

Pasirinkite kalbos įrankius, redaktorius ir IDE

Keletas „Go“ paslaugų yra įdiegtos kaip paketo dalis kartu su kompiliatoriumi. Kitus galima įdiegti naudojant eik paimk komandą. Žemiau pateikiami dažniausiai naudojami „Go“ komandinės eilutės įrankiai.

 
vardasSantrauka
eikTvarko „Go“ šaltinio kodą ir vykdo kitas čia išvardytas komandas.
cgoLeidžia sukurti „Go“ paketus, kurie skambina C kodu.
viršelisPrograma, skirta sukurti ir analizuoti aprėpties profilius, sukurtus eikite bandyti -coverprofile.
pataisytiRanda „Go“ programas, kuriose naudojamos senos kalbos ir bibliotekų funkcijos, ir perrašo jas naudoti naujesnes.
fmt„Formats Go“ paketai. Taip pat galima įsigyti kaip nepriklausomą gofmt komanda su bendresnėmis parinktimis.
godocIštraukia ir sukuria „Go“ paketų dokumentus.
vetNagrinėja „Go“ šaltinio kodą ir praneša apie įtartinus darinius, pvz Printf skambučiai, kurių argumentai nesutampa su formato eilute.

Įprastas daugumos šių komandų skambinimo būdas yra pakomandos eik, pavyzdžiui eiti fmt. Kitus reikia kviesti per eiti įrankis subkomanda. Mano instaliacijoje eiti įrankis pateikia šį žinomų įrankių sąrašą:

$ go įrankis

addr2line

asm

statybinis

cgo

sudaryti

viršelis

dist

doc

pataisyti

nuoroda

nm

objdump

paketas

pprof

test2json

turas

pėdsakas

vet

Šie įrankiai yra dokumentuojami kaip viso „Go“ komandų sąrašo dalis. Beje, įsitikinkite, kad jūsų GOPATAS yra nustatytas prieš pridedant bet kokius „Go“ įrankius ar bet kuriuos „Go“ redaktoriaus papildinius, kuriuose naudojami „Go“ įrankiai.

„Go“ saugykloje nuo 1.4 versijos nebuvo jokio redaktoriaus ar IDE palaikymo, tačiau yra daugybė abiejų, kurie žino apie „Go“ arba iš dėžutės, arba su papildomais moduliais. Daugelį jų aptariau 2017 m. taip pat yra neoficialus sąrašas, kurį tvarko Golango bendruomenė.

Mano mėgstamiausi „Go“ kalbos IDE yra „GoLand“ (parodyta aukščiau; pervadinta iš „Gogland“, nes parašiau straipsnį 2017 m.) Ir „Komodo“. Abu jie yra mokami produktai su nemokamais bandymais.

Turėsite įdiegti „Delve for Go“ derinimą. „MacOS“ sistemoje taip pat gali tekti pridėti komandų eilutės įrankius prie „Xcode“ ir galbūt pridėti programinę nuorodą į derinimo serveris, kaip aprašyta birželio 5 d. „Delve“ klausimų sąrašo komentare. Bėgimas „xcode-select“ - įdiegti taip pat išspręs su radimu susijusias problemas derinimo serveris, nors ir grubia jėga.

Mano mėgstamiausi „Go-know“ redaktoriai su GUI yra „Atom“ ir „Visual Studio Code“; abu yra nemokami. Jei pasirinksite „Atom“, apsvarstykite galimybę įtraukti „go-plus“ ir „go-debug“ paketus; jei pasirinksite „Visual Studio Code“, apsvarstykite galimybę pridėti „vscode-go“.

Jei esate „hardcore“ „Vim“ ar „Emacs“ vartotojas, visais būdais likite su tuo, ką žinote - ne todėl, kad net galėčiau apgauti jūsų redaktorių nuo jūsų šaltų, negyvų rankų. „Vim-go“ prideda „Vim“ „Go“ palaikymą, o „go-mode“ - „Emacs“ palaikymą „Go“ kalba.

Ekskursija „Go“

Nemažai galite išmokti per „A Tour of Go“, naudodamiesi internetu arba neprisijungę. Darant prielaidą, kad baigėte vietinį „Go“ kompiliatoriaus ir įrankių diegimą, galite įdiegti apžvalgą, kad ji būtų vykdoma vietoje, vykdydami šias dvi komandas:

$ eikite gauti golang.org/x/tour/gotour

$ gotour

Antroji eilutė turėtų paleisti žiniatinklio serverį ir atidaryti naršyklės langą. Tai atrodys lygiai taip pat, kaip internetinė kelionė, bet gali būti šiek tiek greitesnė, nes ji sukuria ir paleidžia kodų pavyzdžius savo kompiuteryje. Komandos lange paspauskite Ctrl-C, kad sustabdytumėte serverį, kai baigsite.

Ekskursija yra padalinta į tris dalis. Noriu, kad pereitumėte visą ekskursiją, įskaitant viktorinas, bet kiekvieną skyrių apibendrinsiu kaip apžvalgą ir užduosiu keletą klausimų. Straipsnio pabaigoje pateikiu atsakymus į savo klausimus (negalima žvilgtelėti!).

Eiti kalbos pagrindus

1 pagrindo pamoka

Klausimas 1. Šiame pavyzdyje yra trys paketai. Kas jie yra ir kaip jie naudojami? Kodėl programa visada pateikia tą patį skaičių, nors yra a randas funkcija?

Atkreipkite dėmesį, kad nesu iškvietusi 2 pamokos. Nepraleisk pamokų tik todėl, kad jų nekomentavau.

3 pagrindų pamoka

Jei vykdysite šį pavyzdį, pamatysite klaidos pranešimus:

prog.go: 9: 14: negalima nurodyti neeksportuoto vardo math.pi

prog.go: 9: 14: neapibrėžta: math.pi

2 klausimas. Kodėl klaidos? Kaip pataisyti programą?

Eiti pagrindai 4 pamoka

3 klausimas. Palyginkite šią deklaraciją su atitikmeniu C. Kas yra skirtinga?

8 pagrindų pamoka

4 klausimas. Kodėl ši programa nemeta klaidų?

10 pagrindinių pamokų

5 klausimas. Koks yra k? Kodėl? Jei tipas nėra akivaizdus, ​​peržiūrėkite 11 pamoką ir sužinokite, kaip jį rodyti.

12 pagrindinių pamokų

Ši pamoka atsako į klausimą, kurį uždaviau 8 pamokoje.

1 srauto valdymo pamoka

6 klausimas. Kuo tai skiriasi nuo dėl kilpa jūsų mėgstama kalba? Ar manote, kad jūsų mėgstama kalba reikalingos kitos kilpinės konstrukcijos? Ar papildoma informacija per kitas tris pamokas keičia jūsų nuomonę?

Eiti srauto valdymo 7 pamoka

Prieš paleisdami šią programą, patikrinkite stalą ir užsirašykite, ką manote, kad ji atspausdins. Paleiskite programą. Ar buvote teisus? Jei ne, ko nesupratote?

8 srauto valdymo pamoka

Tai yra toks pratimas, kurį galite atlikti interviu su lenta pradžioje. Skirkite laiko sau, kai tai darote. Pasakykite, ką galvojate, spręsdami problemą.

7 klausimas. Svarbu suprasti likusią srauto valdymo sekciją. Praėję 9–13 pamokas, paaiškinkite „Go“ perjungti ir atidėti teiginius taip, kad C, „Java“ ar „JavaScript“ programuotojas galėtų grok.

Eikite daugiau tipų 1 pamoka

Prieš paleisdami šią programą, patikrinkite stalą ir užsirašykite, ką manote, kad ji atspausdins. Paleiskite programą. Ar buvote teisus? Jei ne, ko nesupratote?

Kaip jūs manote, kad „Go“ turi rodyklių, bet neturi rodyklių aritmetikos?

Peržiūrėkite skiltį „Daugiau tipų“, kol pateksite į 18 pamokos pratimą. 8 klausimas. Ką sužinojote apie „Go“ masyvus ir griežinėliais? Dabar atlikite pratimą.

Tęskite pratimą 23 pamokoje.

9 klausimas. Paaiškinkite „Go“ žemėlapis. Kodėl norėtumėte jį naudoti?

Užbaikite skiltį Daugiau tipų.

10 klausimas. Ar „Go“ galima naudoti kaip funkcinę programavimo kalbą, nepaisant kompiliavimo? Kada ir kodėl naudosite uždarymus?

Eikite metodais ir sąsajomis

Peržiūrėkite visas 25 šio skyriaus pamokas, pradedant //tour.golang.org/methods/1.

11 klausimas. Baigę paaiškinkite, kuo „Go“ naudoja metodus ir sąsajas nuo C ++ klasių. Kas tau labiau patinka? Kodėl?

Eiti lygiagrečiai

Gorina yra vienas iš svarbiausių „Go for concurrency“ bruožų. Pirmoje lygiagretumo skyriaus pamokoje pabandykite patikrinti programą (žemiau) ir užsirašykite, kaip manote, ar ji atspausdins.

Paleiskite programą. Ar buvote teisus? Paaiškinkite, kas iš tikrųjų vyksta ir kodėl.

Kanalai yra būdas netiesiogiai sinchronizuoti goroutines. Kitoje pamokoje (žemiau) dar kartą pabandykite patikrinti stalą prieš paleisdami programą.

12 klausimas. Kodėl šiame pavyzdyje yra tik vienas kanalas, nors yra du gorutinės skambučiai?

Pasirinktas sakinys leidžia gorutinei palaukti kelias ryšio operacijas. Kokia tvarka sakiniai vykdomi žemiau esančioje programoje?

Pratimai dėl lygiaverčių dvejetainių medžių yra dar vienas, kurį galite susidurti interviu su lenta. Skirkite laiko sau ir paaiškinkite savo mąstymą, kai įgyvendinate sprendimą. Panašiai atlikite žiniatinklio tikrintuvo įdiegimo pratimą taip, lyg būtumėte interviu.

Atsakymai į „Go“ klausimus

1 atsakymas. Pakuotes nurodo pakuotė dabartinės programos pareiškimą ir importas naudojamų išorinių paketų sakinys. Šioje paprastoje programoje pagrindinis yra pačios programos paketas ir jis importuojamas fmt kad jis galėtų atspausdinti ir matematika/randas kad jis sugeneruotų atsitiktinį skaičių.

Įvairūs metodai randas pasikliaukite laikrodžio laiku, kad generuotumėte atsitiktinius skaičius, tačiau laikas yra fiksuotas gavosi aplinka. Tolesnio pratimo metu raskite paketą ir metodą, kuris praneša apie laiką (užuomina: jei užstrigote, žiūrėkite čia) ir naudokite jį dabartiniam laikui atsispausdinti. Vykdykite tai kelis kartus gavosi aplinką, taip pat kurkite programą vietoje ir paleiskite ją kelis kartus savo kompiuteryje.

2 atsakymas. „Go“ eksportas visada turi būti rašomas didžiosiomis raidėmis, o kalboje didžiosios ir mažosios raidės. matematika.Pi yra teisingas metodas.

3 atsakymas. C / C ++ kintamųjų deklaracijos laikosi formos (pvz. int i, j, k;), tuo tarpu „Go“ tipas eina po kintamojo pavadinimo ir gali būti praleistas tol, kol galima padaryti išvadą apie tipą. C / C ++ grįžimo tipas yra prieš funkcijos pavadinimą, o „Go“ - po funkcijų parametrų sąrašo ir prieš funkcijos turinį. C / C ++ yra privalomi kabliataškiai.

4 atsakymas. Tai nemeta klaidų, nes kitaip nenustatyti „Go“ kintamieji inicijuojami pagal nulinę tipo vertę, pvz. 0 arba melagingas. C / C ++ versijoje kompiliatorius pažymi neinicijuotus kintamuosius.

5 atsakymas.k yra sveikasis skaičius, nes jis buvo inicijuotas 3.

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