var ch1 chan int       //ch1是一个正常的channel,不是单向的

var ch2 chan <- float64     //ch2是一个单向的channel,只用于写float64的数据

var ch3  <- chan  int     //ch3是一个单向的channel,只用于读取int数据

package main

func main() {
//创建一个channel,双向的
ch := make(chan int)
//定义一个单向的只能写的channel
var writech chan <- int = ch
//但如果写成下面这样就会报错
<-writech
//定义一个单向的只能读的channel
var readch <- chan int = ch
//写成下面这样就会有问题
readch<-
//下面都会正常编译通过
writech <-
<- readch
//单向无法转换成双向
var ch2 chan int = writech
}

它的应用

package main

import "fmt"

//代表此channel只能写,不能读
func producer(out chan <- int) {
for i:=; i<=; i++ {
out<-i*i
}
close(out)
} func consumer(in <-chan int) {
for num := range in{
fmt.Println("num = ", num)
}
} func main() {
//创建一个双向通道ch
ch := make(chan int) //生产者,生产数字,写入channel
go producer(ch) //chennel传参,引用传递 //消费者,从channel里读取数字、然后打印
consumer(ch)
}

执行的结果

num =
num =
num =
num =
num =
num =
num =
num =
num =
num =
num =

[GO]单向channel和应用的更多相关文章

  1. go语言之进阶篇单向channel的应用 (生产者,消费者模型)

    1.单向channel的应用 示例: package main import ( "fmt" ) //此通道只能写,不能读 func producer(out chan<- ...

  2. go语言之进阶篇单向channel特点

    1.单向channel特点 package main //"fmt" func main() { //创建一个channel, 双向的 ch := make(chan int) / ...

  3. GO语言之channel

    前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

  4. Go语言编程读书笔记:Go channel(2)

    单向channel 概念 单向channel是只能用于发送或者接收数据,channel本身必然是同时支持读写,否则根本没法用.假如一个channel只能读,那么肯定只会是空的,因为你没有机会向里面写数 ...

  5. Golang的channel使用以及并发同步技巧

    在学习<The Go Programming Language>第八章并发单元的时候还是遭遇了不少问题,和值得总结思考和记录的地方. 做一个类似于unix du命令的工具.但是阉割了一些功 ...

  6. Golang channel 的基本使用方法

    package main import ( "fmt" "learner/Add" "time" ) //a. 普通类型,普通变量保存的就是 ...

  7. go语言之并发编程 channel(1)

    单向channel: 单向通道可分为发送通道和接收通道.但是无论哪一种单向通道,都不应该出现在变量的声明中,假如初始化了这样一个变量 var uselessChan chan <- int =m ...

  8. 由浅入深剖析 go channel

    原文:https://www.jianshu.com/p/24ede9e90490 ---------------------------------- 由浅入深剖析 go channel chann ...

  9. Golang的goroutine协程和channel通道

    一:简介 因为并发程序要考虑很多的细节,以保证对共享变量的正确访问,使得并发编程在很多情况下变得很复杂.但是Go语言在开发并发时,是比较简洁的.它通过channel来传递数据.数据竞争这个问题在gol ...

随机推荐

  1. Sentinel-dashboard

    Dashboard控制台 sentinel-dashboard是一个单独的应用,通过spring-boot进行启动,主要提供一个轻量级的控制台,它提供机器发现.单机资源实时监控.集群资源汇总,以及规则 ...

  2. win系统主机上的虚拟机NAT模式可修改3389端口做远程登录

    当你只有一个公网IP的时候,那么这个IP基本上是要分给物理主机的,那么本机的虚拟机就只能选NAT网络模式了,那么想在外网直接远程虚拟机的话,修改虚拟机的远程登录端口(不修改也可以,主要是主机的3389 ...

  3. [Python] WeChat_Robot

    在微信中接入一个聊天机器人 1. WeChat 个人接口itchat 2. 图灵机器人 #-*- coding:utf-8 -*- import itchat import requests apiU ...

  4. 05_java之方法

    01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 * A: 方法的格式 * 修饰符 返回值类型 方法名(参数类型 参 ...

  5. DataGrid 扩展

    //扩展表格,支持上传附件 function extendDataGrid(){ //扩展表格方法,合并单元格 ,参数为数组 $.extend($.fn.datagrid.methods, { aut ...

  6. interrupt 1 using 1

    释疑:void Timer0() interrupt 1 using 1 Timer0   是函数名,随便取的 interrupt   xx   using   y 跟在interrupt   后面的 ...

  7. Git(一):Eclipse中配置Git

    在Eclipse中配置Git: 一,由于我使用的是新版本的eclipse j2ee 4.4默认集成git,所以不用手动安装git插件 二,Eclipse配置基础信息.Windows->Prefe ...

  8. short i=1;short i=i+1对或错,错的理由;short i+=1对或错,错的理由

    short i=1; i=i+1 i+=1 这是一个类型高级与低级的问题,前面的C是short型的,后面的1为int型的,short型与int型的相加得到short型是不可取,因为必须将int型转换为 ...

  9. iOS布局之Auto Layout

    学习资源: <iOS6核心编程>自动布局部分 <iOS6范例经典>自动布局部分 Tutorial: iOS 6 Auto Layout versus Springs and S ...

  10. 数组和集合(四)、Map集合的使用总结

    一.概述 键值对,无序 键唯一.值不唯一 只允许存在一个Key为null元素 二.实现类 1. HashMap · 无序,数组+链表+红黑树 · 非线程安全 2. LinkedHashMap · 有序 ...