为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的“go”关键字

Go 中的“go”关键字

Go
桃花长相依 2021-11-08 18:47:38
以下是“A Tour of Go” Range 和 Close 中的代码示例:package mainimport (    "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), c)    for i := range c {        fmt.Println(i)    }}在从底部算起的第五行,当go关键字被省略时,结果没有改变。这是否意味着主 goroutine 在缓冲通道中发送值,然后将它们取出?
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

你可以这样想:


使用go关键字,该fibonacci函数将数字添加到通道中,并且一旦将for i := range c每个数字添加到通道中,循环就会将其打印出来。


如果没有go关键字,该fibonacci函数被调用时,添加了所有的号码的通道,然后返回,并随后将for循环输出数字关闭channel。


看到这一点的一种好方法是进入睡眠状态(操场链接):


package main


import (

    "fmt"

    "time"

)


func fibonacci(n int, c chan int) {

    x, y := 0, 1

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

        time.Sleep(time.Second) // ADDED THIS SLEEP

        c <- x

        x, y = y, x+y

    }

    close(c)

}


func main() {

    c := make(chan int, 10)

    go fibonacci(cap(c), c) // TOGGLE BETWEEN THIS

    // fibonacci(cap(c), c) // AND THIS

    for i := range c {

        fmt.Println(i)

    }

}


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信