Programmeren in Go/Select

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in Go 100 percent.svg

Commentaar
Pakketten
Variabelen en constanten
Assignments
For
Switch
Functies
Defer
Arrays
Slices
Methodes
Types
Goroutines
Channels
Select

Select is een statement dat op een vergelijkbare manier als switch gebruikt kan worden maar alleen voor communicatie van channels wordt gebruikt.

package main

import "rand"
import "fmt"
import "time"

type Koe struct {
    n int // Koeiennummer
    gras int // De koe eet soms gras en soms niet.
}

func GrazendeKoe(n int, chan1 chan *Koe, chan2 chan *Koe) {
    koe := &Koe{n, 0}
    r := rand.New(rand.NewSource(time.Nanoseconds())) // Nanoseconds is een seed
    var j int
    for {
        j = r.Intn(2) // Waarde tussen 0 en 1
        koe.gras = j
        if j==0 {
            chan1 <- koe
        } else {
            chan2 <- koe
        }
        time.Sleep(1000000000)
    }
}
    
func main() {
    var k *Koe
    chan1 := make(chan *Koe) // Koe loeit naar boer 1
    chan2 := make(chan *Koe) // Koe loeit naar boer 2
    go GrazendeKoe(1, chan1, chan2)
    go GrazendeKoe(2, chan1, chan2)
    for {
        select {
            case k = <- chan1: // Als we een signaal van chan1 krijgen
                fmt.Printf("Koe %d, Boer 1, Gras: %d \n", k.n, k.gras)
            case k = <- chan2: // Waarde niet opslaan kan door laag streepje
                fmt.Printf("Koe %d, Boer 2, Gras: %d \n", k.n, k.gras)
        }
    }
}
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.