goroutine确实对Channel有什么作用?

时间:2019-03-31 13:27:21

标签: channel goroutine

Tour of Go 中,我将发送者的数量更改为大于渠道的数量。当我删除go函数前缀处的fibonacci关键字时,程序崩溃了,但是如果保留go关键字,则程序运行正常。

代码在这里:

package main

import (
    "fmt"
)

func fibonacci(n int, c chan int) {
    x, y := 0, 1
    for i := 0; i < n; i++ {
        c <- x
        x, y = y, x+y
    }
    close(c)
}

func main() {
    c := make(chan int, 10)
    fibonacci(cap(c)+10, c)
    for i := range c {
        fmt.Println(i)
    }
}

此代码崩溃:

package main

import (
    "fmt"
)

func fibonacci(n int, c chan int) {
    x, y := 0, 1
    for i := 0; i < n; i++ {
        c <- x
        x, y = y, x+y
    }
    close(c)
}

func main() {
    c := make(chan int, 10)
    go fibonacci(cap(c)+10, c)
    for i := range c {
        fmt.Println(i)
    }
}

此代码正确运行。

0 个答案:

没有答案