通常都是定义读写双向的 chan,定义单向 chan 问题。

专栏的介绍可以参考 《GotchaGolang专栏》,代码可以看《宝库-Gotcha》

通过 只写 chan 传递另一个只读的 chan,怎么写

案例

平常一般是这么声明 chan 的:

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func () {

  xChan := make(chan int)

  fmt.Println(len(xChan)); //0
}

要声明一个单向的 chan 可以使用这一的方式:大专栏  Golang: chan定义问题(7)p>

1
2
chan<- float64  // 只写 float64 类型变量 (write-only)
<-chan int // 只读 int 类型变量 (read-only)

传递 chan 变量怎么办?

1
2
3
chan<- chan int    //传递双向 chan, 同 chan<- (chan int)
chan<- <-chan int //传递只读 给只写chan, 同 chan<- (<-chan int)
<-chan <-chan int //传递只读chan 给只读chan 同 <-chan (<-chan int)

总结

定义只读,只写的类型,看上去比较诡异,可以把 <-chanchan<- 看做类型即可,同 chan 一样。


Merlin 2018.3 chan 的定义问题

Golang: chan定义问题(7)的更多相关文章

  1. golang chan 超时

    golang chan 超时 Posted on 2013-12-24 13:03 oathleo 阅读(4227) 评论(0)  编辑  收藏 package main import (    &q ...

  2. golang chan 发送接收测试数据

    测试代码: package main import (     "fmt"     "time" ) const (     num = 10000000  / ...

  3. Golang之chan/goroutine(转)

    原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referra ...

  4. 【转】Golang 关于通道 Chan 详解

    原文:http://blog.csdn.net/netdxy/article/details/54564436 在用 chan 类型时,发生死锁的错误,表面上看不出什么问题 ------------- ...

  5. golang使用chan注意事项

    背景 最近老代码中遇到的一个问题,表现为: goroutine数量在高峰期上涨,上涨后平峰期将不下来.也就是goroutine泄露 使用pprof看,进程堵塞在chan chan的使用经验 在使用ch ...

  6. 【Golang】解决Go test执行单个测试文件提示未定义问题

    背景 很多人记录过怎么执行Go test单个文件或者单个函数,但是要么对执行单文件用例存在函数或变量引用的场景避而不谈,要么提示调用了其它文件中的模块会报错.其实了解了go test命令的机制之后,这 ...

  7. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  8. channel Golang

    Golang, 以17个简短代码片段,切底弄懂 channel 基础 (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的 ...

  9. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

随机推荐

  1. \_\_str\_\_和\_\_repr\_\_

    目录 __str__和__repr__ 一.__str__ 二.repr __str__和__repr__ 一.__str__ 打印时触发 class Foo: pass obj = Foo() pr ...

  2. play framework在eclipse中自动的预编译生成precompiled文件

    一.修改 eclipe 中的启动文件属性eclipse/*.launch 中的最后一条:加入参数 -Dprecompile=yes  将会在启动项目时,进行项目的预编译 (将在项目中生成 precom ...

  3. IP命令介绍

    ip指令可以显示或操作路由.网络设备.设置路由策略和通道 1.语法 ip [选项]  Object  COMMAND [help] Object对象可以是: link  网络设备.addr 设备的协议 ...

  4. java word另存为word xml格式

    1.jacob-1.15-M3-x86.dll copy到c:\\windows\system32 2.引入jacob.jar 把jacob.dll(不同版本的jacob的dll文件名有所不同)复制到 ...

  5. linux上安装 mysql

    一.linux 上安装 mysql 1.查看mysql是否安装 rpm -qa|grep mysql 2.卸载 mysql yum remove mysql mysql-server mysql-li ...

  6. 网站爬取-案例四:知乎抓取(COOKIE登录抓取个人中心)(第二卷)

    接着上卷来分析,作为开发人员我们都知道,登录是一个想指定URL发送POST请求的过程,所以我们需要找到请求的URL,以及字段,先用一个错误账号和密码做一下尝试,如果是正确的话会直接跳转到别的页面,这样 ...

  7. auth模块用法

    Auth模块: 如果你想用auth模块   那么你就用全套 createsuperuser  创建超级用户 这个超级用户就可以拥有登陆django admin后台管理的权限 Auth模块是Django ...

  8. PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册

    Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...

  9. 100)PHP,文件上传总代码整理

    首先是我的目录关系: 然后我的html表单代码: <html> <head> <title>Form</title> <meta http-equ ...

  10. SpringBoot:Shiro 整合 Redis

    前言 前段时间做了一个图床的小项目,安全框架使用的是Shiro.为了使用户7x24小时访问,决定把项目由单机升级为集群部署架构.但是安全框架shiro只有单机存储的SessionDao,尽管Shrio ...