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)
	}
}
相关推荐
Serverless社区13 小时前
FunctionAI 图像生成:简化从灵感到 API 调用的每一步
go
Ciel_752114 小时前
内网穿透工具【frp】的核心功能底层处理逻辑解析
网络·go
RokFile14 小时前
Go 高可用 YAML 生成利器:深入解析 yamlc
go
敲代码的火锅16 小时前
基于pyroscope-go项目性能数据持续收集
后端·go
Joey_Chen21 小时前
【Golang开发】快速入门Go——变量和数据类型
后端·go
岁忧1 天前
(LeetCode 每日一题) 498. 对角线遍历 (矩阵、模拟)
java·c++·算法·leetcode·矩阵·go
狼爷2 天前
Go 语言中的 Option 模式,让你写出可扩展性好的代码
go
得物技术2 天前
可扩展系统设计的黄金法则与Go语言实践|得物技术
后端·go
郭京京2 天前
计算机网络简介
网络协议·go
郭京京2 天前
go语言Socket
go