在golang中将chan转换为non chan

是否可以让函数funcWithNonChanResult具有以下接口:

func funcWithNonChanResult() int {

如果我希望它funcWithChanResult在接口中使用function :

func funcWithChanResult() chan int {

换句话说,我可以以某种方式转换chan intint吗?或者我必须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 main

import (

"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 intint值的通道,它不是单个int值,而是值的来源int(或目标),但在您的情况下,您将其用作来源。

因此,您不能转换chan intint。您可以做的并且可能是您的意思是使用int从a接收的值(类型)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上尝试修改后的工作示例。

以上是 在golang中将chan转换为non chan 的全部内容, 来源链接: utcz.com/qa/417773.html

回到顶部