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 version
i 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
, pkg
i src
mape. 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 ~/work
i postavljam GOPATH
varijablu 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/bin
direktorij na svoj put, radi praktičnosti pokretanja programa Go iz bilo kojeg direktorija:
izvoz GOPATH = $ HOME / posaoizvoz PATH = $ PATH: $ (go env GOPATH) / bin
Uslužni programi Go jezika instalirat će se GOPATH
prema zadanim postavkama, pa stavljanje GOPATH/bin
direktorija 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, GOPATH
zadane vrijednosti su $HOME/go
na Unixu i MacOS-u te %USERPROFILE%/go
na 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 get
naredbe. 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 gofmt naredba s općenitijim opcijama. |
godoc |
Izdvaja i generira dokumentaciju za Go pakete. |
vet |
Ispituje izvorni kod Go i prijavljuje sumnjive konstrukcije, poput Printf poziva č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 tool
podnaredbe. Na mojoj instalaciji go tool
vraća sljedeći popis poznatih alata:
$ go alataddr2line
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, GOPATH
prije 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 rand
funkcija?
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.piprog.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 for
petlje 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 switch
i defer
izjave 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 package
izjavom za trenutni program i import
izjavom za vanjske pakete koji se koriste. U ovom jednostavnom programu main
nalazi se vlastiti paket programa koji se uvozi fmt
kako bi mogao ispisivati i math
/ rand
tako da može generirati slučajni broj.
Razne metode rand
oslanjaju se na vrijeme sata za generiranje slučajnih brojeva, ali vrijeme je fiksno u gotour
okruž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 gotour
okruž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.Pi
je 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 . 0
Ili false
. U C / C ++, kompajler označava neinicijalizirane varijable.
Odgovor 5.k
je cijeli broj, jer je inicijaliziran u 3
.