Programmēšana

Go apmācība: sāciet darbu ar Google Go

Kāpēc jūs vēlaties izmantot Go valodu? Būtībā tā ir kodolīga, vienkārša, droša un ātri apkopota valoda ar lieliskām vienlaicīguma funkcijām, un tā viegli tiek galā ar lieliem projektiem. Tas ir arī bezmaksas atvērtais avots, kaut arī sākotnēji to izstrādāja Google.

Pēc Roba Pike, viena no valodas dizaineriem, domām, “Go projekta mērķi bija novērst programmatūras izstrādes lēnumu un neveiklību Google tīklā un tādējādi procesu padarīt produktīvāku un pielāgojamāku. Valodu ir izstrādājuši cilvēki, kuri raksta un lasa, atkļūdo un uztur uztur lielas programmatūras sistēmas. ”

Saskaņā ar šiem mērķiem Go nav daudzu citu ievērojamu valodu iezīmju - un tas patiesībā ir stiprums. Go nav objektorientēts, tam nav galvenes failu vai pārsūtīšanas deklarāciju, tam nav tipu hierarhijas, tam nav metodes vai operatora pārslodzes, tam nav vispārīgu, tam nav virtuālajai mašīnai izpildlaika laikā, tai nav izņēmumu un tai nav apgalvojumu.

No otras puses, tas, kas ir Go, darbojas diezgan labi. Tas var apkopot lielas programmas dažu sekunžu laikā. Tam ir zemas virszemes korutīnas (sauktas gorutines), ar kuras starpniecību var efektīvi sazināties kanālus. Tam ir saskarnes un saskarnes sastāvs. Turklāt Go atbalsta pirmās klases funkcijas, augstākas kārtas funkcijas, lietotāja definētus funkciju veidus, funkciju literāļus, aizvēršanas un vairākas atgriešanās vērtības - citiem vārdiem sakot, tas atbalsta funkcionālu programmēšanas stilu stingri ievadītā valodā.

Ja vēlies pieprasīt kādu no iepriekš minētajām trūkstošajām funkcijām, ieteicams izlasīt diskusiju par valodas izmaiņām sadaļā Go language: atbilde parasti ir “Nē, jo…”. Parasti labākās Go programmas ir izstrādāts no sākuma, lai izmantotu Go valodas iespējas, nevis tulkotu burtiski no citām valodām, kurās tiek izmantotas dažādas abstrakcijas.

Instalējiet Go

Īsas Go instalēšanas instrukcijas parādās avota krātuvē. Jūs varat lejupielādēt Go bināros laidienus Windows, MacOS un Linux vai instalēt Go no avota. GitHub atradīsit instrukcijas Go from source instalēšanai.

Ja jums jau ir instalēta Go, pārbaudiet pašreizējo būvēšanas versiju //golang.org/ apakšdaļā un pēc tam pārbaudiet instalēto versiju no komandrindas:

$ go versija

Ja instalēšana ir novecojusi, lejupielādējiet un instalējiet pašreizējo versiju. Restartējiet visus atvērtos komandu uzvedņus (Windows) vai termināļus. Atkārtoti palaist iet versija un pārliecinieties, ka versija ir tāda, kādu jūs gaidījāt; ja nē, iespējams, ka citur ir instalēta vecāka Go versija, kas ir jānoņem.

(Nē, es neesmu paranoiķis. Man izdevās nokļūt aprakstītajā situācijā, izmantojot Homebrew, lai instalētu vienu versiju, un standarta MacOS pakotni, lai instalētu nākamo versiju apmēram mēnesi vēlāk. Viņi instalē dažādās vietās $ PATH. Kad es sapratu, kas noticis, es varēju atinstalēt veco versiju ar Homebrew.)

Vēl viena instalēšanas iespēja, ja vēlaties saņemt atbalstu un atlīdzību un varat maksāt, ir ActiveGo izmantošana.

Kad esat instalējis Go kompilatoru un rīkus, jums jāiziet Go programmas sastādīšanas un palaišanas uzdevums, kā aprakstīts instalēšanas lapas sadaļā “Instalācijas pārbaude”.

Iestatiet savu Go vidi

Go programmētāji parasti glabā visu kodu vienā darbvietā ar atkritumu tvertne, pkg, un src mapes. Katrā mapē projektiem parasti ir ceļi, kas saistīti ar Git krātuvēm, piemēram, GitHub vai GitLab. Piemēram, es visu savu Go valodas kodu turu zem ~ / darbs, un iestatiet manu GOPĀTS vides mainīgais uz $ MĀJAS / darbs. Ceļš uz manu “hello.go” pirmkodu mapi ir $ GOPATH / src / github.com / meheller / sveiki.

