Vediamo un esempio concreto di come funziona il goroutine!
Questo esempio è stato presentato in google IO 2013 ma spiega molto bene il funzionamento delle goroutine con una facilità disarmante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package main //Includo le librerie import ( "fmt" "time" ) func main() { //Creo un canale ball := make(chan int) //Lanciamo 2 Goroutine che eseguono indipendentemente la funzione player() go player("Ann", ball) go player("Bob", ball) //Qui comincia il Match ball <- 1 //Aspetto 10 secondi time.Sleep(10 * time.Second) //Fermo il match <-ball } func player(name string, ball chan int) { for { //Valore ball(valore int del canale) touch := <- ball //Stampo chi il nome di chi la mandato e il suo relativo valore fmt.Printf("Player %s: %d\n", name, touch) //Incremento il valore di 1 touch++ ball <- touch //Aspetto 100 millisecondi time.Sleep(100 * time.Millisecond) } } |
Ipotizzando che le istruzioni vengano eseguite in un tempo zero succede che Ann e Bob giocano una partita a ping pong sul canale ball finchè non sono finiti i secondi.
Come sempre vi rimando sulla documentazione officiale al relativo link