当使用 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中文网其他相关文章!