Programiranje

Vadnica za Go: začnite uporabljati Google Go

Zakaj bi želeli uporabljati jezik Go? V bistvu gre za jedrnat, preprost, varen in hitro preveden jezik s čudovitimi funkcijami sočasnosti in z lahkoto obvladuje velike projekte. Prav tako je brezplačna odprtokodna, čeprav je bila prvotno razvita pri Googlu.

Po besedah ​​Roba Pikea, enega od oblikovalcev jezika, »so bili cilji projekta Go odpraviti počasnost in okornost razvoja programske opreme pri Googlu ter s tem narediti postopek bolj produktiven in razširljiv. Jezik so oblikovali ljudje, ki pišejo - in berejo, odpravljajo napake in vzdržujejo - velike sisteme programske opreme. "

V skladu s temi cilji Go nima veliko lastnosti nekaterih drugih pomembnih jezikov - in to je pravzaprav moč. Go ni objektno usmerjen, nima datotek z glavo ali posredovanih deklaracij, nima hierarhije tipov, nima preobremenitve metode ali operaterja, nima generikov, nima navidezni stroj za izvajalno okolje, nima izjem in trditev.

Po drugi strani pa tisto, kar ima Go, deluje precej dobro. V nekaj sekundah lahko zbere velike programe. Ima nizke koroutine (imenovane goroutine), ki lahko učinkovito komunicirajo prek kanalov. Ima vmesnike in sestavo vmesnikov. Poleg tega Go podpira prvovrstne funkcije, funkcije višjega reda, uporabniško določene vrste funkcij, literale funkcij, zapore in več vrnjenih vrednosti - z drugimi besedami, podpira funkcijski slog programiranja v močno vtipkanem jeziku.

Če želite zahtevati katero od manjkajočih funkcij, ki sem jih omenil zgoraj, boste morda želeli prebrati razpravo o jezikovnih spremembah v pogostih vprašanjih o jeziku Go: Odgovor je običajno "Ne, ker ..." Na splošno so najboljši programi Go zasnovan za uporabo funkcij jezika Go in ne dobesedno preveden iz drugih jezikov, ki uporabljajo drugačne abstrakcije.

Namestite Go

Kratka navodila za namestitev Go se pojavijo v izvornem repozitoriju. Lahko prenesete binarne različice Go za Windows, MacOS in Linux ali namestite Go iz vira. Na GitHubu boste našli navodila za namestitev programa Go iz vira.

Če ste že namestili Go, preverite trenutno različico gradnje na dnu //golang.org/ in nato preverite nameščeno različico v ukazni vrstici:

Različica $ go

Če je vaša namestitev zastarela, prenesite in namestite trenutno različico. Znova zaženite vse odprte ukazne pozive (Windows) ali terminale. Ponovno go različica in se prepričajte, da je različica takšna, kot ste pričakovali; v nasprotnem primeru je morda drugje nameščena starejša različica programa Go, ki jo je treba odstraniti.

(Ne, nisem paranoičen. V situacijo, ki sem jo opisal, sem se znašel s pomočjo Homebrewa za namestitev ene različice in standardnega paketa MacOS za namestitev naslednje različice približno mesec dni kasneje. Nameščajo se na druga mesta na $ PATH. Ko sem ugotovil, kaj se je zgodilo, sem lahko staro različico odstranil s programom Homebrew.)

Druga možnost namestitve, če želite podporo in odškodnino in lahko plačate, je uporaba ActiveGo.

Ko imate nameščen prevajalnik Go in orodja, se morate preizkusiti v sestavljanju in zagonu programa Go, kot je opisano v razdelku »Preizkusite namestitev« na strani za namestitev.

Nastavite okolje Go

