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)
	}
}
相关推荐
gopyer15 小时前
180课时吃透Go语言游戏后端开发11:Go语言中的并发编程
golang·go·游戏开发·并发编程
Java陈序员21 小时前
简单好用!一款针对 IT 团队开发的文档管理系统!
mysql·docker·go
程序员爱钓鱼1 天前
Go语言实战案例——进阶与部署篇:性能优化与 pprof 性能分析实践
后端·google·go
程序员爱钓鱼2 天前
Go语言实战案例——进阶与部署篇:使用Go编写系统服务(如守护进程)
后端·google·go
n8n3 天前
Go语言GC调优全面指南
go
n8n3 天前
Go 协程在实际项目中的应用详解
go
苏琢玉3 天前
再也不用翻一堆日志!一键部署轻量级错误监控系统,帮你统一管理 PHP 报错
go·github·php
程序员爱钓鱼3 天前
Go语言实战案例——进阶与部署篇:使用Docker部署Go服务
后端·google·go
程序员爱钓鱼4 天前
Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
后端·算法·go
该用户已不存在4 天前
别再用 if err != nil 了,学会这几个技巧,假装自己是Go大神
后端·go