Как на самом деле Goroutines для Channel? - PullRequest
0 голосов
/ 31 марта 2019

В 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)
    }
}

и этот код работает правильно.

...