Es arī pievienoju GOPATH / bin direktoriju uz manu ceļu, lai ērtāk palaistu Go programmas no jebkura direktorija:

eksportēt GOPATH = $ HOME / darbs

eksportēt PATH = $ PATH: $ (go env GOPATH) / bin

Go valodas utilītas tiks instalētas GOPĀTS pēc noklusējuma, tāpēc liekot GOPATH / bin Ceļa direktorija arī atvieglo to atrašanu jums un Go-noteicošajiem redaktoriem un IDE. Jūs varat instalēt lielāko daļu komunālo pakalpojumu ar $ iet saņemt kad jūs zināt, kādi no tiem jums ir nepieciešami, un to krātuves ceļus. Krātuves parasti ir viegli atrast, izmantojot Google meklēšanu. Dažos gadījumos Go redaktora spraudnis instalēs utilītprogrammas (piem., gocode) automātiski.

Ja pats to nenosaka, GOPĀTS pēc noklusējuma $ HOME / iet par Unix un MacOS un % USERPROFILE% / iet operētājsistēmā Windows.

Izmantojiet valodas rīkus, redaktorus un IDE

Vairākas Go utilītas tiek instalētas kā daļa no paketes kopā ar kompilatoru. Citus var uzstādīt ar iet saņemt komandu. Visbiežāk izmantotās Go komandrindas utilītas ir uzskaitītas zemāk.

 
NosaukumsKopsavilkums
aizietPārvalda Go avota kodu un izpilda citas šeit uzskaitītās komandas.
cgoĻauj izveidot Go pakas, kas izsauc C kodu.
piesegtProgramma, kas paredzēta, lai izveidotu un analizētu iet pārbaudīt -coverprofile.
labotAtrod programmas Go, kas izmanto vecās valodas iespējas un bibliotēkas, un pārraksta tās par jaunākām.
fmtFormāti Go paketes. Pieejams arī kā neatkarīgs gofmt komandu ar vispārīgākām iespējām.
godocIzvelk un ģenerē dokumentāciju Go pakotnēm.
veterinārsPārbauda Go avota kodu un ziņo par aizdomīgiem konstrukcijām, piemēram Printf zvani, kuru argumenti neatbilst formāta virknei.

Parastais veids, kā izsaukt lielāko daļu šo komandu, ir kā apakškomandas aiziet, piemēram iet fmt. Citi ir jāaicina, izmantojot iet rīks apakškomanda. Manā instalācijā iet rīks atgriež šādu zināmo rīku sarakstu:

$ go rīks

addr2line

asm

būvēt

cgo

sastādīt

piesegt

dist

doc

labot

saite

nm

objdump

komplekts

pprof

test2json

tūre

izsekot

veterinārs

Šie rīki ir dokumentēti kā daļa no pilna komandu Go saraksta. Starp citu, pārliecinieties, ka jūsu GOPĀTS ir iestatīts pirms jebkuru Go rīku vai jebkuru Go redaktora spraudņu pievienošanas, kas izmanto Go rīkus.

Kopš 1.4 versijas Go krātuvē nav bijis redaktora vai IDE atbalsta, taču ir daudz gan to, kas zina par Go, gan ārpus kastes, gan ar pievienojumprogrammu moduļiem. Daudzus no tiem es apspriedu 2017. gada rakstā; ir arī neoficiāls saraksts, kuru uztur Golangas kopiena.

Mani iecienītākie Go valodas IDE ir GoLand (parādīts iepriekš; pārdēvēts no Gogland kopš rakstīju rakstu 2017. gadā) un Komodo. Abi ir maksas produkti ar bezmaksas izmēģinājumiem.

Jūs vēlaties instalēt Delve for Go atkļūdošanu. MacOS, iespējams, Xcode ir jāpievieno arī komandrindas utilīti un, iespējams, jāpievieno saite uz atkļūdošanas serveris, kā aprakstīts 5. jūnija komentārā Delve problēmu sarakstā. Skriešana xcode-select --instalēt novērsīs arī jautājumus par atrašanu atkļūdošanas serveris, kaut arī brutāla spēka veidā.

Mani iecienītākie redaktori ar GUI ir Atom un Visual Studio Code; abi ir bez maksas. Ja izvēlaties Atom, apsveriet iespēju pievienot paketes go-plus un go-debug; ja izvēlaties Visual Studio Code, apsveriet iespēju pievienot vscode-go.

