Vodič za Go: započnite s Google Goom

Zašto biste željeli koristiti jezik Go? U osnovi je to jezgrovit, jednostavan, siguran i brzo kompiliran jezik s prekrasnim značajkama istodobnosti i lako rukuje velikim projektima. Također je besplatan otvoreni izvor, iako je izvorno razvijen u Googleu.

Prema Robu Pikeu, jednom od dizajnera jezika, „ciljevi projekta Go bili su eliminirati sporost i nespretnost razvoja softvera na Googleu, a time i proces učiniti produktivnijim i skalabilnijim. Jezik su dizajnirali i za ljude koji pišu - i čitaju, uklanjaju pogreške i održavaju - velike softverske sustave. "

U skladu s tim ciljevima, Gou nedostaju mnoge značajke nekih drugih istaknutih jezika - i to je zapravo snaga. Go nije objektno orijentiran, nema datoteke zaglavlja ili prosljeđivanje deklaracija, nema hijerarhiju tipova, nema preopterećenje metode ili operatora, nema generičke podatke, nema virtualni stroj za vrijeme izvođenja, nema izuzetaka i nema tvrdnji.

S druge strane, ono što Go ima djeluje prilično dobro. Može kompilirati velike programe u nekoliko sekundi. Ima nisko nadzemne koroutine (zvane goroutine ) koje mogu učinkovito komunicirati putem kanala . Ima sučelja i sastav sučelja. Uz to, Go podržava prvoklasne funkcije, funkcije višeg reda, korisnički definirane vrste funkcija, literal funkcija, zatvaranja i višestruke povratne vrijednosti - drugim riječima, podržava funkcionalni stil programiranja na jako otkucanom jeziku.

Ako želite zatražiti bilo koju od nedostajućih značajki koje sam gore spomenuo, možda biste željeli pročitati raspravu o jezičnim promjenama u FAQ-u o jeziku Go: Odgovor je obično "Ne, jer ..." Općenito, najbolji su Go programi dizajniran od nule za upotrebu značajki jezika Go, umjesto da je preveden doslovno s drugih jezika koji koriste različite apstrakcije.

Instalirajte Go

Kratke upute za instaliranje Goa pojavljuju se u izvornom spremištu. Možete preuzeti binarna izdanja Goa za Windows, MacOS i Linux ili instalirati Go iz izvora. Pronaći ćete upute za instalaciju programa Go iz izvora na GitHubu.

Ako ste već instalirali Go, trebali biste provjeriti trenutnu verziju izrade na dnu //golang.org/, a zatim provjeriti instaliranu verziju iz naredbenog retka:

Verzija $ go

Ako je vaša instalacija zastarjela, preuzmite i instalirajte trenutnu verziju. Ponovo pokrenite sve otvorene naredbene naredbe (Windows) ili terminale. Ponovno pokrenite go versioni provjerite je li verzija onakva kakvu ste očekivali; ako ne, možda je negdje drugdje instalirana starija verzija Goa koju treba ukloniti.

(Ne, nisam paranoičan. Uspio sam se dovesti u situaciju koju sam opisao upotrebom Homebrewa za instaliranje jedne verzije i standardnog MacOS paketa za instaliranje sljedeće verzije mjesec dana ili nešto kasnije. Instaliraju se na različita mjesta na $PATH. Jednom kad sam shvatio što se dogodilo, uspio sam deinstalirati staru verziju s Homebrewom.)

Druga mogućnost instalacije, ako želite podršku i naknadu štete i ako možete platiti, jest korištenje ActiveGo-a.

Nakon što instalirate Go compiler i alate, trebali biste proći vježbu sastavljanja i pokretanja programa Go, kako je opisano u odjeljku "Testirajte svoju instalaciju" na stranici za instalaciju.

Postavite svoje Go okruženje

