Hvorfor vil du bruge Go-sproget? Dybest set er det et kortfattet, simpelt, sikkert og hurtigt kompileret sprog med vidunderlige samtidige funktioner, og det håndterer let store projekter. Det er også gratis open source, selvom det oprindeligt blev udviklet hos Google.
Ifølge Rob Pike, en af sprogets designere, var ”målene med Go-projektet at eliminere den langsomme og klodsede softwareudvikling hos Google og derved gøre processen mere produktiv og skalerbar. Sproget blev designet af og for folk, der skriver - og læser og fejler og vedligeholder - store softwaresystemer. ”
I overensstemmelse med disse mål mangler Go mange funktioner på nogle andre fremtrædende sprog - og det er faktisk en styrke. Go er ikke objektorienteret, den har ikke headerfiler eller videresendelseserklæringer, den har ikke et typehierarki, den har ikke metode eller overbelastning af operatøren, den har ikke generiske egenskaber, den har ikke en virtuel maskine til en runtime, har den ikke undtagelser, og den har ikke påstande.
På den anden side fungerer hvad Go har ret godt. Det kan kompilere store programmer på få sekunder. Det har lavt overhead coroutines (kaldet goroutines) der kan kommunikere effektivt igennem kanaler. Det har grænseflader og grænsefladesammensætning. Derudover understøtter Go førsteklasses funktioner, højere ordensfunktioner, brugerdefinerede funktionstyper, funktionsbogstaver, lukninger og flere returværdier - med andre ord understøtter den en funktionel programmeringsstil i et stærkt skrevet sprog.
Hvis du ønsker at anmode om nogle af de manglende funktioner, jeg har nævnt ovenfor, vil du måske læse diskussionen om sprogændringer i Go-sproget FAQ: Svaret er normalt "Nej, fordi ..." Generelt er de bedste Go-programmer designet fra bunden til at bruge Go-sprogfunktioner snarere end oversat bogstaveligt fra andre sprog, der bruger forskellige abstraktioner.
Installer Go
De korte instruktioner til installation af Go vises i kildelageret. Du kan downloade binære udgivelser af Go til Windows, MacOS og Linux eller installere Go fra kilden. Du finder instruktioner til installation af Gå fra kilde på GitHub.
Hvis du allerede har Go installeret, skal du kontrollere den aktuelle buildversion nederst på //golang.org/ og derefter kontrollere din installerede version fra kommandolinjen:
$ go version
Hvis din installation er forældet, skal du downloade og installere den aktuelle version. Genstart alle åbne kommandoprompter (Windows) eller terminaler. Kør igen go version
og sørg for, at versionen er, som du forventede; hvis ikke, er der muligvis en ældre version af Go installeret et andet sted, der skal fjernes.
(Nej, jeg er ikke paranoid. Det lykkedes mig at komme mig ind i den situation, jeg beskrev, ved at bruge Homebrew til at installere en version og standard MacOS-pakken til at installere den næste version en måned eller deromkring senere. De installeres forskellige steder på $ PATH
. Når jeg først havde fundet ud af, hvad der var sket, kunne jeg afinstallere den gamle version med Homebrew.)
En anden installationsmulighed, hvis du vil have support og skadesløsholdelse, og du er i stand til at betale, er at bruge ActiveGo.
Når Go-kompilatoren og værktøjerne er installeret, skal du gennemgå øvelsen med at kompilere og køre et Go-program som beskrevet i afsnittet "Test din installation" på installationssiden.
Konfigurer dit Go-miljø
Go-programmører opbevarer typisk al deres kode i et arbejdsområde med beholder
, pkg
og src
mapper. Inden for hver mappe har projekterne typisk stier, der vedrører Git-arkiver, såsom GitHub eller GitLab. For eksempel holder jeg al min Go-sprogkode under ~ / arbejde
, og indstil min GOPATH
miljøvariabel til $ HJEM / arbejde
. Stien til min “hello.go” kildekodemappe er $ GOPATH / src / github.com / meheller / hej
.
Jeg tilføjer også GOPATH / skraldespand
mappe til min sti, for nemheds skyld at køre Go-programmer fra ethvert bibliotek:
eksporter GOPATH = $ HOME / arbejdeeksporter PATH = $ PATH: $ (gå env GOPATH) / bin
Go-sprogværktøjerne installeres i GOPATH
som standard, så sætte GOPATH / skraldespand
bibliotek på stien gør det også lettere for dig og Go-opmærksomme redaktører og IDE'er at finde dem. Du kan installere de fleste hjælpeprogrammer med $ hent
når du først ved, hvilke du har brug for, og deres arkivstier. Opbevaringsstederne er normalt nemme at finde med en Google-søgning. I nogle tilfælde vil et editor-plug-in til Go installere hjælpeprogrammerne (f.eks. gocode
) automatisk.
Hvis du ikke indstiller det selv, GOPATH
som standard $ HJEM / gå
på Unix og MacOS og % USERPROFILE% / gang
på Windows.
Gå sprogværktøjer, redaktører og IDE'er
Flere Go-værktøjer er installeret som en del af pakken med compileren. Andre kan installeres med Hent
kommando. De mest anvendte Go-kommandolinjefunktioner er angivet nedenfor.
Navn | Synopsis |
---|---|
gå | Manages Go-kildekoden og kører de andre kommandoer, der er anført her. |
cgo | Aktiverer oprettelse af Go-pakker, der kalder C-kode. |
dække over | Et program til oprettelse og analyse af dækningsprofiler genereret af gå test -coverprofile . |
rette op | Finder Go-programmer, der bruger de gamle funktioner i sproget og bibliotekerne, og omskriver dem til at bruge nyere. |
fmt | Formater Go-pakker. Fås også som uafhængig gofmt kommando med mere generelle indstillinger. |
godoc | Uddrag og genererer dokumentation til Go-pakker. |
dyrlæge | Undersøger Go-kildekoden og rapporterer mistænkelige konstruktioner, såsom Printf opkald, hvis argumenter ikke stemmer overens med formatstrengen. |
Den sædvanlige måde at kalde på de fleste af disse kommandoer er som underkommandoer til gå
, for eksempel gå fmt
. Andre skal kaldes via gå værktøj
underkommando. På min installation, gå værktøj
returnerer følgende liste over kendte værktøjer:
$ go værktøjaddr2line
asm
buildid
cgo
udarbejde
dække over
dist
dok
rette op
link
nm
objdump
pakke
pprof
test2json
tur
spor
dyrlæge
Disse værktøjer er dokumenteret som en del af den fulde liste over Go-kommandoer. Sørg forresten af din GOPATH
er indstillet, før du tilføjer Go-værktøjer eller Go-editor-plug-ins, der bruger Go-værktøjer.
Go-arkivet har manglet nogen editor eller IDE-understøttelse siden version 1.4, men der er masser af begge, der kender til Go, enten ud af kassen eller med tilføjelsesmoduler. Jeg diskuterede mange af disse i en artikel fra 2017; der er også en uofficiel liste vedligeholdt af Golang-samfundet.
Mine foretrukne Go-sprog-IDE'er er GoLand (vist ovenfor; omdøbt fra Gogland siden jeg skrev artiklen i 2017) og Komodo. Begge er betalte produkter med gratis prøveversioner.
Du vil gerne installere Delve for Go-fejlretning. På MacOS skal du muligvis også føje kommandolinjeværktøjerne til Xcode og muligvis tilføje et softlink til debugserver
, som beskrevet i kommentaren fra 5. juni på listen Delve-spørgsmål. Løb xcode-select - installer
vil også løse problemer med at finde debugserver
omend på en brutal måde.
Mine foretrukne Go-klarede redaktører med GUI'er er Atom og Visual Studio Code; begge er gratis. Hvis du vælger Atom, overvej at tilføje pakkerne go-plus og go-debug; Hvis du vælger Visual Studio Code, skal du overveje at tilføje vscode-go.
Hvis du er en hardcore Vim- eller Emacs-bruger, skal du under alle omstændigheder forblive med det, du kender - ikke at jeg endda kunne lukke din redaktør fra dine kolde, døde hænder. Vim-go tilføjer Go-sprogstøtte til Vim, og go-mode tilføjer Go-sprogstøtte til Emacs.
En rundvisning
Du kan lære en hel del ved at gå igennem "A Tour of Go", enten online eller offline. Forudsat at du har afsluttet den lokale installation af Go-kompilatoren og værktøjerne, kan du installere turen til at køre lokalt ved at køre disse to kommandoer:
$ go get golang.org/x/tour/gotour$ gotour
Den anden linje skal starte en webserver og åbne et browservindue. Dette vil se nøjagtigt ud som online-turen, men kan køre lidt hurtigere, fordi det bygger og kører kodeeksemplerne på din egen maskine. Tryk på Ctrl-C i kommandovinduet for at stoppe serveren, når du er færdig.
Turen er opdelt i tre sektioner. Jeg vil have dig til at gennemgå hele turen inklusive quizzer, men jeg opsummerer hvert afsnit nedenfor som en oversigt og stiller dig nogle spørgsmål. Jeg giver svarene på mine spørgsmål i slutningen af artiklen (ikke kigger!).
Gå til grundlæggende sprog
Gå grundlæggende lektion 1
Spørgsmål 1. I dette eksempel er der tre pakker. Hvad er de, og hvordan bruges de? Hvorfor returnerer programmet altid det samme nummer, selvom der er et rand
fungere?
Bemærk, at jeg ikke har kaldt lektion 2. Spring ikke over lektioner, bare fordi jeg ikke har kommenteret dem.
Gå grundlæggende lektion 3
Hvis du kører dette eksempel, får du vist fejlmeddelelser:
prog.go: 9: 14: kan ikke henvise til ikke-eksporteret navn math.piprog.go: 9: 14: udefineret: math.pi
Spørgsmål 2. Hvorfor fejlene? Hvordan kan du ordne programmet?
Gå grundlæggende lektion 4
Spørgsmål 3. Sammenlign denne erklæring med det tilsvarende i C. Hvad er forskelligt?
Gå grundlæggende lektion 8
Spørgsmål 4. Hvorfor kaster dette program ingen fejl?
Gå grundlæggende lektion 10
Spørgsmål 5. Hvad er typen af k
? Hvorfor? Hvis typen ikke er åbenbar, skal du se på lektion 11 for at finde ud af, hvordan du viser den.
Gå grundlæggende lektion 12
Denne lektion svarer på det spørgsmål, jeg stillede i lektion 8.
Gå Flow Control Lektion 1
Spørgsmål 6. Hvordan er dette forskelligt fra til
loop på dit yndlingssprog? Tror du, at de andre looping-konstruktioner på dit yndlingssprog er nødvendige? Skifter de yderligere oplysninger i de næste tre lektioner dig?
Gå Flow Control Lektion 7
Inden du kører dette program, skal du kontrollere det og skrive ned, hvad du tror, det vil udskrive. Kør programmet. Var du korrekt? Hvis ikke, hvad forstod du ikke?
Gå Flow Control Lektion 8
Dette er den slags øvelse, du kan få i begyndelsen af et whiteboard-interview. Time dig selv, mens du træner det. Sig hvad du tænker, mens du arbejder igennem problemet.
Spørgsmål 7. Resten af flowkontrolafsnittet er vigtigt at forstå. Efter at have gennemgået lektion 9 til 13, forklar Go kontakt
og udsætte
udsagn på en måde, som en C-, Java- eller JavaScript-programmør kunne grok.
Gå flere typer Lektion 1
Inden du kører dette program, skal du kontrollere det og skrive ned, hvad du tror, det vil udskrive. Kør programmet. Var du korrekt? Hvis ikke, hvad forstod du ikke?
Hvad synes du om at gå med pegepinde, men ikke pege-aritmetik?
Arbejd gennem sektionen Flere typer, indtil du kommer til øvelsen i lektion 18. Spørgsmål 8. Hvad lærte du om Go-arrays og skiver? Gennemfør nu øvelsen.
Fortsæt gennem øvelsen i lektion 23.
Spørgsmål 9. Forklar en Go kort
. Hvorfor vil du bruge en?
Afslut afsnittet Flere typer.
Spørgsmål 10. Kan Go bruges som et funktionelt programmeringssprog, selvom det er kompileret? Hvornår og hvorfor bruger du lukninger?
Gå metoder og grænseflader
Gå gennem alle 25 lektioner i dette afsnit begyndende med //tour.golang.org/methods/1.
Spørgsmål 11. Når du er færdig, skal du forklare, hvordan Go's brug af metoder og grænseflader adskiller sig fra C ++ -klasser. Hvilket kan du lide bedre? Hvorfor?
Gå samtidig
Goroutinen er et af de definerende træk ved Go for concurrency. I den første lektion i samtidighedssektionen skal du prøve at skrive et bord på programmet (nedenfor) og skrive ned, hvad du tror, det vil udskrive.
Kør programmet. Var du korrekt? Forklar hvad der faktisk sker, og hvorfor.
Kanaler er vejen til implicit at synkronisere goroutines. I den næste lektion (nedenfor) skal du prøve at skrivebordet igen, før du kører det.
Spørgsmål 12. Hvorfor er der kun en kanal i dette eksempel, selvom der er to goroutine-opkald?
Select-sætningen lader en goroutine vente på flere kommunikationsoperationer. Hvad er rækkefølgen, som udsagn kører i programmet nedenfor?
Øvelsen på tilsvarende binære træer er en anden, du kan støde på i et tavleinterview. Time dig selv og forklar din tænkning, når du implementerer en løsning. Tilsvarende gør øvelsen med at implementere en webcrawler, som om du var i et interview.
Svar på Go-spørgsmål
Svar 1. Pakker er udpeget af pakke
erklæring for det aktuelle program og af importere
erklæring for eksterne pakker, der bruges. I dette enkle program vigtigste
er programmets egen pakke, og det importeres fmt
så den kan udskrives, og matematik
/rand
så det kan generere et tilfældigt tal.
De forskellige metoder i rand
stole på klokkeslæt for at generere tilfældige tal, men tiden er fast i gotour
miljø. Som en opfølgningsøvelse skal du finde pakken og metoden, der rapporterer klokkeslættet (tip: se her, hvis du sidder fast), og brug den til at udskrive det aktuelle tidspunkt. Kør dette flere gange i gotour
miljø, og bygg også programmet lokalt og kør det flere gange på din egen maskine.
Svar 2. Eksport i Go skal altid være stort, og sproget er store og små bogstaver. matematik.Pi
er den korrekte metode.
Svar 3. I C / C ++ variabel erklæringer følger formularen (f.eks.
int i, j, k;
), hvorimod i Go går typen efter variabelnavnet og kan udelades, så længe typen kan udledes. I C / C ++ går returtypen forud for et funktionsnavn, mens det i Go kommer efter funktionsparameterlisten og før funktionselementet. I C / C ++ er efterfølgende semikolon obligatorisk.
Svar 4. Det kaster ikke fejl, fordi Go-variabler, der ikke ellers er indstillet, initialiseres til typens nulværdi, f.eks. 0
eller falsk
. I C / C ++ markerer kompilatoren ikke-initialiserede variabler.
Svar 5.k
er et heltal, fordi det blev initialiseret til 3
.