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)
	}
}
相关推荐
白应穷奇4 小时前
go 日志综合指南
go
DemonAvenger9 小时前
从零实现RPC框架:Go语言版
网络协议·架构·go
robin_zjw13 小时前
Go中的优雅关闭:实用模式
go
用户67570498850213 小时前
Wire,一个神奇的Go依赖注入神器!
后端·go
一个热爱生活的普通人13 小时前
拒绝文档陷阱!用调试器啃下 Google ToolBox 数据库工具箱源码
后端·go
程序员爱钓鱼14 小时前
Go语言实战案例:编写一个简易聊天室服务端
后端·go·trae
程序员爱钓鱼14 小时前
Go语言实战案例:实现一个并发端口扫描器
后端·go·trae
DemonAvenger15 小时前
构建实时应用:WebSocket+Go实战
网络协议·架构·go
Joker-01111 天前
深入 Go 底层原理(十二):map 的实现与哈希冲突
算法·go·哈希算法·map
岁忧1 天前
(LeetCode 面试经典 150 题) 138. 随机链表的复制 (哈希表)
java·c++·leetcode·链表·面试·go