golang中channel(一)

在这里插入图片描述

在 Go 语言中,通道(Channel)是一种用于在 goroutine 之间进行通信和同步的机制。通道提供了一种安全、简单、高效的方式来共享数据,避免了显式的锁和条件变量。

go中channel的应用场景:

  • 消息传递、消息过滤
  • 信号广播
  • 事件订阅和广播
  • 任务分支
  • 结果汇总
  • 并发控制
  • 同步和异步

1、channel的有无缓冲通道

package main

import (
	"fmt"
	"time"
)

// 不要通过共享内存来通信,而要通过通信来共享内存
func main() {
	var msg chan string
	msg = make(chan string, 0) //如果为0,会导致dead lock
	//msg= make(chan string,0)//无缓冲通道
	//msg= make(chan string,10)//有缓冲通道
	//无缓冲channel适用于通知,B要第一时间通知 知道A是否已经完成
	//有缓冲channel适用于消费者和生产者之间的通信
	go func(msg chan string) {
		data := <-msg
		fmt.Println(data)
	}(msg)

	msg <- "string"
	time.Sleep(time.Second * 3)
}

2 、channel的打印方式,for…range…和ok…idiom…

package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int, 3)
	go func() {
		for i := 1; i <= 3; i++ {
			ch <- i
			time.Sleep(time.Second)
		}
		close(ch)
	}()
	// 使用ok idiom遍历通道
	for {
		num, ok := <-ch
		if !ok {
			break
		}
		fmt.Println(num)
	}
	// 使用for range遍历通道
	for num := range ch {
		fmt.Println(num)
	}
	fmt.Println("Channel closed, exiting...")
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

席万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值