Go (programmeringsspråk)

Utvikler(e)
Google
https://golang.org og https://go.dev
Generell informasjon
Vanlige utvidelser .gå
Paradigme kompilert samtidig , imperativ , strukturert [ 1 ]​ [ 2 ]​ [ 3 ]
Dukket opp i 2009
Designet av Robert Griesemer , Rob Pike og Ken Thompson
Siste stabile versjon 1.18 [ 4 ] ​( 15. mars 2022 (7 måneder og 3 dager))
type system sterk, statisk
implementeringer gc (8g, 6g, 5g), gccgo
påvirket av C , Modula-2 , Pascal , Oberon , Limbo
Operativsystem GNU/Linux , Mac OS X , Windows , andre [ 5 ] ​[ 6 ]
Tillatelse BSD [ 7 ]​ + patentbevilgning [ 8 ] _

Go er et statisk skrevet kompilert og samtidig programmeringsspråk inspirert av C-syntaks , men med minnesikkerhet og søppelinnsamling . Den er utviklet av Google [ 9 ] og dens første designere var Robert Griesemer , Rob Pike og Ken Thompson . [ 10 ] Det er for øyeblikket tilgjengelig i binært format for Windows , GNU/Linux , FreeBSD og Mac OS X operativsystemer , og kan også installeres på disse og andre systemer gjennom kildekode. [ 11 ] ​[ 12 ]​ Go er et kompilert , samtidig , imperativt , strukturert , objektorientert programmeringsspråk for øyeblikket tilgjengelig for mange forskjellige typer Unix-lignende systemer , inkludert Linux , FreeBSD , Mac OS X og Plan 9 (siden del av kompilatoren er basert på tidligere arbeid med Inferno -operativsystemet ). Støttede arkitekturer er i386 , amd64 og ARM .

Navngitt

På dagen for Go-språkutgivelsen, Francis McCabe, utvikler av Go! (tidligere kalt Go), ba om at Googles språk ble omdøpt for å unngå forvirring med språket. [ 13 ] McCabe opprettet Go! i år 2003; men han har ennå ikke registrert navnet. [ 14 ] Go er et nytt programmeringsspråk for systemer utgitt av Google i november 2009. Selv om det begynte å bli utviklet i september 2007 av Robert Griesemer, Rob Pike og Ken Thompson.

Funksjoner

Unntak

Go bruker ikke unntak . [ 21 ] Språkets skapere har gitt ulike grunner til at dette er tilfelle. Den viktigste er at å legge til et unntakslag gir unødvendig kompleksitet til språket og kjøretidsmiljøet. Per definisjon bør unntak være eksepsjonelle, men til slutt ender de opp med å bli brukt som applikasjonsflytkontrollere og har ikke lenger som formål å være eksepsjonelle. I følge skaperne må unntakene være virkelig eksepsjonelle, og bruken som for det meste gis dem rettferdiggjør ikke deres eksistens.

Dessuten resulterer det i flyter med ikke-opplagte hopp. For eksempel, et ubehandlet unntak i en funksjon, som var forventet å mislykkes, fører utførelse til den første fangsten som påtreffes. Det kan gjøre feilsøking vanskelig.

Andre moderne språk som Rust har også unnlatt unntak av samme grunner.

Hovedforskjeller fra C

Selv om syntaksen er lik, skiller Go seg mye fra C. Se noen eksempler.

Omvendt uttalelser

I Go gjøres erklæringene baklengs fra perspektivet til C (eller C++ eller Java). Hovedideen i C er at en variabel er deklarert som et uttrykk som angir typen. Ifølge skaperne, selv om ideen bak C-type-deklarasjoner er god, blander ikke typer og grammatikkuttrykk seg godt, og resultatet kan være forvirrende. Go skiller imidlertid uttrykket og typesyntaksen, noe som gjør ting enklere.

Parenteser

I C er det nødvendig å bruke parenteser når du evaluerer uttrykk i kontrollstrukturer (for eksempel i if-then-else og for-next- strukturer ). I Go anses det som ikke-idiomatisk å bruke parenteser i kontrollstrukturer.

Semikolon

I Go er bruken av semikolontegnet ";" på slutten av en setning valgfri.

Pekeraritmetikk

Go har ingen peker-aritmetikk. Ifølge skaperne er årsaken sikkerhet. Uten pekereritmetikk er det mulig å lage et språk der du ikke kan få en ulovlig adresse til å bli misbrukt. Mangelen på peker-aritmetikk forenkler implementeringen av søppelsamleren. Dessuten, ved å optimalisere kompilatoren og med gjeldende maskinvare, kan en sløyfe som bruker indeksene til en matrise være like effektiv som en sløyfe som bruker pekeraritmetikk.

++ og --

I Go er bruken av ++ og -- for å øke og redusere verdien av en variabel en setning og ikke et uttrykk. I tillegg kan den bare brukes i sin postfix-versjon fordi, ifølge forfatterne, mister prefiksversjonen all sin mening i fravær av peker-aritmetikk.

Objektorientert programmering

