drvvepadi289421028 2015-06-16 06:51
浏览 198
已采纳

在golang中将chan转换为non chan

Is it possible to let function funcWithNonChanResult have the following interface:

func funcWithNonChanResult() int {

And if I want it to use function funcWithChanResult with the interface:

func funcWithChanResult() chan int {

In other words, can I somehow convert chan int to int? Or I must have chan int result type in all the functions which use funcWithChanResult?

Currently, I tried these methods:

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)

Full code:

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

  • 写回答

1条回答 默认 最新

  • duanan1946 2015-06-16 07:15
    关注

    A chan int is a channel of int values, it is not a single int value but a source of int values (or also a target, but in your case you use it as source).

    So therefore you can't convert chan int to int. What you can do and probably what you mean is use a value (of type int) received from a chan int as an int value.

    This is not a problem:

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

    Or more compact:

    result := <- funcWithChanResult()
    

    Combine this with the return statement:

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

    Output (as expected):

    Received first int: 123
    Received second int: 123
    

    Try your modified, working example on the Go Playground.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)