channel并发编程

不要通过共享内存通信,要通过通信共享内存。

channel是golang并发编程中一种重要的数据结构,用于多个goroutine之间进行通信。

我们通常可以把channel想象成一个传送带,将goroutine想象成传送带周边的人,一个传送带的上游放上物品,通过传送带的传输,下游的人可以将物品取走。

go 复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan string, 2)
	s := []string{"A", "B", "C", "D"}
	go func() {
		defer close(c)
		for _, v := range s {
			fmt.Printf("send to chan %v\n", v)
			c <- v
			time.Sleep(1 * time.Second)
		}
	}()
	time.Sleep(5 * time.Second)
	for v := range c {
		fmt.Printf("recieved %v\n", v)
	}
}
go 复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan string, 2)
	s := []string{"A", "B", "C", "D"}
	go func() {
		//defer close(c)
		for _, v := range s {
			fmt.Printf("send to chan %v\n", v)
			c <- v
			time.Sleep(1 * time.Second)
		}
	}()
	time.Sleep(5 * time.Second)
	for v := range c {
		fmt.Printf("recieved %v\n", v)
	}
}
相关推荐
10ms指针16 小时前
【高性能Go实践02】深水区重构:规避 sync.Pool 大对象缺陷与 Cgo 边界内存安全实践
go
鹏北海2 天前
Go 语言基础笔记 — 面向 JS/TS 前端开发者
go
鹏北海2 天前
Go 语言进阶笔记 — 面向 JS/TS 前端开发者
go
鹏北海2 天前
Go 包管理笔记 — 面向 JS/TS 前端开发者
go
百度Geek说2 天前
告别死锁和陈旧语法、告别性能瓶颈:新手Gopher 秒变 Go 语言大神
人工智能·go
用户398346161202 天前
Go-Spring 实战第 14 课 —— Bean 注册函数:Provide、Module、Group 以及 Configuration
spring·go
锋行天下3 天前
一句mysql复杂查询搞崩一个壮汉
后端·mysql·go
用户398346161203 天前
Go-Spring 实战第 13 课 —— Bean 元信息:名称、生命周期、接口导出、条件和显式依赖
spring·go
猪猪拆迁队3 天前
用 ESP32-S3 和 TinyGo,先搭个 AI 语音助手的小底座
前端·后端·go
赫媒派4 天前
炸裂!Go 1.26 三连发:go fix 现代化、pkg.go.dev API 开放、源码级内联器
go