为什么在主 Goroutine 中对 input.Text() 求值?
在 Go 中,传递给与该函数同时调用的函数的参数go 关键字立即被评估。这与常规函数调用不同,常规函数调用在函数实际执行时进行参数求值。对于 echoServer,参数 input.Text() 在执行 go 语句时在主 goroutine 中求值。
立即求值的原因
goroutine 中函数参数的立即求值确保了如下:
示例插图
考虑以下内容例如:
package main import ( "fmt" "time" ) func main() { i := 1 go func(i int) { fmt.Println(i) // => 1 i++ }(i) i++ }
如果在 go 语句执行期间发生 input.Text() 求值,则由于立即求值,i 的值将为 2。但是,如果在 goroutine 执行期间对其求值,则变量 i 将会增加并打印 3。
结论
goroutine 中函数参数的立即求值是 Go 并发模型的一个重要方面。它保证了并发程序的正确性、效率和确定性。
以上是为什么在 Go 例程开始之前对 input.Text() 进行求值?的详细内容。更多信息请关注PHP中文网其他相关文章!