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)
	}
}
相关推荐
苗苗大佬14 小时前
学习go语言
go
Tomhex1 天前
Golang内置函数总结
golang·go
ZHENGZJM1 天前
JWT 鉴权体系:令牌生成与解析
react.js·go
Go_error1 天前
JSON decoding in Go
go
Go_error1 天前
Go 变长参数函数
go
爱分享的阿Q1 天前
技术饱和度视角下的编程语言选择:一场关于供需博弈的深度思考
java·python·go
tyung2 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
ZHENGZJM3 天前
架构总览:Monorepo 结构与容器化部署
架构·go·react·全栈开发
我叫黑大帅3 天前
如何设计应用层 ACK 来补充 TCP 的不足?
后端·面试·go
ZHENGZJM3 天前
认证增强:图形验证码、邮箱验证与账户安全
安全·react.js·go·gin