Golang并发编程之channel通道

golang并发编程之channel


通道由make函数创建,该函数指定chan关键字和通道的元素类型

创建无缓冲和缓冲通道的代码块:

语法:

Unbuffered := make(chan int) //整型无缓冲通道
buffered := make(chan int,10) //整型有缓冲通道


将值发送给通道的代码块需要使用 <- 运算符

goroutine1 := make(chan string,5) // 字符串缓冲通道
goroutine1 <- "China" //通过通道发送字符串

从通道接受值的代码块

data := <- goroutine1  //从通道接受字符串

通道的发送和接收特性

1.对于同一个通道,发送操作之间是互斥的,接受操作之间也是互斥的。
2.发送操作和接受操作对元素的处理是不可分割的。
3.发送操作在完成之前会被阻塞,接受操作也是如此

实例

package main

import (
	"fmt"
	"math/rand"
	"time"
)

var values = make(chan int)

func send() {
	rand.Seed(time.Now().UnixNano())
	// 生成一个10以内的随机数
	value := rand.Intn(10)
	fmt.Printf("value: %v\n", value)
	// 等待两秒
	time.Sleep(time.Second * 2)
	values <- value
}

func main() {
	// 从通道接受值
	defer close(values)
	go send()
	fmt.Println("wait...")
	value := <-values
	fmt.Printf("recieve: %v\n", value)
	fmt.Println("end...")
}

Output:

wait...
value: 2
recieve: 2
end...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值