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)
	}
}
相关推荐
Sinclair9 小时前
安企CMS的安装-源码编译安装
运维·后端·go
wear工程师12 小时前
Go 的 map 并发读写,面试里别上来就答「sync.Map」
面试·go
HokKeung1 天前
用 Cobra 写一个像样的 Go 命令行工具
go·命令行
黑贝是条狗1 天前
一个从零到一,全部由AI实现的开放平台
go·ai vibe coding
ArixBit2 天前
从目录分层到交付验证:我的 Go 后端工程实践
go
ArixBit2 天前
用 Go 手撸 Agent 框架 #9:把最小 Agent 抽成 Runtime
go·agent
江畔柳前堤2 天前
Go04-控制结构
大数据·人工智能·面试·职场和发展·go·业界资讯
用户6757049885023 天前
别再乱用了!var arr []int 和 arr := []int{} 给整懵了?不就声明个空数组,项目居然崩了?
后端·go
江畔柳前堤3 天前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
名字还没想好☜3 天前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice