Programmering

Gå veiledning: Kom i gang med Google Go

Hvorfor vil du bruke Go-språket? I utgangspunktet er det et kortfattet, enkelt, trygt og raskt sammensatt språk med fantastiske samtidige funksjoner, og det håndterer enkelt store prosjekter. Det er også gratis åpen kildekode, selv om den opprinnelig ble utviklet hos Google.

Ifølge Rob Pike, en av designerne av språket, var "målene med Go-prosjektet å eliminere treghet og klønethet i programvareutvikling hos Google, og derved å gjøre prosessen mer produktiv og skalerbar. Språket ble designet av og for folk som skriver - og leser og feilsøker og vedlikeholder - store programvaresystemer. "

I samsvar med disse målene mangler Go mange funksjoner på noen andre fremtredende språk - og det er faktisk en styrke. Go er ikke objektorientert, den har ikke headerfiler eller videresendedeklarasjoner, den har ikke et typehierarki, den har ikke metode eller overbelastning av operatøren, den har ikke generikk, den har ikke virtuell maskin for en kjøretid, har den ikke unntak, og den har ikke påstander.

På den annen side fungerer det som Go har ganske bra. Den kan kompilere store programmer på få sekunder. Den har koroutiner med lav overhead (kalt goroutines) som kan kommunisere effektivt gjennom kanaler. Den har grensesnitt og grensesnittkomposisjon. I tillegg støtter Go førsteklasses funksjoner, høyere ordensfunksjoner, brukerdefinerte funksjonstyper, funksjonsbokstaver, lukkinger og flere returverdier - med andre ord, den støtter en funksjonell programmeringsstil i et sterkt skrevet språk.

Hvis du er ute etter å be om noen av de manglende funksjonene jeg nevnte ovenfor, kan det være lurt å lese diskusjonen om språkendringer i Go-språket FAQ: Svaret er vanligvis "Nei, fordi ..." Generelt sett er de beste Go-programmene designet fra bunnen av for å bruke Go-språkfunksjonene, snarere enn oversatt bokstavelig fra andre språk som bruker forskjellige abstraksjoner.

Installer Go

De korte instruksjonene for installering av Go vises i kildedepotet. Du kan laste ned binære versjoner av Go for Windows, MacOS og Linux eller installere Go fra kilden. Du finner instruksjoner for å installere Go from source på GitHub.

Hvis du allerede har Go installert, bør du sjekke den nåværende build-versjonen nederst på //golang.org/ og deretter sjekke den installerte versjonen din fra kommandolinjen:

$ go-versjon

Hvis installasjonen din er utdatert, kan du laste ned og installere den gjeldende versjonen. Start alle åpne kommandoprompter (Windows) eller terminaler på nytt. Kjør om go-versjon og sørg for at versjonen er det du forventet; hvis ikke, kan det være en eldre versjon av Go installert andre steder som må fjernes.

(Nei, jeg er ikke paranoid. Jeg klarte å komme meg inn i situasjonen jeg beskrev ved å bruke Homebrew til å installere en versjon og standard MacOS-pakken for å installere neste versjon en måned eller så senere. De installeres på forskjellige steder på $ PATH. Når jeg først hadde funnet ut hva som hadde skjedd, klarte jeg å avinstallere den gamle versjonen med Homebrew.)

Et annet installasjonsalternativ, hvis du vil ha støtte og erstatning og du er i stand til å betale, er å bruke ActiveGo.

Når du har installert Go-kompilatoren og verktøyene, bør du gjennomgå øvelsen med å kompilere og kjøre et Go-program, som beskrevet i delen "Test installasjonen din" på installasjonssiden.

Sett opp Go-miljøet ditt

Go-programmerere holder vanligvis all koden sin i ett arbeidsområde, med søppel, pkg, og src mapper. Innenfor hver mappe har prosjektene vanligvis baner som er relatert til Git-arkiver, for eksempel GitHub eller GitLab. For eksempel holder jeg all Go-språkkoden min under ~ / arbeid, og sett min GOPATH miljøvariabel til $ HJEM / arbeid. Stien til "hello.go" kildekodemappen min er $ GOPATH / src / github.com / meheller / hei.

Jeg legger også til GOPATH / søppel katalog til min vei, for enkelhets skyld i å kjøre Go-programmer fra hvilken som helst katalog:

eksporter GOPATH = $ HOME / arbeid

eksporter PATH = $ PATH: $ (gå env GOPATH) / bin

Go-språkverktøyene installeres i GOPATH som standard, så å sette GOPATH / søppel katalog på banen gjør det også lettere for deg og Go-bevisste redaktører og IDEer å finne dem. Du kan installere de fleste verktøyene med $ få tak Når du vet hvilke du trenger og deres depotbaner. Lagringsplassene er vanligvis enkle å finne med et Google-søk. I noen tilfeller vil en redigeringsprogramtillegg for Go installere verktøyene (f.eks. gocode) automatisk.

Hvis du ikke setter det selv, GOPATH som standard $ HJEM / gå på Unix og MacOS og % USERPROFILE% / gang på Windows.

Gå språkverktøy, redaktører og IDEer

Flere Go-verktøy er installert som en del av pakken med kompilatoren. Andre kan installeres med gå og hent kommando. De mest brukte Go-kommandolinjeverktøyene er oppført nedenfor.

 
NavnSynopsis
Manages Go-kildekoden og kjører de andre kommandoene som er oppført her.
cgoGjør det mulig å lage Go-pakker som kaller C-kode.
dekkeEt program for å lage og analysere dekningsprofilene som genereres av gå test -coverprofile.
fastsetteFinner Go-programmer som bruker gamle funksjoner i språket og biblioteker, og omskriver dem til å bruke nyere.
fmtFormater Go-pakker. Også tilgjengelig som uavhengig gofmt kommando med mer generelle alternativer.
godocHenter ut og genererer dokumentasjon for Go-pakker.
veterinærUndersøker Go-kildekoden og rapporterer mistenkelige konstruksjoner, for eksempel Printf anrop hvis argumenter ikke stemmer overens med formatstrengen.

Den vanlige måten å ringe de fleste av disse kommandoene er som underkommandoer for , for eksempel gå fmt. Andre må ringes via gå verktøyet underkommando. På installasjonen min, gå verktøyet returnerer følgende liste over kjente verktøy:

$ go verktøy

addr2line

asm

buildid

cgo

kompilere

dekke

dist

dok

fastsette

lenke

nm

objdump

pakke

pprof

test2json

tur

spor

veterinær

Disse verktøyene er dokumentert som en del av den komplette listen over Go-kommandoer. Forresten, sørg for at din GOPATH er satt før du legger til Go-verktøy, eller Go-editor-plugin-moduler som bruker Go-verktøy.

Go-depotet har manglet noen redigerings- eller IDE-støtte siden versjon 1.4, men det er mange av begge som vet om Go, enten ute av esken eller med tilleggsmoduler. Jeg diskuterte mange av disse i en artikkel fra 2017; det er også en uoffisiell liste vedlikeholdt av Golang-samfunnet.

Mine favoritt Go språk IDEer er GoLand (vist ovenfor; omdøpt fra Gogland siden jeg skrev artikkelen i 2017) og Komodo. Begge er betalte produkter med gratis prøveversjoner.

Du vil installere Delve for Go feilsøking. På MacOS kan det hende du også trenger å legge til kommandolinjeprogrammene i Xcode, og muligens legge til en myk lenke til feilsøkingsserver, som beskrevet i 5. juni-kommentaren i Delve-utgavelisten. Løping xcode-select - installer vil også fikse problemer med å finne feilsøkingsserver, om enn på en voldsom måte.

Mine favoritt Go-bevisste redaktører med GUI er Atom og Visual Studio Code; begge er gratis. Hvis du velger Atom, bør du vurdere å legge til pluss go-plus og go-debug; Hvis du velger Visual Studio Code, bør du vurdere å legge til vscode-go.

Hvis du er en hardcore Vim- eller Emacs-bruker, så hold deg i det minste med det du vet - ikke det at jeg engang kunne lure redaktøren din fra dine kalde, døde hender. Vim-go legger til Go-språkstøtte for Vim, og go-mode legger til Go-språkstøtte for Emacs.

A Tour of Go

Du kan lære ganske mye ved å gå gjennom "A Tour of Go", enten online eller offline. Forutsatt at du fullførte den lokale installasjonen av Go-kompilatoren og verktøyene, kan du installere turen for å kjøre lokalt ved å kjøre disse to kommandoene:

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

$ gotour

Den andre linjen skal starte en webserver og åpne et nettleservindu. Dette vil se ut akkurat som online-turen, men kan kjøre litt raskere fordi den bygger og kjører kodeeksemplene på din egen maskin. Trykk på Ctrl-C i kommandovinduet for å stoppe serveren når du er ferdig.

Turen er delt inn i tre seksjoner. Jeg vil at du skal gjennom hele turen, inkludert quizene, men jeg oppsummerer hvert avsnitt nedenfor som en oversikt og stiller deg noen spørsmål. Jeg gir svarene på spørsmålene mine på slutten av artikkelen (ingen titt!).

Gå grunnleggende om språk

Go Basics Lesson 1

Spørsmål 1. I dette eksemplet er det tre pakker. Hva er de, og hvordan brukes de? Hvorfor returnerer programmet alltid det samme tallet, selv om det er et rand funksjon?

Merk at jeg ikke har ropt ut leksjon 2. Ikke hopp over leksjonene bare fordi jeg ikke har kommentert dem.

Go Basics Lesson 3

Hvis du kjører dette eksemplet, får du se feilmeldinger:

prog.go: 9: 14: kan ikke referere til ikke-eksportert navn math.pi

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

Spørsmål 2. Hvorfor feilene? Hvordan kan du fikse programmet?

Go Basics Lesson 4

Spørsmål 3. Sammenlign denne erklæringen med ekvivalenten i C. Hva er forskjellig?

Go Basics Lesson 8

Spørsmål 4. Hvorfor kaster ikke dette programmet feil?

Go Basics Lesson 10

Spørsmål 5. Hva er typen k? Hvorfor? Hvis typen ikke er åpenbar, kan du se på leksjon 11 for å finne ut hvordan du viser den.

Go Basics Lesson 12

Denne leksjonen svarer på spørsmålet jeg stilte i leksjon 8.

Gå leksjon for flytkontroll 1

Spørsmål 6. Hvordan er dette forskjellig fra til løkke på favorittspråket ditt? Tror du de andre sløyfekonstruksjonene på favorittspråket ditt er nødvendige? Ombestemmer deg tilleggsinformasjonen i de neste tre leksjonene?

Gå leksjon for flytkontroll 7

Før du kjører dette programmet, bør du sjekke det og skrive ned hva du tror det skal skrives ut. Kjør programmet. Var du riktig? Hvis ikke, hva forstod du ikke?

Gå leksjon 8 for flytkontroll

Dette er den slags øvelse du kan få i begynnelsen av et tavleintervju. Gjør deg tid når du trener det. Si hva du tenker når du jobber gjennom problemet.

Spørsmål 7. Resten av flytkontrollseksjonen er viktig å forstå. Etter å ha gått gjennom leksjon 9 til 13, forklar Go bytte om og utsette uttalelser på en måte som en C-, Java- eller JavaScript-programmerer kan grok.

Gå flere typer leksjon 1

Før du kjører dette programmet, bør du sjekke det og skrive ned hva du tror det skal skrives ut. Kjør programmet. Var du riktig? Hvis ikke, hva forstod du ikke?

Hva synes du om å gå med pekere, men ikke peke-aritmetikk?

Arbeid deg gjennom delen Flere typer til du kommer til øvelsen i leksjon 18. Spørsmål 8. Hva lærte du om Go arrays og skiver? Fullfør nå øvelsen.

Fortsett gjennom øvelsen i Leksjon 23.

Spørsmål 9. Forklar en Go kart. Hvorfor vil du bruke en?

Fullfør delen Flere typer.

Spørsmål 10. Kan Go brukes som et funksjonelt programmeringsspråk, til tross for at det er samlet? Når og hvorfor vil du bruke nedleggelser?

Gå metoder og grensesnitt

Gå gjennom alle 25 leksjonene i denne delen, og begynn med //tour.golang.org/methods/1.

Spørsmål 11. Når du er ferdig, forklar du hvordan Go bruk av metoder og grensesnitt er forskjellig fra C ++ -klasser. Hva liker du bedre? Hvorfor?

Gå samtidig

Goroutinen er en av de definerende egenskapene til Go for concurrency. I den første leksjonen i samtidighetsdelen, kan du prøve å sjekke programmet (nedenfor) og skrive ned hva du tror det vil skrive ut.

Kjør programmet. Var du riktig? Forklar hva som faktisk skjer, og hvorfor.

Kanaler er måten å implisitt synkronisere goroutines på. I neste leksjon (nedenfor), prøv å skrivebordssjekk programmet igjen før du kjører det.

Spørsmål 12. Hvorfor er det bare en kanal i dette eksemplet, selv om det er to goroutine-samtaler?

Select-setningen lar en goroutine vente på flere kommunikasjonsoperasjoner. Hva er rekkefølgen uttalelsene kjører i programmet nedenfor?

Øvelsen på tilsvarende binære trær er en annen du kan støte på i et tavleintervju. Tid deg selv og forklar tankene dine når du implementerer en løsning. Tilsvarende gjør øvelsen med å implementere en web-crawler som om du var i et intervju.

Svar på Go-spørsmål

Svar 1. Pakker er utpekt av pakke uttalelse for det gjeldende programmet, og av import uttalelse for eksterne pakker som brukes. I dette enkle programmet, hoved- er programmets egen pakke, og den importeres fmt slik at den kan skrives ut, og matte/rand slik at det kan generere et tilfeldig tall.

De forskjellige metodene i rand stole på klokketid for å generere tilfeldige tall, men tiden er fast i gotour miljø. Som en oppfølgingsøvelse, finn pakken og metoden som rapporterer tiden (hint: se her hvis du sitter fast), og bruk den til å skrive ut gjeldende tid. Kjør dette flere ganger i gotour miljø, og bygg også programmet lokalt og kjør det flere ganger på din egen maskin.

Svar 2. Eksport i Go må alltid brukes med store bokstaver, og språket er mellom store og små bokstaver. math.Pi er den riktige metoden.

Svar 3. I C / C ++ følger deklarasjonene skjemaet (f.eks. int i, j, k;), mens i Go går typen etter variabelnavnet og kan utelates så lenge typen kan utledes. I C / C ++ kommer returtypen foran et funksjonsnavn, mens det i Go kommer etter funksjonsparameterlisten og før funksjonselementet. I C / C ++ er etterfølgende semikolon obligatorisk.

Svar 4. Det kaster ikke feil fordi Go-variabler som ellers ikke er satt, initialiseres til typens nullverdi, f.eks. 0 eller falsk. I C / C ++ flagger kompilatoren ikke-initialiserte variabler.

Svar 5.k er et helt tall, fordi det ble initialisert til 3.

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