gpt4 book ai didi

go - Go 练习之旅 #1 : Concurrency and the go keyword

转载 作者:IT王子 更新时间:2023-10-29 01:26:25 25 4
gpt4 key购买 nike

我正在学习“围棋之旅”,并且一直在编辑大部分类(class)以确保我完全理解它们。我有一个问题:https://tour.golang.org/concurrency/1

package main

import (
"fmt"
"time"
)

func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}

func main() {
go say("world")
say("hello")
}

保留 main 的原样会产生 hello 和 worlds 的随机排序,因为每次程序运行时线程都以不同的顺序执行。我有两个问题:

  1. 如果我从包含 world 的行中删除 go 并将其添加到包含 hello 的行中,world 会打印 5 次而 hello 根本不会打印。这是为什么?
  2. 如果我在两行前面都添加 go,则根本不会打印任何内容。这是为什么?

我有一些使用 C++ 进行并发的经验(虽然那是很久以前的事了)和一些最近使用 Python 的经验,但我会描述我在并发方面相当新手级别的总体经验。

谢谢!

最佳答案

程序在您有机会看到结果之前终止。

您可以通过添加确保 main 不会在其他例程完成之前退出的语句来解决此问题。


来自 Go - Concurrency :

With a goroutine we return immediately to the next line and don't wait for the function to complete.

他们给出了一个代码示例:

package main

import "fmt"

func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
}
}

func main() {
go f(0)
var input string
fmt.Scanln(&input)
}

关于上面的代码:

This is why the call to the Scanln function has been included; without it the program would exit before being given the opportunity to print all the numbers.

关于go - Go 练习之旅 #1 : Concurrency and the go keyword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146761/

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