Ja esat nopietns Vim vai Emacs lietotājs, tad visos gadījumos palieciet pie tā, ko zināt - nevis tāpēc, ka es pat varētu izaicināt jūsu redaktoru no jūsu aukstajām, mirušajām rokām. Vim-go pievieno Go valodas atbalstu Vim, bet go-mode - Go valodas atbalstu Emacs.

Ekskursija Go

Jūs varat uzzināt diezgan daudz, tiešsaistē vai bezsaistē izejot caur "Tour of Go". Pieņemot, ka esat pabeidzis Go kompilatora un rīku vietējo instalēšanu, varat instalēt ekskursiju, lai tā darbotos lokāli, izpildot šīs divas komandas:

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

$ gotour

Otrajā rindā jāsāk tīmekļa serveris un jāatver pārlūkprogrammas logs. Tas izskatīsies tieši tāpat kā tiešsaistes ceļojums, taču tas varētu darboties nedaudz ātrāk, jo tas izveido un palaiž kodu paraugus jūsu pašu mašīnā. Komandu logā nospiediet Ctrl-C, lai apturētu serveri, kad esat pabeidzis.

Ekskursija ir sadalīta trīs sadaļās. Es vēlos, lai jūs izietu visu ceļojumu, ieskaitot viktorīnas, taču es katru sadaļu apkopošu zemāk kā pārskatu un uzdošu jums dažus jautājumus. Es sniedzu atbildes uz saviem jautājumiem raksta beigās (nekāda palūrēšana!).

Iet uz valodas pamatiem

Iet uz pamatiem 1. nodarbība

Jautājums 1. Šajā piemērā ir trīs paketes. Kas tie ir un kā tos izmanto? Kāpēc programma vienmēr atgriež to pašu skaitli, kaut arī pastāv a rand funkcija?

Ņemiet vērā, ka es neesmu izsaucis 2. nodarbību. Nepalaidiet stundas tikai tāpēc, ka neesmu tās komentējis.

Iet uz pamatiem 3. nodarbība

Ja izpildīsit šo piemēru, tiks parādīti kļūdu ziņojumi:

prog.go: 9: 14: nevar atsaukties uz neeksportētu nosaukumu math.pi

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

2. jautājums. Kāpēc kļūdas? Kā jūs varat labot programmu?

Iet uz pamatiem 4. nodarbība

3. jautājums. Salīdziniet šo deklarāciju ar ekvivalentu C. Kas ir atšķirīgs?

Iet uz pamatiem 8. nodarbība

4. jautājums. Kāpēc šī programma nemet kļūdas?

Iet uz pamatiem 10. nodarbība

5. jautājums. Kāds ir veids k? Kāpēc? Ja veids nav acīmredzams, skatiet 11. nodarbību, lai uzzinātu, kā to parādīt.

Iet uz pamatiem 12. nodarbība

Šī nodarbība atbild uz jautājumu, kuru es uzdevu 8. nodarbībā.

1. plūsmas kontroles nodarbība

6. jautājums. Kā tas atšķiras no priekš cilpa jūsu iecienītākajā valodā? Vai jūs domājat, ka jūsu iecienītākajā valodā ir nepieciešami citi cilpu konstrukcijas? Vai papildu informācija nākamajās trīs nodarbībās maina jūsu domas?

Pāriet plūsmas kontroles nodarbība 7

Pirms palaižat šo programmu, galds to pārbauda un pierakstiet, ko, jūsuprāt, tā izdrukās. Palaidiet programmu. Vai jums bija taisnība? Ja nē, ko jūs nesapratāt?

Dodieties uz plūsmas kontroles 8. nodarbību

Tas ir tāds vingrinājums, kādu jūs varētu saņemt baltās tāfeles intervijas sākumā. Laiku sev, kad jūs to izstrādājat. Izrunājot problēmu, sakiet, ko domājat.

7. jautājums. Ir svarīgi saprast pārējo plūsmas kontroles sadaļu. Pēc 9. līdz 13. nodarbības apgūšanas paskaidrojiet Go slēdzis un atlikt paziņojumus tādā veidā, ka C, Java vai JavaScript programmētājs varētu grokot.

Iet vairāk veidu 1. nodarbība

Pirms palaižat šo programmu, galds pārbaudiet to un pierakstiet, kā jūs domājat, ka tā tiks izdrukāta. Palaidiet programmu. Vai jums bija taisnība? Ja nē, ko jūs nesapratāt?