Idi programeri obično zadržati sve svoje koda u jednom radnom prostoru, s bin, pkgi srcmape. Unutar svake mape projekti obično imaju putove koji se odnose na Git spremišta, poput GitHub ili GitLab. Na primjer, držim sav svoj kod jezika Go ~/worki postavljam GOPATHvarijablu svog okruženja na $HOME/work. Put do moje mape izvornog koda "hello.go" je $GOPATH/src/github.com/meheller/hello.

Također dodam GOPATH/bindirektorij na svoj put, radi praktičnosti pokretanja programa Go iz bilo kojeg direktorija:

izvoz GOPATH = $ HOME / posao

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

Uslužni programi Go jezika instalirat će se GOPATHprema zadanim postavkama, pa stavljanje GOPATH/bindirektorija na stazu također olakšava pronalazak i uređivačima i IDE-ovima koji znaju program Go. Većinu uslužnih programa možete instalirati $go get nakon što saznate koji su vam potrebni i njihove staze do spremišta. Spremišta je obično lako pronaći pomoću Google pretraživanja. U nekim će slučajevima dodatak uređivača za Go automatski instalirati uslužne programe (npr. gocode).

Ako ga sami ne postavite, GOPATHzadane vrijednosti su $HOME/gona Unixu i MacOS-u te %USERPROFILE%/gona sustavu Windows.

Idite na jezične alate, uređivače i IDE-ove

Nekoliko uslužnih programa Go instalirano je kao dio paketa s kompajlerom. Ostale se mogu instalirati pomoću go getnaredbe. Najčešće korišteni uslužni programi naredbenog retka Go navedeni su u nastavku.

 
Ime Sinopsis
go Upravlja izvornim kodom Go i izvršava ostale ovdje navedene naredbe.
cgo Omogućuje stvaranje Go paketa koji pozivaju C kod.
cover Program za stvaranje i analizu profila pokrivenosti koje generira go test -coverprofile.
fix Programi Finds Go koji koriste stare značajke jezika i knjižnice te ih prepisuje kako bi upotrijebili novije.
fmt Paketi programa Formats Go. Dostupno i kao neovisna gofmtnaredba s općenitijim opcijama.
godoc Izdvaja i generira dokumentaciju za Go pakete.
vet Ispituje izvorni kod Go i prijavljuje sumnjive konstrukcije, poput Printfpoziva čiji se argumenti ne poklapaju sa nizom formata.

Uobičajeni način pozivanja većine ovih naredbi je go, na primjer, podkomande go fmt. Ostale treba pozvati putem go toolpodnaredbe. Na mojoj instalaciji go toolvraća sljedeći popis poznatih alata:

$ go alat

addr2line

asm

graditi

cgo

sastaviti

pokriti

dist

doc

popraviti

veza

nm

objdump

paket

pprof

test2json

obilazak

trag

veterinar

Ovi su alati dokumentirani kao dio cjelokupnog popisa naredbi Go. Usput, GOPATHprije dodavanja bilo kakvih alata Go ili bilo kojih dodataka za Go editor koji koriste alate Go , provjerite je li postavljen.

Spremištu Go nedostaje bilo koja podrška za uređivače ili IDE od verzije 1.4, ali postoji puno onih koji znaju za Go, bilo izvan okvira ili s modulima za dodavanje. O mnogim sam raspravljao u članku iz 2017. godine; postoji i neslužbeni popis koji održava zajednica Golang.

Moji omiljeni ID-ovi za Go jezik su GoLand (prikazano gore; preimenovan u Gogland otkako sam napisao članak 2017.) i Komodo. Oboje su plaćeni proizvodi s besplatnim probama.

Morat ćete instalirati Delve for Go za otklanjanje pogrešaka. Na MacOS-u ćete možda također trebati dodati uslužne programe naredbenog retka u Xcode i, možda, dodati meku poveznicu debugserver, kao što je opisano u komentaru od 5. lipnja na popisu izdanja Delve. Trčanje xcode-select --installće također riješiti probleme s pronalaskom debugserver, iako na grubu silu.

