べすとえふぉーと

プログラミング等のノート 

Go 使い方メモ ゴルーチン チャネル

package main

import "fmt"

func main() {
    //make channel
    c := make(chan int)
    //send function

    go func(send chan<- int) {
        for i := 0; i < 8; i++ {
            send <- i
        }
        close(send)
    }(c)

    //receive roop
    for {
        value,ok := <-c
        if !ok {
            break
        }
        //receive
        fmt.Println(value)
    }

}
package main

import (
    "fmt"
)

func dofunc(intval int,s chan<- int) {
    for i := 0; i < 100; i++ {
        if i+1 == intval && intval % 2 == 0 {
            s <- intval
            close(s)
        }
    }
}

func main() {
    c := make(chan int)
    go dofunc(30,c)
    go dofunc(3,c)
    go dofunc(4,c)
    for {
        value,ok := <- c
        // return false when channel closed
        if value > 0 {
            fmt.Println("ret:", value)
            break
        }
        if !ok {
            break
        }
    }
}