doucha7329 2016-01-05 20:42
浏览 9
已采纳

有没有一种方法可以使频道仅接收?

This clearly works:

// cast chan string to <-chan string
func RecOnly(c chan string) <-chan string {
    return c
}

func main() {
    a := make(chan string, 123)
    b := RecOnly(a)

    a <- "one"
    a <- "two"
    //b <- "beta" // compile error because of send to receive-only channel
    fmt.Println("a", <-a, "b", <-b)
}

but is there a one-liner to do this, without declaring a new function?

  • 写回答

1条回答 默认 最新

  • dongmei5168 2016-01-05 20:45
    关注

    You can explicitly define b's type as a receive-only channel and set its value to a. You could also cast a to a receive-only channel. From the Go spec:

    A channel may be constrained only to send or only to receive by conversion or assignment.

    func main() {
        a := make(chan string, 123)
        var b <-chan string = a // or, b := (<-chan string)(a)
    
        a <- "one"
        a <- "two"
        //b <- "beta" // compile error because of send to receive-only channel
        fmt.Println("a", <-a, "b", <-b)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测