For noen forfattere er ikke arv eller klasser essensielle konsepter for OOP-paradigmet , men snarere et middel for implementering. Det har vært objektorienterte språk i lang tid som ikke støtter klasser, men er basert på prototyper, som Javascript eller Self . I følge uttalelser fra Alan Kay , skaperen av Smalltalk , er essensen av paradigmet budskap som passerer . [ 22 ]

Go har typer og metoder , og åpner for en objektorientert programmeringsstil som erstatter bruken av klasser med strukturer som støtter bygging av hierarkier, det vil si at den ikke støtter arv og favoriserer komposisjonsmønsteret i stedet . I Go er konseptet "grensesnitt" likt det som brukes i Java : ethvert objekt ( verdi ) som tilfredsstiller kontrakten spesifisert av et grensesnitt (uten behov for en eksplisitt erklæring) får den typen. Det finnes også måter å bygge inn strukturer i andre strukturer for å få noe som ligner på underklasser . Go - metoder er mer generelle enn C++- eller Java-metoder, og er inkludert i strukturer ved å deklarere funksjoner knyttet til dem. De kan defineres for alle typer data; ikke bare for poster . På den annen side er Go-grensesnitt, i motsetning til språk som Java, implisitt skrevet, det vil si at grensesnittet anses å ha blitt implementert når en struktur implementerer metodene selv når dette ikke er spesifisert.

Eksempler

Det klassiske Hello World- programmet i Go ligner på hvordan det ville blitt gjort i C++. Med dette typiske eksemplet kan vi se at når det gjelder syntaks, er de veldig like:

hovedpakke _ importer "fmt" func main () { fmt . Println ( "Hei, verden." ) }

Kommentarnotasjonen er nøyaktig den samme som i C++

/* ... ... ... */ // ...

Et program for en webapplikasjon.

importere ( "fmt" "Logg" "net/http" ) func helloFunc ( w http . ResponseWriter , r * http . Request ) { fmt . Fprintf ( w , "Hei verden!" ) } func main () { http . HandleFunc ( "/" , helloFunc ) logg . Fatal ( http .ListenAndServe ( " :8080" , null )) }

Referanser

  1. ^ "Førsteklasses funksjoner i farten" . Hentet 14. november 2018 . «Go støtter ... en funksjonell programmeringsstil i et sterkt maskinskrevet språk. » 
  2. ^ "Er Go et objektorientert språk?" . Hentet 13. april 2019 . Selv om Go har typer og metoder og tillater en objektorientert programmeringsstil, er det ikke noe typehierarki. » 
  3. ^ "Go: kode som vokser med ynde" . Hentet 24. juni 2018 . «Go er objektorientert, men ikke på vanlig måte. » 
  4. https://go.dev/doc/devel/release
  5. ^ "lang/go: go-1.4 – Go programmeringsspråk" . OpenBSDports . 23. desember 2014 . Hentet 19. januar 2015 . 
  6. ^ "Go Porting-innsats" . Gå til språkressurser . katt-v. 12. januar 2010 . Hentet 18. januar 2010 . 
  7. ^ "Tekstfillisens" . Go-programmeringsspråket . Hentet 5. oktober 2012 . 
  8. ^ "Ytterligere tildeling av IP-rettigheter" . Go-programmeringsspråket . Hentet 5. oktober 2012 . 
  9. Kincaid, Jason (10. november 2009). "Google's Go: Et nytt programmeringsspråk som er Python møter C++" . TechCrunch . Hentet 18. januar 2010 . 
  10. ^ "Språkdesign vanlige spørsmål" . golang.org . 16. januar 2010 . Hentet 27. februar 2010 . 
  11. Installasjonsveiledning (engelsk)
  12. Installasjonsveiledning (spansk)
  13. ^ Francis McCabe (10. november 2009). "Jeg har allerede brukt navnet på *MY* programmeringsspråk " . Hentet 13. november 2009 . 
  14. Thomas Claburn (11. november 2009). Informasjonsuka, red. "Google 'Go'-navn bringer anklager om 'ondskap ' " (på engelsk) . Hentet 13. november 2009 . 
  15. ^ "Programmeringsspråket Go" . golang.org . Hentet 4. desember 2020 . 
  16. ^ Metz, Cade (5. mai 2011). "Google Go går frimodig dit ingen kode har gått før" . Registeret . 
  17. ^ "Dokumentasjon - Go-programmeringsspråket" . golang.org . Hentet 4. desember 2020 . 
  18. Ryer, Matt (3. juni 2016). Duck skriver i Go . Medium (på engelsk) . Hentet 4. desember 2020 . 
  19. "Er Go Duck-type?" . Bionic | FullStory . 4. mars 2020 . Hentet 4. desember 2020 . 
  20. Gå etter Eksempel: Strukturer
  21. ^ "Feilhåndtering og Go - Go-bloggen" . blog.golang.org . Hentet 4. desember 2020 . 
  22. Alan Kay (10. oktober 1998). "prototyper vs klasser var: Re: Sun's HotSpot" . Squeak e - postliste . squeakfoundation.org . Hentet 21. november 2015 . 

Eksterne lenker