Learn Golang in Days - Day 16-Go

2019-02-08  本文已影响10人  笑吧小鸟

Learn Golang in Days - Day 16-Go并发

简介


package main

import "fmt"
import "time"

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

通道channel


ch <- v //v 发送到通道ch
v := <- ch //从通道ch接收数据,并赋值给v
ch := make(chan int)
package main

import (
    "fmt"
)

// 求和
func sum(s []int, c chan int) {
    sum := 0
    fmt.Printf("0***********\n")
    fmt.Println(s)
    for _, v := range s {
        fmt.Printf("%d\t",v)
        sum += v
    }
    c <- sum
    fmt.Printf("\n1***********\n")
}

func main() {
    // 初始化切片
    s := []int{61,2123,123,55,66,7,7,8,88,9,990,4343,2342, 7, 3, 4, 5, 8}

    // 创建通道
    c := make(chan int)

    //启动两个协程
    go sum(s[:len(s)/2], c)
    go sum(s[len(s)/2:], c)

    // 从通道中接收
    x, y := <-c, <-c

    fmt.Println("\n---------------------")
    fmt.Println(x, y, x+y)
}

遍历通道与关闭通道


package main

import "fmt"
import "time"

func main() {
    c := make(chan int, 10)
    go fibonacci(cap(c), c)

    //遍历
    for i := range c {
        fmt.Println(i)
    }

}

//斐波那契数列
func fibonacci(n int, c chan int) {
    x, y := 0, 1
    for i := 0; i < n; i++ {
        fmt.Println(time.Now())
        time.Sleep(3 * time.Second)
        // x 发送给通道c
        c <- x
        x, y = y, x+y
    }
    close(c)
}
上一篇 下一篇

猜你喜欢

热点阅读