gpt4 book ai didi

go - 在golang中将chan转换为non chan

转载 作者:IT王子 更新时间:2023-10-29 00:59:17 29 4
gpt4 key购买 nike

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

func funcWithNonChanResult() int {

如果我想让它在接口(interface)中使用函数 funcWithChanResult:

func funcWithChanResult() chan int {

换句话说,我能否以某种方式将 chan int 转换为 int?或者我必须在所有使用 funcWithChanResult 的函数中有 chan 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())
}

Playground

最佳答案

一个 chan int 是一个 int 值的 channel ,它不是一个单一的 int 值,而是一个 int 值(或者也是目标,但在您的情况下,您将其用作源)。

因此您不能将 chan int 转换为 int。你可以做什么,可能你的意思是使用从 chan int 接收的值(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 上尝试您修改后的工作示例.

关于go - 在golang中将chan转换为non chan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860644/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com