package main
import (
"fmt"
"time"
)
var c chan int
func ready(w string, sec int) {
time.Sleep(time.Duration(sec) * time.Second)
fmt.Println(w, "is ready")
//往channel中插入数据
c <- 1
}
//有缓冲的channel:这里有个缓冲,
//因此放入数据的操作c<- 0先于取数据操作 <-c
var a string
var c1 = make(chan int, 10)
func f() {
a = "hello world"
c1 <- 0
}
//无缓冲的channel:
//由于c是无缓冲的channel,因此必须保证取操作<-c 先于放操作c<- 0
var a2 string
var c2 = make(chan int)
func f2() {
a2 = "hellow my world"
<-c2
}
func main() {
//Go语言提供的消息通信机制被称为channel "不要通过共享内存来通信,
//而应该通过通信来共享内存。"
//channel是Go语言在语言级别提供的goroutine间的通信方式。
//channel是类型相关的chan声明,var chanName chan ElementType
//并使用直接使用内置的函数make()创建即可: ch := make(chan int)
c = make(chan int)
go ready("Tee", 2)
go ready("Coffee", 1)
fmt.Println("i am waiting,but not too long")
//从channel中输出数据
<-c
<-c
go f()
<-c1
fmt.Println(a)
go f2()
c2 <- 0
fmt.Println(a2)
}
//channel分为两种:一种是有buffer的,
//一种是没有buffer的,默认是没有buffer的
//ci := make(chan int) //无buffer
//cj := make(chan int, 0) //无buffer
//cs := make(chan int, 100) //有buffer
//有缓冲的channel,因此要注意“放”先于“取”
//无缓冲的channel,因此要注意“取”先于“放”
//关于channel的四个特性
//1.给一个 nil channel 发送数据,造成永远阻塞.
//2.从一个 nil channel 接收数据,
//造成永远阻塞.3.给一个已经关闭的 channel 发送数据,
//引起 panic.4.从一个已经关闭的 channel 接收数据,
//立即返回一个零值
网站首页 > 基础教程 正文
猜你喜欢
- 2024-08-06 详解 Go 中 WaitGroup 设计
- 2024-08-06 「GCTT 出品」什么是协程(goroutine),它们是怎样工作的呢?
- 2024-08-06 经验之谈:学习Go语言的利与弊
- 2024-08-06 Go并发编程:Channel和WaitGroup
- 2024-08-06 Go 系列8: 通过channel控制协程并发数量之核心特性
- 2024-08-06 Go 连接池相关总结:HTTP、RPC、Redis 和数据库等
- 2024-08-06 Go 语言中 channel 内存模型
- 2024-08-06 每日一题(go篇) channel问题
- 2024-08-06 Golang通道(Channel)高效使用技巧与细节解析:提升编程能力必备
- 2024-08-06 一文搞懂Go通道
- 最近发表
-
- 语言教育项目实战之一:Ubuntu下安装Python环境
- spark+python环境搭建(spark环境搭建方式)
- VSCODE搭建python开发环境教程(vscode开发python 必备插件)
- 阿六带你用python appium搭建app自动化测试环境
- 【200920】在Windows上搭建Python2.7环境
- DevOps系列之——python编译环境搭建
- 在Mac中使用pyenv管理Python版本:从安装到虚拟环境的全流程指南
- python使用技巧之环境搭建(办公自动化方向)
- 使用IDEA写Python之pytest环境搭建及...
- Python+Appium环境搭建与自动化教程
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)