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 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?