gpt4 book ai didi

go - Go 中的 "go"关键字

转载 作者:IT王子 更新时间:2023-10-29 00:46:19 29 4
gpt4 key购买 nike

这是“Go 之旅”中的代码示例 Range and Close :

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), c)
for i := range c {
fmt.Println(i)
}
}

倒数第五行,省略go关键字时,结果没有变化。这是否意味着主 goroutine 在缓冲 channel 中发送值然后将它们取出?

最佳答案

你可以这样想:

使用 go 关键字,fibonacci 函数将数字添加到 channel 中,for i := range c 循环打印每个添加到 channel 后尽快编号。

没有go关键字,调用fibonacci函数,将所有数加到 channel 中,然后返回,then for 循环打印出 channel 的数字。

查看此内容的一个好方法是进入休眠状态 (playground link):

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

关于go - Go 中的 "go"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32794466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com