首页  >  文章  >  后端开发  >  当使用 go 创建新的 goroutine 时,为什么要在主 goroutine 中计算 input.Text() ?

当使用 go 创建新的 goroutine 时,为什么要在主 goroutine 中计算 input.Text() ?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 13:18:03832浏览

Why is `input.Text()` evaluated in the main goroutine when creating a new goroutine with `go`?

为什么在主 goroutine 中对 input.Text() 进行求值

当使用 go 关键字创建新的 goroutine 时,函数的形参和参数会同时求值go 语句是在 goroutine 实际开始运行时执行的。这意味着用作参数或自变量的任何变量或表达式都将在主 goroutine 中求值。

在提供的示例中,函数 handleConn 被作为带有 go 关键字的 goroutine 调用。该函数采用单个参数 c,它引用表示网络连接的 net.Conn 对象。在handleConn函数内部,使用c连接创建了一个bufio.Scanner,并在扫描器上重复调用Scan方法以读取连接中的输入。

在循环内,在扫描器上调用Scan方法输入扫描仪,并使用 Text 方法访问从连接读取的文本行。 input.Text() 表达式在主 Goroutine 中进行计算,文本作为 Scan 方法的结果返回给 handleConn Goroutine。

在这个特定的示例中,handleConn Goroutine 重复调用 go echo( c, input.Text(), 1*time.Second) 创建一个新的 goroutine,将输入文本回显给客户端。因为 input.Text() 是在主 goroutine 中计算的,所以 input.Text() 和 1*time.Second 的值是在执行 go 语句时确定的,而不是在 echo goroutine 开始运行时确定的。

以上是当使用 go 创建新的 goroutine 时,为什么要在主 goroutine 中计算 input.Text() ?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn