• Go 只读/只写channel


    Go中channel可以是只读、只写、同时可读写的。

    //定义只读的channel

    read_only := make (<-chan int)

    //定义只写的channel

    write_only := make (chan<- int)

    //可同时读写

    read_write := make (chan int)

    定义只读和只写的channel意义不大,一般用于在参数传递中,见代码:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        c := make(chan int)
        go send(c)
        go recv(c)
        time.Sleep(3 * time.Second)
    }
    //只能向chan里写数据
    func send(c chan<- int) {
        for i := 0; i < 10; i++ {
            c <- i
        }
    }
    //只能取channel中的数据
    func recv(c <-chan int) {
        for i := range c {
            fmt.Println(i)
        }
    }

    如果将上面send方法和recv方法中的参数对调:

    func send(c <-chanint) {

    func recv(c chan<- int) {

    编译就会报错:

    ./channel.go:18: invalid operation: c <- i (send to receive-only type <-chan int)

    ./channel.go:24: invalid operation: range c (receive from send-only type chan<- int)

  • 相关阅读:
    Codeforces 46D Parking Lot
    矩阵快速幂
    Codeforces 295A Greg and Array
    hihocoder 1154 Spring Outing
    51NOD 1400 序列分解
    最短路之Dijkstra算法
    连通性1 求无向图的low值
    用数组实现临接表
    hihocoder 1181 欧拉路.二
    TCP多线程聊天室
  • 原文地址:https://www.cnblogs.com/baiyuxiong/p/4545028.html
Copyright © 2020-2023  润新知