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)
	}
}
相关推荐
喵个咪8 小时前
开箱即用的GO后台管理系统 Kratos Admin - 站内信
后端·微服务·go
Mgx14 小时前
用 Go 手搓一个 NTP 服务:从“时间混乱“到“精准同步“的奇幻之旅
go
wohuidaquan16 小时前
本地生活曝光缺失?GEO语义锚点来救场
go
代码扳手17 小时前
Golang + Genkit 实战:告别手动周报,让 AI 帮你整理一切!
go·ai编程
砖业林coco20 小时前
go语言使用 zhinao-go 轻松调用 360智脑
llm·go
百锦再21 小时前
第6章 结构体与方法
android·java·c++·python·rust·go
Kapaseker1 天前
Go 语言真正擅长的领域是什么?
go
百锦再1 天前
第5章 所有权系统
运维·git·python·eclipse·go·github·负载均衡
Mgx2 天前
深入理解 Windows 全局键盘钩子(Hook):拦截 Win 键的 Go 实现
go
王中阳Go2 天前
又整理了一场真实Golang面试复盘!全是高频坑+加分话术,面试遇到直接抄
后端·面试·go