go - 短格式 goroutine 返回值
问题描述
我已经使用 Go 有一段时间了。我想知道是否有任何简短的代码可以从 goroutine 获取返回值。
x := 3
ch := make(chan int)
go func(xIn int) (xOut int) {
xOut = x + 1
ch <- xOut
return xOut
}(x)
nextX := <-ch
fmt.Println(x, nextX)
建议的短格式:
x := 3
nextX := go func(xIn int) (xOut int) {
xOut = x + 1
return xOut
}(x)
fmt.Println(x, nextX)
重点:
问题不在于如何去做,而在于为什么 go-compiler 没有提供这样的功能。
解决方案
让我们假设存在一些f()
具有某种返回类型的函数T
。
您希望捕获 的返回值f()
。显然,我们可以这样做:
x := f()
如果:
x := go f()
等待某个值分配给f()
,这两个调用之间有什么区别?return
x
(如果:
x := go f()
不等待f()
一个return
值,当您尝试访问变量时会发生什么x
?)
如果你想写:
x := 3
nextX := func(xIn int) (xOut int) {
xOut = x + 1
return xOut
}(x)
fmt.Println(x, nextX)
你可以在今天存在的 Go 中这样做。(在Go Playground上尝试一下。另外,我怀疑您希望内部函数使用它的xIn
变量,而不是闭包捕获的x
变量,但两种方式的效果都是一样的。)
推荐阅读
- python - Pandas pivot_table 和额外的索引级别
- javascript - 布尔和条件语句如何在事件侦听器中执行?
- python - 无法理解 Python 负字符串切片
- tsql - oracle rownum 转移到 t-sql row_number() 错误
- python - 在 python 上获取 ConnectionError: ('Connection aborted.', BadStatusLine('No status line received - 服务器已关闭连接',))
- php - 如何使用 adldap php 从活动目录中获取所有用户显示名记录?
- sql - SQL 错误:ORA-02000:缺少 ALWAYS 关键字
- haskell - Persistent 中不区分大小写的唯一性约束?
- java - 打印多维数组元素时出错 (Java)
- sql - SQL 分组依据和计算