Programerji Go običajno vso svojo kodo hranijo v enem delovnem prostoru s zabojnik, pkg, in src mape. Znotraj vsake mape imajo projekti običajno poti, ki se nanašajo na repozitoriji Git, kot sta GitHub ali GitLab. Na primer, vso svojo jezikovno kodo Go shranjujem pod ~ / delo, in nastavite mojo GOPATH okolje spremenljivka na $ HOME / delo. Pot do moje mape z izvorno kodo "hello.go" je $ GOPATH / src / github.com / meheller / zdravo.

Dodam tudi GOPATH / koš imenik na mojo pot, za lažje izvajanje programov Go iz katerega koli imenika:

izvoz GOPATH = $ HOME / delo

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

Jezikovne pripomočke Go bodo namestili v GOPATH privzeto, zato postavitev GOPATH / koš imenik na poti tudi olajša iskanje vas in urejevalnikov IDE, ki so seznanjeni s storitvijo Go. Večino pripomočkov lahko namestite z $ pojdi ko enkrat veste, katere potrebujete, in poti do njih. Skladišča je običajno enostavno najti z Googlovim iskanjem. V nekaterih primerih bo pomožni program namestil vtičnik za Go za Go (npr. gocode) samodejno.

Če si tega ne nastavite sami, GOPATH privzeto $ HOME / go na Unixu in MacOS-u ter % USERPROFILE% / go v sistemu Windows.

Go jezikovna orodja, urejevalniki in IDE

V paketu s prevajalnikom je nameščenih več pripomočkov Go. Druge lahko namestite z Pojdi iskat ukaz. Spodaj so navedeni najbolj uporabljeni pripomočki ukazne vrstice Go.

 
ImePovzetek
pojdiUpravlja izvorno kodo Go in zažene druge tukaj naštete ukaze.
cgoOmogoča ustvarjanje paketov Go, ki kličejo kodo C.
pokrovProgram za ustvarjanje in analizo profilov pokritosti, ki jih generira pojdi test -coverprofile.
popravitiProgrami Finds Go, ki uporabljajo stare funkcije jezika in knjižnic, jih prepišejo tako, da uporabijo novejše.
fmtPaketi Formats Go. Na voljo tudi kot neodvisen gofmt ukaz s splošnejšimi možnostmi.
godocIzvleče in ustvari dokumentacijo za pakete Go.
veterinarPreuči izvorno kodo Go in prijavi sumljive konstrukte, kot je Printf klici, katerih argumenti se ne ujemajo z nizom oblike.

Običajni način klicanja večine teh ukazov je kot podkomande pojdi, na primer pojdi fmt. Druge je treba poklicati prek go orodje podkomando. Na moji namestitvi, go orodje vrne naslednji seznam znanih orodij:

$ go orodje

addr2line

asm

buildid

cgo

sestavi

pokrov

dist

doc

popraviti

povezava

nm

objdump

paket

pprof

test2json

ogled

sled

veterinar

Ta orodja so dokumentirana kot del celotnega seznama ukazov Go. Mimogrede, poskrbite za svoje GOPATH je nastavljen pred dodajanjem orodij Go ali vtičnikov urejevalnika Go, ki uporabljajo orodja Go.

Repozitorij Go od različice 1.4 nima nobene podpore za urejevalnike ali IDE, vendar obstaja veliko tistih, ki vedo za Go, bodisi iz škatle bodisi z dodatnimi moduli. O mnogih od njih sem razpravljal v članku iz leta 2017; obstaja tudi neuradni seznam, ki ga vodi skupnost Golang.

Moja najljubša IDE v jeziku Go sta GoLand (prikazano zgoraj; preimenovano v Gogland, odkar sem članek napisal leta 2017) in Komodo. Oba sta plačana izdelka z brezplačnimi preskusi.

Namestite orodje za odpravljanje napak Delve for Go. V MacOS-u boste morda morali v Xcode dodati tudi pripomočke ukazne vrstice in morda dodati mehko povezavo do razhroščevalec, kot je opisano v komentarju z dne 5. junija na seznamu številk Delve. Tek xcode-select --install bo odpravil tudi težave z iskanjem razhroščevalec, čeprav na surovo silo.

Moja najljubša urejevalnika z grafičnimi vmesniki, ki se zaveda Go, sta Atom in Visual Studio Code; oba sta brezplačna. Če izberete Atom, razmislite o dodajanju paketov go-plus in go-debug; če izberete Visual Studio Code, razmislite o dodajanju vscode-go.

Če ste trdi uporabnik Vima ali Emacsa, potem vsekakor ostanite pri tem, kar veste - ne pa, da bi lahko vašega urednika celo odtrgal iz vaših mrzlih, mrtvih rok. Vim-go doda podporo za jezik Go za Vim, go-mode pa podporo za jezik Go za Emacs.

Ogled Go

Precej se lahko naučite tako, da opravite "Tour of Go", bodisi v spletu ali zunaj njega. Ob predpostavki, da ste zaključili lokalno namestitev prevajalnika in orodij Go, lahko turnejo namestite lokalno tako, da zaženete ta dva ukaza:

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

$ gotour

Druga vrstica naj zažene spletni strežnik in odpre okno brskalnika. To bo videti povsem podobno kot spletna predstavitev, vendar bo morda teklo nekoliko hitreje, ker gradi in zažene vzorce kode na vašem računalniku. Pritisnite Ctrl-C v ukaznem oknu, da zaustavite strežnik, ko končate.

Ogled je razdeljen na tri sklope. Želim si, da se podate skozi celotno turnejo, vključno s kvizi, vendar bom spodnji povzetek povzel kot pregled in vam postavil nekaj vprašanj. Odgovore na svoja vprašanja podajam na koncu članka (brez pokukanja!).

Pojdi na jezikovne osnove

Go Basics Lekcija 1

Vprašanje 1. V tem primeru so trije paketi. Kaj so in kako se uporabljajo? Zakaj program vrne vedno isto številko, čeprav obstaja rand funkcijo?

Upoštevajte, da nisem poklical Lekcije 2. Ne izpuščajte lekcij samo zato, ker jih nisem komentiral.

Pojdi Osnove Lekcija 3

Če zaženete ta primer, se prikažejo sporočila o napakah:

prog.go: 9: 14: ne more se sklicevati na neizvoženo ime math.pi

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

2. vprašanje Zakaj napake? Kako lahko popravite program?

Pojdi Osnove Lekcija 4

Vprašanje 3 Primerjajte to izjavo z enakovrednim v C. Kaj je drugačno?

Pojdi Osnove Lekcija 8

Vprašanje 4 Zakaj ta program ne povzroči napak?

Pojdi Osnove Lekcija 10

5. vprašanje. Kakšna je vrsta k? Zakaj? Če vrsta ni očitna, si oglejte Lekcijo 11, če želite izvedeti, kako jo prikazati.

Pojdi Osnove Lekcija 12

Ta lekcija odgovarja na vprašanje, ki sem ga postavil v lekciji 8.

Pojdite na Lekcija za nadzor toka 1

6. vprašanje. V čem se to razlikuje od za zanko v vašem najljubšem jeziku? Ali menite, da so potrebni drugi zankasti konstrukti v vašem najljubšem jeziku? Se vam dodatne informacije v naslednjih treh lekcijah premislijo?

Pojdite v Lection Control 7

Preden zaženete ta program, ga preverite in zapišite, kaj mislite, da se bo natisnil. Zaženite program. Ste imeli prav? Če ne, kaj niste razumeli?

Pojdite na Lekcija za nadzor pretoka 8.

Takšno vajo lahko dobite na začetku razgovora na tabli. Čas si čas, ko si to izmislite. Povejte, kaj razmišljate, ko rešite težavo.

7. vprašanje. Preostali del pretoka je pomemben za razumevanje. Po končanih lekcijah od 9 do 13 razložite Go stikalo in odloži izjave na način, da bi programer C, Java ali JavaScript lahko otipal.

Pojdi več vrst Lekcija 1

Preden zaženete ta program, ga preverite in zapišite, kaj mislite, da se bo natisnil. Zaženite program. Ste imeli prav? Če ne, kaj niste razumeli?

Kako se počutite pri tem, da ima Go kazalce, ne pa tudi aritmetike kazalcev?

Delajte v razdelku Več vrst, dokler ne pridete do vaje v lekciji 18. Vprašanje 8. Kaj ste izvedeli o nizih in rezinah Go? Zdaj zaključite vajo.

Nadaljujte z vajo v lekciji 23.

Vprašanje 9. Pojasnite Go zemljevid. Zakaj bi ga želeli uporabiti?

Končajte razdelek Več vrst.

Vprašanje 10. Ali se Go lahko uporablja kot funkcijski programski jezik, čeprav je sestavljen? Kdaj in zakaj bi uporabljali zapore?

Go metode in vmesniki

Preglejte vseh 25 lekcij v tem poglavju, začenši z //tour.golang.org/methods/1.

Vprašanje 11. Ko končate, razložite, kako se Go-jeva uporaba metod in vmesnikov razlikuje od razredov C ++. Kateri vam je bolj všeč? Zakaj?

Pojdi sočasno

Goroutin je ena od značilnosti Go za sočasnost. V prvi lekciji v razdelku o sočasnosti poskusite preveriti program (spodaj) in zapišite, kaj mislite, da bo natisnjen.

Zaženite program. Ste imeli prav? Pojasnite, kaj se dejansko zgodi in zakaj.

Kanali so način za implicitno sinhronizacijo goroutin. V naslednji lekciji (spodaj) poskusite znova preveriti program, preden ga zaženete.

Vprašanje 12. Zakaj je v tem primeru samo en kanal, čeprav gre za dva klica goroutine?

Stavek select omogoča, da program počaka na več komunikacijskih operacij. V kakšnem vrstnem redu se izvajajo stavki v spodnjem programu?

Vaja na enakovrednih binarnih drevesih je še ena, s katero se lahko srečate v intervjuju za tablo. Med izvajanjem rešitve si določite čas in razložite svoje razmišljanje. Podobno izvedite vajo za izvajanje spletnega pajka, kot da bi bili na razgovoru.

Odgovori na vprašanja Go

Odgovor 1. Pakete določi paket izjavo za trenutni program in uvoz izjava za zunanje pakete, ki se uporabljajo. V tem preprostem programu glavni je lastni paket programa in ga uvaža fmt tako da lahko tiska in matematika/rand tako da lahko ustvari naključno število.

Različne metode v rand se zanašanje na naključne številke zanaša na čas ure, vendar je čas določen v gotour okolje. Kot nadaljnjo vajo poiščite paket in metodo, ki poročata o času (namig: poglejte tukaj, če se zataknete), in z njo natisnite trenutni čas. Zaženite to večkrat v gotour okolje, pa tudi program zgradite lokalno in ga večkrat zaženite na svojem računalniku.

Odgovor 2. Izvozi v storitvi Go morajo biti vedno napisani z velikimi črkami, jezik pa je odvisen od velikih in malih črk. matematika.Pi je pravilna metoda.

Odgovor 3. V izjavah spremenljivk C / C ++ sledite obrazcu (npr. int i, j, k;), medtem ko gre v tipu za imenom spremenljivke in ga je mogoče izpustiti, dokler je mogoče sklepati na tip. V C / C ++ je vrsta vrnitve pred imenom funkcije, v Go pa za seznamom parametrov funkcije in pred telesom funkcije. V C / C ++ so zadnji podpičji obvezni.

Odgovor 4. Napake ne vrže, ker so spremenljivke Go, ki sicer niso nastavljene, inicializirane na ničelno vrednost tipa, npr. 0 ali napačno. V C / C ++ prevajalnik zastavi neinicializirane spremenljivke.

Odgovor 5.k je celo število, ker je bilo inicializirano na 3.

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