Loading AI tools
programmeertaal Van Wikipedia, de vrije encyclopedie
Go is een programmeertaal die sinds 2007 ontwikkeld wordt door Google. De taal werd aangekondigd in 2009 en wordt onder andere door Google intern gebruikt.[3] De ontwikkelaars van de taal zijn Robert Griesemer, Rob Pike, en Ken Thompson. De laatste is ook een van de grondleggers van Unix.
Go | ||||
---|---|---|---|---|
Paradigma | Imperatief, functioneel[1], gedistribueerd | |||
Verschenen | 10 november 2009 | |||
Ontworpen door | Robert Griesemer, Rob Pike, Ken Thompson | |||
Huidige versie | 1.12.7[2] 8 juli 2019; 3 september 2019; 26 februari 2020; 16 juli 2020; 11 augustus 2020; 12 november 2020; 3 december 2020; 19 januari 2021; 4 februari 2021; 16 februari 2021; 10 maart 2021; 11 maart 2021; 1 april 2021; 6 mei 2021; 3 juni 2021; 12 juli 2021; 5 augustus 2021; 16 augustus 2021; 9 september 2021; 7 oktober 2021; 4 november 2021; 2 december 2021; 9 december 2021; 6 januari 2022; 10 februari 2022; 3 maart 2022; 15 maart 2022; 12 april 2022; 10 mei 2022; 1 juni 2022; 12 juli 2022; 2 augustus 2022; 6 september 2022; 4 oktober 2022; 1 november 2022; 6 december 2022 | |||
Typesysteem | Sterk | |||
Implementaties | Googles gc en gccgo | |||
Beïnvloed door | o.a. C en Oberon | |||
Besturingssysteem | DragonFly BSD, FreeBSD, Linux, macOS, NetBSD, OpenBSD, Plan 9, Solaris, Windows, iOS, Android, AIX, illumos | |||
Licentie | BSD-licentie | |||
Bestandsextensies | go | |||
Website | (en) Officiële website | |||
|
Go-code kan worden gecompileerd voor onder andere Linux, macOS, FreeBSD en Microsoft Windows en voor i386-, amd64- en ARM-processorarchitecturen.[4] Ondersteuning voor Android is toegevoegd in versie 1.4.
De taal is statisch getypeerd met een syntaxis die los op C is gebaseerd. Go bevat garbage collection, typebeveiliging, mogelijkheden voor dynamische types, een grote ingebouwde bibliotheek en extra ingebouwde typen zoals arrays met een variabele lengte en maps.
Hello world in Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
De syntaxis van Go is vergelijkbaar met die van C en soortgelijke programmeertalen, hoewel er wel enkele opvallende verschillen zijn. Bijvoorbeeld:
func main()
dus niet op de volgende regel gezet worden.Go biedt de mogelijkheid voor gedistribueerd programmeren, waarbij meerdere processen tegelijk uitgevoerd worden. Dit gebeurt door middel van goroutines (een woordspeling op coroutines) en channels.
Een goroutine is een functie die tegelijk met andere goroutines wordt uitgevoerd. Goroutines kunnen gegevens met elkaar uitwisselen via channels.
In het onderstaande voorbeeld zijn er drie processen tegelijk actief die informatie uitwisselen via een channel.
package main
import "fmt"
import "time"
import "math/rand"
func a(ch chan int, i int) {
for {
ch <- i
a := rand.Int()
if a % 2 == 0 {
time.Sleep(1)
}
}
}
func main() {
ch := make(chan int)
go a(ch,1)
go a(ch,2)
for true {
a := <- ch
fmt.Print(a)
}
}
In regel 18 wordt een nieuw channel (ch) voor integers gecreëerd. Vervolgens wordt in regel 19 functie a gestart. Het keyword go zorgt ervoor dat de functie parallel met het hoofdprogramma uitgevoerd wordt. Functie a voert een oneindige lus uit, waarbij telkens de opgegeven integer i (in dit geval 1) naar het opgegeven channel (ch) geschreven wordt (regel 9). Vervolgens wacht het proces soms 1 seconde (afhankelijk van een willekeurig getal).
Na het starten van a gaat het hoofdprogramma direct verder in plaats van te wachten tot a klaar is. In regel 20 wordt er nog een versie van a gestart, maar deze versie schrijft telkens een 2 naar het channel. Er lopen nu twee coroutines, terwijl het hoofdprogramma (main) ook gewoon doorloopt.
Het hoofdprogramma voert nu in de regels 21-24 een oneindige lus uit, waarbij telkens een integer uit channel ch wordt gehaald (als het channel leeg is pauzeert het hoofdprogramma), en op het scherm geprint wordt.
Het resultaat is dat er 3 onafhankelijke processen tegelijk actief zijn die oneindig doorlopen: de 2 processen die functie a uitvoeren schrijven telkens een 1 of een 2 naar het channel en het derde proces is het hoofdprogramma dat de inhoud van het channel print. De uitvoer kan er als volgt uitzien:
Als er geen sprake zou zijn van een parallelle uitvoering zou het programma nooit verder komen dan de eerste aanroep van functie a en zou het resultaat een oneindige reeks enen zijn.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.