Go (programmeerimiskeel)
See artikkel vajab toimetamist. (Jaanuar 2024) |
Go on staatilise tüübisüsteemiga kompileeritav programmeerimiskeel.[1]
Süntaktiliselt sarnaneb Go keelele C, kuid omab veel lisaks mälu turvalisust, prügikogumist, struktuurset tüübisüsteemi ning konkurrentsust. Tegu on avatud lähtekoodiga projektiga.[1]
Keele töötasid välja Robert Griesemer, Rob Pike ja Ken Thompson Google'ist.
Go kutsutakse sageli mitteametlikult ka Golangiks, sest algselt oli Go veebilehe domeeninimi golang.org.[2]
Ajalugu
[muuda | muuda lähteteksti]Go keele töötasid välja Google'i arendajad puutudes kokku mitmete probleemidega Google toodete arendamisel. Tänapäeva tarkvaraarendus erineb oluliselt aastakümnetetagusest ajast, mil mitmed tänapäeval levinuimad keeled nagu C++, Java ja Python loodi. Eelkõige kerkisid probleemid üles mitmetuumaliste, võrgupõhiste masinate, suurte koodibaaside ja veebiarenduse tulekuga. Go keel loodi, et teha uutes tingimustes tarkvaraarendus efektiivsemaks ja mugavamaks.[1]
Go loomisel püüti säilitada mitmed n-ö vanade keelte kasulikud küljed:
- Static typing ja käitusaegne efektiivsus (nagu keeles C).
- Kerge loetavus ja kasutatavus (nagu keeltes Python või JavaScript).
- Suuremahulise veebiühenduvuse ning mitmetuumalisuse toetamine.
Keel Go avalikustati 2009. aasta novembris[3] ning versioon 1.0 ilmus 2012. aasta märtsis.[4]
Disain
[muuda | muuda lähteteksti]Go on kõige rohkem mõjutatud keelest C, kuid tema loomisel on oluliselt rohkem rõhku pandud lihtsusele ja mugavale kasutamisele.
Näiteks:
- Dünaamilistele keeltele omaste joontega süntaks:[5]
- Automaatne muutuja tüübi tuvastus, näiteks
int x = 0;
võivar x = 0;
asemel on kasutuselx:= 0
. - Kiire kompileerimine
- Kaugpaketi haldamine ja veebipõhine paketi dokumentatsioon
- Automaatne muutuja tüübi tuvastus, näiteks
- Ainuomane lähenemine mõningatele probleemidele:
- Sisseehitatud funktsioon, mis võimaldab mitut paralleelset protsessi korraga: väiksema jõudlusega protsessid (goroutines), kanalid, ning
select
lause. - Soov hoida keel piisavalt lihtsana, et programmeerija suudaks asju peast teha, kasutades teistest keeltest tuttavaid tunnusjooni.
- Sisseehitatud funktsioon, mis võimaldab mitut paralleelset protsessi korraga: väiksema jõudlusega protsessid (goroutines), kanalid, ning
Süntaks[6]
[muuda | muuda lähteteksti]Go süntaks on koostatud keele C süntaksi baasil pidades silmas, et kood oleks ülevaatlik ja loetav. Võeti kasutusele kombineeritud deklaratsiooni alguse operaator, mis võimaldab programmeerijal muutuja deklareerimisel jätta täpsustamata muutuja tüüp. See põhimõte on erinev keelest C, kus muutuja deklareerimisel tuleb ka määrata muutuja tüüp, näiteks ujukomaarv, sõne vms. Laused eraldatakse rea lõpetamisega (vajutades enter klahvi) või semikooloniga. Semikooloni kasutamisel saab koondada mitu lauset ühele reale, mis aga ei ole halvema loetavuse tõttu soovitatav.
Go fail koosneb "Hello world" programmi näitel järgenvatest osadest:
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
- Paketi deklaratsioon:
- Iga programm on paketi osa, nt käivitatav kood kuulub alati
main
paketti.
- Iga programm on paketi osa, nt käivitatav kood kuulub alati
- Pakettidesse kuuluvate failide importimine:
import ("fmt")
impordib fmt paketti kuuluvad failid.
- Funktsioonid:
- Funktsiooni {} sulgude vaheline kood täidetakse programmi käivitamisel.
- Näiteks
fmt.Println()
on fmt paketist pärinev funktsioon andmete väljastamiseks.
Tööriistad[7]
[muuda | muuda lähteteksti]Go põhiversioon sisaldab tööriistu koodi loomiseks, testimiseks ja analüüsimiseks.
go build,
mis kompileeribimport
käskudega imporditud koodi koos sõltujatega käivitatavaks koodiksgo test
, üksuse testimiseks ja jõudluse hindmiseksgo fmt
, koodi vormindamiseksgo install
, eraldiseisvate pakettide alla laadimiseks ja installimiseksgo vet
, potentsiaalsete vigade tuvastamiseks koodisgo run
, otsetee koodi käivitamiseksgodoc
, dokumentatsiooni kuvamiseksgorename
, muutujate, funktsioonide turvaliseks ümbernimetamiseksgo mod
, uue mooduli loomiseks, sõltujate lisamiseks või muutmiseks
Tööriistad hõlmavad ka profileerimis- ja silumistoetust, töökorda seadmist (näiteks prügikoristuspauside jälgimiseks).
Lisaks on veel kolmandate osapoolte loodud tööriistu nagu gocode
, mis võimaldab autocomplete'i mitmetes koodiredaktorites, goimports
, mis automaatselt lisab ja eemaldab pakette, ning errcheck
, mis tuvastab koodi, mis ignoreerib erroreid.
Go kasutajaid
[muuda | muuda lähteteksti]Go on laialdaselt kasutusel tarkvaraarenduses Google'is[8] ja paljudes teistes ettevõtetes ning avatud lähtekoodiga projektides, nagu näiteks:
- Cloudflare oma proxy Railgun, DNS teenuse, krüptograafia, logimise, andmevoo töötlemise tööriistade jaoks;[9]
- Dropbox, kes võttis mõnes oma olulises komponendis kasutusele Pythoni asemel Go;[10]
- Ethereum oma krüptoraha plokiahelas;[11]
- GitLab, veebipõhises DevOpsi elutsükli tööriistas, mis pakub Git-hoidlat, vikit, probleemide jälgimist, pidevat integreerimist; [12]
- Google oma paljudes teenustes, muuhulgas otsingumootoris, veebibrauseris Chrome, andmehalduses; [13]
- Netflix oma serveriarhitektuuris; [14]
- SoundCloud.[15]
Kriitika
[muuda | muuda lähteteksti]Go negatiivsete külgedena on toodud välja järgmist.
- Go null pointer ning algebraliste muutujatüüpide vähesus põhjustab tõrkeid ja rekursiooni.[16]
- Go ei luba avamissulu paiknemist omaette real, mis pakub arendajatele vähem paindlikkust. [17]
- Faili semantika Go standardses teegis põhineb suuresti POSIX-i semantikal ja ei sobi hästi Windowsi platvormile. Kuigi probleem ei ole Go jaoks ainuomane, on siiski teised programmeerimiskeeled selle probleemi lahendanud hästi määratletud standardsete teekide abil. [18]
Viited
[muuda | muuda lähteteksti]- ↑ 1,0 1,1 1,2 "Go at Google: Language Design in the Service of Software Engineering". Vaadatud 23.10.2022.
- ↑ "Is the language called Go or Golang?". Vaadatud 23.10.2022.
- ↑ "Hey! Ho! Let's Go!".
- ↑ "Release History". Vaadatud 23.10.2022.
- ↑ "The Go Programming Language".
- ↑ "Go syntax". Vaadatud 23.10.2022.
- ↑ "Go Tools".
- ↑ "Is Google using Go internally?". Vaadatud 23.10.2022.
- ↑ Graham-Cumming, John (07.03.2012). "Go at CloudFlare". Vaadatud 23.10.2022.
- ↑ Lee Patrick (07.07.2014). "Open Sourcing Our Go libraries". Vaadatud 23.10.2022.
- ↑ "Official Go implementation of the Ethereum protocol". GitHub. Vaadatud 23.10.2022.
- ↑ "Why we use Ruby on Rails to build GitLab". Gitlab. Vaadatud 23.10.2022.
- ↑ "Using Go at Google". 27.08.2020. Vaadatud 23.10.2022.
- ↑ "The Netflix Tech Blog: Application data caching using SSDs". Vaadatud 23.10.2022.
- ↑ Bourgon, Peter. "Go at SoundCloud". Originaali arhiivikoopia seisuga 11. november 2013. Vaadatud 27. jaanuaril 2023.
- ↑ Yager, Will. "Why Go Is Not Good". Vaadatud 23.10.2022.
- ↑ "Why are there braces but no semicolons? And why can't I put the opening brace on the next line?".
- ↑ "I want off Mr. Golang's Wild Ride".