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)
	}
}
相关推荐
程序员爱钓鱼16 小时前
Go语言同步原语与数据竞争:数据竞争的检测工具
后端·google·go
白总Server18 小时前
GaussDB 分布式数据库调优(架构到全链路优化)
java·网络·c++·架构·go·scala·数据库架构
hacker_LeeFei2 天前
Goland使用手册(1)
go
白总Server2 天前
Golang dig框架与GraphQL的完美结合
java·大数据·前端·javascript·后端·go·graphql
qqxhb2 天前
零基础设计模式——行为型模式 - 中介者模式
java·设计模式·go·中介者模式
GetcharZp2 天前
「Golang黑科技」RobotGo自动化神器,鼠标键盘控制、屏幕截图、全局监听全解析!
后端·go
围开哥哥2 天前
AI学习笔记 — RAG 与 中医知识的碰撞
go
程序员爱钓鱼2 天前
Go同步原语与数据竞争:原子操作(atomic)
后端·面试·go
没逻辑3 天前
Go 内存逃逸与泄漏排查实战
go
卜锦元3 天前
Go中GMP调度模型是如何优雅地应对G阻塞?
go