是否可以让函数funcWithNonChanResult具有以下接口:
funcWithNonChanResult
func funcWithNonChanResult() int {
如果我希望它funcWithChanResult在接口中使用function :
funcWithChanResult
func funcWithChanResult() chan int {
换句话说,我可以以某种方式转换chan int为int吗?或者我必须chan int在使用的所有函数中都具有结果类型funcWithChanResult?
chan int
int
目前,我尝试了以下方法:
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 int是int值的通道,它不是单个int值,而是值的来源int(或目标),但在您的情况下,您将其用作来源。
因此,您不能转换chan int为int。您可以做的并且可能是您的意思是使用int从a接收的值(类型)chan int作为int值。
这不是问题:
var result int ch := funcWithChanResult() result = <- ch
或更紧凑:
result := <- funcWithChanResult()
结合以下return语句:
return
func funcWithNonChanResult() int { return <-funcWithChanResult() }
输出(预期):
Received first int: 123 Received second int: 123
在Go Playground上尝试修改后的工作示例。