Moji omiljeni Go-svjesni urednici s GUI-jevima su Atom i Visual Studio Code; oboje su besplatni. Ako odaberete Atom, razmislite o dodavanju paketa go-plus i go-debug; ako odaberete Visual Studio Code, razmislite o dodavanju vscode-go.

Ako ste zagriženi korisnik Vima ili Emacsa, svakako ostanite pri onome što znate - ne da bih i vaš urednik mogao izvući iz vaših hladnih, mrtvih ruku. Vim-go dodaje podršku za jezik Go za Vim, a go-mode dodaje podršku za jezik Go za Emacs.

Tour of Go

Možete prilično naučiti prolazeći kroz "Tour of Go", bilo online ili offline. Pod pretpostavkom da ste dovršili lokalnu instalaciju Go prevoditelja i alata, možete instalirati obilazak koji će se izvoditi lokalno pokretanjem ove dvije naredbe:

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

$ gotour

Drugi redak trebao bi pokrenuti web poslužitelj i otvoriti prozor preglednika. Ovo će izgledati točno kao internetska turneja, ali možda će se pokrenuti malo brže jer gradi i pokreće uzorke koda na vašem računalu. Pritisnite Ctrl-C u naredbenom prozoru da zaustavite poslužitelj kada završite.

Obilazak je podijeljen u tri cjeline. Želim da prođete cijelu turneju, uključujući i kvizove, ali sažet ću svaki odjeljak u nastavku kao pregled i postaviti vam nekoliko pitanja. Odgovore na svoja pitanja dajem na kraju članka (bez virenja!). 

Idite na osnove jezika

Idi Osnove Lekcija 1

Pitanje 1. U ovom primjeru postoje tri paketa. Što su oni i kako se koriste? Zašto program uvijek vraća isti broj iako postoji randfunkcija?

Imajte na umu da nisam prozvao lekciju 2. Ne preskačite lekcije samo zato što ih nisam komentirao.

Idi Osnove Lekcija 3

Ako pokrenete ovaj primjer, vidjet ćete poruke pogreške:

prog.go: 9: 14: ne može se odnositi na neizvezeno ime math.pi

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

Pitanje 2. Zašto greške? Kako možete popraviti program?

Idi Osnove Lekcija 4

Pitanje 3. Usporedite ovu izjavu s ekvivalentom u C. Što je drugačije?

Idi Osnove Lekcija 8

Pitanje 4. Zašto ovaj program ne donosi pogreške?

Idi Osnove Lekcija 10

Pitanje 5. Koja je vrsta k? Zašto? Ako vrsta nije očita, pogledajte Lekciju 11 da biste saznali kako je prikazati.

Idi Osnove Lekcija 12

Ova lekcija odgovara na pitanje koje sam postavio u lekciji 8.

Idi Lekcija kontrole protoka 1

Pitanje 6. Po čemu se ovo razlikuje od forpetlje u vašem omiljenom jeziku? Mislite li da su neophodni drugi načini petlje na vašem omiljenom jeziku? Mijenjaju li vam dodatne informacije u sljedeće tri lekcije?

Idi Lekcija kontrole protoka 7

Prije pokretanja ovog programa, provjerite na stolu i zapišite ono što mislite da će se ispisati. Pokrenite program. Jeste li bili u pravu? Ako ne, što niste razumjeli?

Idi Lekcija kontrole protoka 8

Ovo je vrsta vježbe koju biste mogli dobiti na početku razgovora na bijeloj ploči. Vremenom se bavite dok to rješavate. Recite što mislite dok rješavate problem.

Pitanje 7. Važno je razumjeti ostatak odjeljka za kontrolu protoka. Nakon prolaska kroz lekcije od 9 do 13, objasnite Go switchi deferizjave na način na koji bi programer za C, Java ili JavaScript mogao pipati.

Idi više vrsta Lekcija 1

