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)
	}
}
相关推荐
程序员爱钓鱼10 小时前
Go字符串与数值转换核心库: strconv深度解析
后端·面试·go
一条GO1 天前
告别循环依赖:Wire 的三种优雅实现
go
tyung1 天前
Go 无锁队列 zqueue 单点深挖:设计、选型与性能
性能优化·go
我叫黑大帅1 天前
如何使用WebSocket实现一个公域聊天室? --Go
后端·面试·go
程序员爱钓鱼1 天前
Go运行时系统解析: runtime包深度指南
后端·面试·go
feng一样的男子2 天前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
sssdxiaokeyy2 天前
如何通过GEO优化让厂家销量飙升?
go
我叫黑大帅2 天前
Golang中实时推送的功臣 - WebSocket
后端·面试·go
我叫黑大帅2 天前
如何让两个Go程序远程调用?
后端·面试·go
程序员爱钓鱼2 天前
Go字符串与数值转换核心库:strconv深度解析
后端·面试·go