猿问

难道不能保证所有语句都在一个 goroutine 中执行吗?

当我运行以下代码时没有错误,但也没有打印任何内容:


package main


import "fmt"


func fibonacci(c, quit chan int) {

    x, y := 0, 1

    counter := 0

    for {

        

        select {

        case c <- x:

            fmt.Println("sent x", x)

            x, y = y, x+y

        case <-quit:

            fmt.Println("quit")

            return

        }

        

        counter += 1

        fmt.Println("Counter", (counter));

        

    }

    

    fmt.Println("Fib exiting");

}


func main() {

    c := make(chan int)

    quit := make(chan int)

    go func() {

        for i := 0; i < 10; i++ {

            fmt.Println("got" , <-c)

        }

        quit <- 0

        fmt.Println("Anon exiting");

    }()

    go fibonacci(c, quit)

}

我在想至少应该打印出来。如果我在主歌唱中正常执行,它就会起作用。"Fib exiting"fibonacci()


提前致谢...


明月笑刀无情
浏览 71回答 1
1回答

qq_笑_17

难道不能保证所有语句都在一个 goroutine 中执行吗?应根据程序控制流执行的所有语句都将执行。您的打印调用不会执行,因为在生成两个 goroutine 后立即返回。fmt.Println("Fib exiting")main()然而,即使正确同步,仍然是无法访问的代码,因为中的语句要么发送 on 要么接收 on ,并且这两种情况都没有脱离循环。main()fmt.Println("Fib exiting")selectfibonacci()cquit
随时随地看视频慕课网APP

相关分类

Go
我要回答