Prije pokretanja ovog programa, provjerite na stolu i zapišite ono što mislite da će se ispisati. Pokrenite program. Jeste li bili u pravu? Ako ne, što niste razumjeli?

Što mislite o tome da Go ima pokazivače, ali ne i aritmetiku pokazivača?

Prođite kroz odjeljak Više vrsta dok ne dođete do vježbe iz Lekcije 18. Pitanje 8. Što ste naučili o Go nizovima i kriškama? Sada dovršite vježbu.

Nastavite kroz vježbu u lekciji 23.

Pitanje 9. Objasnite Go map. Zašto biste ga željeli koristiti?

Završite odjeljak Više vrsta.

Pitanje 10. Može li se Go koristiti kao funkcijski programski jezik, unatoč kompajliranju? Kada i zašto biste koristili zatvarače?

Go metode i sučelja

Prođite kroz svih 25 lekcija u ovom odjeljku, počevši od //tour.golang.org/methods/1.

Pitanje 11. Kad završite, objasnite kako se Goova metoda i sučelja razlikuju od klasa C ++. Koji vam se više sviđa? Zašto?

Idi paralelno

Goroutin je jedna od značajki značajke Go za istodobnost. U prvoj lekciji u paralelnom odjeljku, pokušajte provjeriti program (ispod) i zapišite ono što mislite da će se ispisati.

Pokrenite program. Jeste li bili u pravu? Objasnite što se zapravo događa i zašto.

Kanali su način implicitne sinkronizacije goroutina. U sljedećoj lekciji (dolje), pokušajte ponovo provjeriti program prije nego što ga pokrenete.

Pitanje 12. Zašto je u ovom primjeru samo jedan kanal, iako postoje dva goroutinska poziva?

Izjava select omogućuje goroutinu da pričeka na više komunikacijskih operacija. Kojim se redoslijedom pokreću izjave u donjem programu?

Vježba na ekvivalentnim binarnim stablima još je jedna s kojom biste se mogli susresti u razgovoru za bijelu ploču. Odredite vrijeme i objasnite svoje razmišljanje dok implementirate rješenje. Slično tome, napravite vježbu na implementaciji web alata za indeksiranje kao da ste na razgovoru.

Odgovori na pitanja Go

Odgovor 1. Paketi su označeni packageizjavom za trenutni program i importizjavom za vanjske pakete koji se koriste. U ovom jednostavnom programu mainnalazi se vlastiti paket programa koji se uvozi fmtkako bi mogao ispisivati ​​i math/ randtako da može generirati slučajni broj.

Razne metode randoslanjaju se na vrijeme sata za generiranje slučajnih brojeva, ali vrijeme je fiksno u gotourokruženju. Kao dodatnu vježbu pronađite paket i metodu koja izvještava o vremenu (savjet: pogledajte ovdje ako zapnete) i upotrijebite ga za ispis trenutnog vremena. Pokrenite ovo više puta u gotourokruženju, a također izradite program lokalno i pokrenite ga više puta na vlastitom računalu.

Odgovor 2. Izvoz u programu Go uvijek se mora pisati velikim slovom, a jezik razlikuje velika i mala slova. math.Pije ispravna metoda.

Odgovor 3. U C / C ++ deklaracije varijabli slijede obrazac (npr. int i, j, k;), Dok u Go tip ide iza imena varijable i može se izostaviti sve dok se može zaključiti o tipu. U C / C ++ tip povratka prethodi imenu funkcije, dok u Go dolazi nakon popisa parametara funkcije i prije tijela funkcije. U C / C ++, prateće točke sa zarezom su obvezne.

Odgovor 4. Ne baca pogreške jer su varijable Go koje nisu drugačije postavljene inicijalizirane na nultu vrijednost tipa, npr . 0Ili false. U C / C ++, kompajler označava neinicijalizirane varijable.

Odgovor 5.k je cijeli broj, jer je inicijaliziran u 3.