Kasutaja:ManTotters/Go (programmeerimiskeel)

Go, tuntud ka kui Golang[1], on staatilise tüübisüsteemiga kompileeritav programmeerimiskeel, mis on disainitud Google'is[2] Robert Griesemeri, Rob Pike ja Ken Thompsoni poolt[3]. Go on süntaktiliselt sarnane C keelele, kuid sisaldab endas ka mälu turvalisust, prügikogumist, strukturaalset tüübisüsteemi ning konkurrentsust.

Ajalugu muuda

Go arendamine algas Google'is aastal 2007, eesmärgiga tõsta programmeerimise effektiivsust mitmetuumaliste, võrgustatud arvutite ja suurte koodibaaside ajastul.[4] Keele välja arendajad soovisid adresseerida kriitikat teiste Google'is kasutatud programmeerimiskeelte kohta, kuid jätta alles nende kasulikud omadused.[5]

  • Staatiline tüübisüsteem ja käitusaegne efektiivsus (nagu C++)
  • Loetavus ja kasutatavus (nagu Python või JavaScript)[6]
  • Suure jõudlusega võrgu ühenduvus ning mitmetuumalisuse toetamine

Disainerid olid peamiselt motiveeritud nende ühisest vastumeelsusest C++ keelele.[7]

Go kuulutati avalikult väja novembris aastal 2009, ning versioon 1.0 avaldati 2012 aasta märtsis. Go'd kasutatakse laialdaselt Google'is endas[8], ning paljudes teistes organisatsioonides ja vabavaralistes projektides.

2018 aasta augustis avaldasid Go arendamisse peamised panustajad kaks disainimustandit keele uute featuuride kohta, milleks olid üldised algoritmid (ing Generics) ja veakäsitlus (ing error handling). Nimetatud featuurid olid tõstatanud laialdast kriitikat eelnevate, Go 1.x versioonide ümber.[9]

Disain muuda

Go on tugevate C keele mõjutustega, kuid suurema rõhuasetusega lihtusele ja tuvalisusele.

Süntaks muuda

Go süntaks sisaldab muudatusi C keelele eesmärgiga hoida kood sisutihe ja loetav. Go sisaldab endas kombineeritud deklaratisooni ja initsialiseerimise operaatorit, mis lubab programmeerijal kirjutada i := 3 või s:= "Hello, world!", seejuures mitte spetsifitseerides kasutatud muutujate tüüpe. See vastanub C keele int i = 3; ja const char *s = "Hello, world!"; vastetele. Semikooloneid kasutatakse endiselt lausete lõpetamiseks, kuid rea lõpus asudes on semikoolonid implitsiitsed. Funktsioonid võivad tagastada mitu väärtust, ning väärtuste paari result, err tagastamine on levinud viis, kuidas funktsioon osutab vea olemasolust väljakutsujale.

Tüübid muuda

Go's on hulk sisseehitatud tüüpe, nagu näiteks numbrilised tüübid (byte, int64, float32 jne), tõeväärtused ja sõned. Sõned on muudetamatud, nende liitmiseks, võrdlemiseks ja utf-8 (de-)kodeerimiseks kasutatakse sisseehitatud operaatoreid ja võtmesõnu, mitte funktsioone. Andmiktüüpe (ing record types) on võimalik defineerida struct võtmesõna abil.

Iga tüübi T ja iga mittenegatiivse konstandi n jaoks esisteerib massiivtüüp tähistusega [n]T, ehk erinevate pikkustega massiivid on erinevad tüübid. Dünaamilised massiivid on kasutatavad lõikudena, mida tähistatakse [ ]T. Dünaamilisel massivil on pikkus ja mahutavus, mis tähistab, millal tuleks mälu juurde eraldada massivi laiendamiseks.

Viidad on saadaval igale tüübile, viita tüübile T tähistatakse *T; aadressi võtmse operaatoriks on &.

Tüüpide paari K ja V jaoks eksisteerib tüüp map[K]V , mis käitub paisktabelina, vastendades K-tüüpi võtmed V-tüüpi väärtustele.

Funktsioonitüüpe tähistab func võtmesõma; funkstioonid võtavad parameetriteks sisendiks null või rohkem parameetrit ning tagastavad null või rohkem väärtust, kusjuures kõikidel väärtustel on tüüp. Fuktsiooni tüübi määravad parameetrite ja tagastatavate väärtuste tüübid.

Igal nimelisel tüübil on sellega seotud meetodihulk.

Paketisüsteem muuda

Go paketisüsteemil on igal paketil sellega seotud tee (nt compress/bzip2 või golang.org/x/net/html) ning nimi (nt bzip2 või html)

Näited muuda

Hello world muuda

package main

import "fmt"

func main() {
    fmt.Println("Tere, maailm!")
}

kus fmt on Go standardpakett vormindatud I/O jaoks.

Viited muuda

  1. "Frequently Asked Questions (FAQ)".
  2. Jason, Kincaid (10. november 2009). "Google's Go: A New Programming Language That's Python Meets C++". TechCrunch.
  3. "Language Design FAQ".
  4. "Go at Google: Language Design in the Service of Software Engineering".
  5. Pike, Rob (28. aprill 2010). "Another Go at Language Design". Stanford EE Computer Systems Colloquium. Stanford University.
  6. "Frequently Asked Questions (FAQ) - The Go Programming Language". golang.org.
  7. Binstock, Andrew. "Dr. Dobb's: Interview with Ken Thompson".
  8. "Go FAQ: Is Google using Go internally?".
  9. "The Go Blog: Go 2 Draft Designs".