在golang中将chan转换为非chan

时间:2015-06-16 06:51:27

标签: go type-conversion channel

是否可以让函数- (NSNumber *)myMethod { double amount = 42; [NSNumber numberWithDouble:amount] return [NSDecimalNumber numberWithDouble:amount]; } 具有以下接口:

funcWithNonChanResult

如果我希望它使用带有接口的函数func funcWithNonChanResult() int {

funcWithChanResult

换句话说,我可以某种方式将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)

Playground

1 个答案:

答案 0 :(得分:5)

chan int是一个int值的渠道,它不是一个int值,而是int值的来源(或者也是一个目标,但在您的你使用它作为来源的情况。)

因此,您无法将chan int转换为int。你可以做什么,可能你的意思是使用从int收到的值chan int作为int值。

这不是问题:

var result int
ch := funcWithChanResult()
result = <- ch

或更紧凑:

result := <- funcWithChanResult()

将此与return语句结合使用:

func funcWithNonChanResult() int {
    return <-funcWithChanResult()
}

输出(如预期):

Received first int: 123
Received second int: 123

Go Playground上尝试修改后的工作示例。