在golang中将chan转换为non chan
是否可以让函数funcWithNonChanResult
具有以下接口:
func funcWithNonChanResult() int {
如果我希望它funcWithChanResult
在接口中使用function :
func funcWithChanResult() chan int {
换句话说,我可以以某种方式转换chan int
为int
吗?或者我必须chan
int在使用的所有函数中都具有结果类型funcWithChanResult
?
目前,我尝试了以下方法:
result = funcWithChanResult() // cannot use funcWithChanResult() (type chan int) as type int in assignment
result <- funcWithChanResult()
// invalid operation: result <- funcWithChanResult() (send to non-chan type int)
完整代码:
package mainimport (
"fmt"
"time"
)
func getIntSlowly() int {
time.Sleep(time.Millisecond * 500)
return 123
}
func funcWithChanResult() chan int {
chanint := make(chan int)
go func() {
chanint <- getIntSlowly()
}()
return chanint
}
func funcWithNonChanResult() int {
var result int
result = funcWithChanResult()
// result <- funcWithChanResult()
return result
}
func main() {
fmt.Println("Received first int:", <-funcWithChanResult())
fmt.Println("Received second int:", funcWithNonChanResult())
}
操场
回答:
A chan int
是int
值的通道,它不是单个int
值,而是值的来源int
(或目标),但在您的情况下,您将其用作来源。
因此,您不能转换chan int
为int
。您可以做的并且可能是您的意思是使用int
从a接收的值(类型)chan int
作为int
值。
这不是问题:
var result intch := funcWithChanResult()
result = <- ch
或更紧凑:
result := <- funcWithChanResult()
结合以下return
语句:
func funcWithNonChanResult() int { return <-funcWithChanResult()
}
输出(预期):
Received first int: 123Received second int: 123
在Go Playground上尝试修改后的工作示例。
以上是 在golang中将chan转换为non chan 的全部内容, 来源链接: utcz.com/qa/417773.html