Gdg神戸go言語ハンズオンマルチスレッドで遊ぼう20120825
- 12. チャネルで同期
func say(s string, ch chan int) {
! fmt.Println(s)
! ch <- 1 / 値を送信
/
}
func main() {
! var ch chan int / チャネル変数宣言
/
! ch = make(chan int) / チャネル初期化
/
! go say("Hello golang", ch)
! <-ch / 受信待ち
/
}
- 19. 同期メカニズム
mainスレッド sayスレッド
go say("Hello golang", ch)
<-ch
ちょい待って チャネル Println()
ch ch <- 1
ほい 1 送ったで
終了 終了
- 20. チャネルで同期
func say(s string, ch chan int) {
! fmt.Println(s)
! ch <- 1 / 値を送信
/
}
func main() {
! var ch chan int / チャネル変数宣言
/
! ch = make(chan int) / チャネル初期化
/
! go say("Hello golang", ch)
! <-ch / ch から受信
/
}
- 24. package main
import "fmt"
import "strconv"
func fizzbuzz(in chan int, out chan string) {
! for { / 無限ループ
/
! ! var n int = <-in / in から受信してnに代入
/
! ! switch {
! ! case n%15 == 0:! out <- "FIZZBUZZ"
! ! case n%3 == 0:! out <- "FIZZ"
!
! ! case n%5 == 0:! out <- "BUZZ"
!
! ! default:! ! ! out <- strconv.Itoa(n)
! ! }
! }
}
- 25. func main() {
! ch := make(chan int)
! out := make(chan string)
! go fizzbuzz(ch, out)
! for i := 1; i < 100; i++ {
! ! ch <- i
! ! s := <-out
! ! fmt.Println(s)
! }
}
Editor's Notes
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n