Kā jūs jūtaties, ja Go ir rādītāji, bet ne rādītāju aritmētika?

Strādājiet cauri sadaļai Vairāk veidu, līdz nonākat līdz 18. nodarbības vingrinājumam. 8. jautājums. Ko jūs uzzinājāt par Go masīviem un šķēlītēm? Tagad pabeidziet vingrinājumu.

Turpiniet vingrinājumu 23. nodarbībā.

9. jautājums. Izskaidrojiet Go karte. Kāpēc jūs vēlaties to izmantot?

Pabeidziet sadaļu Citi veidi.

10. jautājums. Vai Go var izmantot kā funkcionālu programmēšanas valodu, neskatoties uz kompilāciju? Kad un kāpēc jūs izmantojat slēgšanu?

Iet metodes un saskarnes

Apskatiet visas 25 šīs sadaļas nodarbības, sākot ar //tour.golang.org/methods/1.

11. jautājums. Kad esat pabeidzis, paskaidrojiet, kā Go metožu un saskarņu izmantošana atšķiras no C ++ klasēm. Kas jums patīk labāk? Kāpēc?

Iet vienlaicīgums

Gorina ir viena no Go vienlaicīguma iezīmēm. Pirmajā vienlaicīguma sadaļas nodarbībā mēģiniet pārbaudīt programmu (zemāk) un pierakstiet, ko, jūsuprāt, tā izdrukās.

Palaidiet programmu. Vai jums bija taisnība? Paskaidrojiet, kas patiesībā notiek un kāpēc.

Kanāli ir veids, kā netieši sinhronizēt gorutines. Nākamajā nodarbībā (zemāk) vēlreiz mēģiniet pārbaudīt programmu pirms tās palaišanas.

12. jautājums. Kāpēc šajā piemērā ir tikai viens kanāls, kaut arī ir divi gorutīnas zvani?

Atlasītais paziņojums ļauj gorutīnai gaidīt vairākas saziņas darbības. Kādā secībā izraksti tiek izpildīti zemāk esošajā programmā?

Vingrinājums par līdzvērtīgiem binārajiem kokiem ir vēl viens, ar kuru jūs varētu sastapties tāfeles intervijā. Laiks pats un izskaidrojiet savu domāšanu, īstenojot risinājumu. Tāpat veiciet vingrinājumu par tīmekļa rāpuļa ieviešanu tā, it kā jūs būtu intervijā.

Atbildes uz Go jautājumiem

1. atbilde. Iepakojumus apzīmē iepakojums paziņojums pašreizējai programmai un importēt paziņojums par izmantotajām ārējām pakotnēm. Šajā vienkāršajā programmā galvenais ir pašas programmas pakete, un tā tiek importēta fmt lai tā varētu izdrukāt, un matemātika/rand lai tas varētu ģenerēt nejaušu skaitli.

Dažādas metodes rand paļauties uz pulksteņa laiku, lai ģenerētu nejaušus skaitļus, bet laiks ir fiksēts gotour vide. Kā papildu vingrinājumu atrodiet paketi un metodi, kas ziņo par laiku (mājiens: meklējiet šeit, ja jūs iestrēgstat), un izmantojiet to, lai izdrukātu pašreizējo laiku. Palaidiet to vairākas reizes gotour vidi, kā arī izveidojiet programmu lokāli un palaidiet to vairākas reizes uz sava datora.

2. atbilde. Eksportam Go vienmēr jābūt lielajiem burtiem, un valoda ir reģistrjutīga. matemātika.Pi ir pareizā metode.

Atbilde 3. C / C ++ mainīgo deklarācijās izpildiet veidlapu (piem. int i, j, k;), turpretī Go tips aiz mainīgā nosaukuma iet un to var izlaist, ja vien to var secināt. Programmā C / C ++ atgriešanās tips ir pirms funkcijas nosaukuma, turpretī Go tas ir aiz funkciju parametru saraksta un pirms funkcijas pamatteksta. Programmā C / C ++ obligāti ir beigu semikoli.

Atbilde 4. Tas nemet kļūdas, jo Go mainīgie, kas nav iestatīti citādi, tiek inicializēti uz tipa nulles vērtību, piem. 0 vai nepatiesa. Programmā C / C ++ kompilators atzīmē neinicializētus mainīgos.

5. atbilde.k ir vesels skaitlis, jo tas tika inicializēts 3.

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