go channel初步
go 关键字跟随的函数,异步执行,并且可以阻塞,类似于js 的 async 函数中 await 异步结果
协程间通过 channel 传递信息,并且 channel 带有阻塞性,加上 go函数 的阻塞性,所以函数编写类似串行执行
但还是要注意是异步执行,结果出现的时间和串行不同。
package main import( "fmt" "time" ) var ch chan int = make(chan int,2); func chPush(){ fmt.Println("before push.") for i:=0;i<5;i++{ // time.Sleep(100*time.Millisecond)
// 必须要读取以后,才能再压入一个。容量是2,所以一次可以压入2个数据
ch <- i
fmt.Println("push:",i) } fmt.Println("after push.") } func chPop(){ fmt.Println("before pop.") for i:=0;i<5;i++{ time.Sleep(100*time.Millisecond)
// 堵塞,必须要有数据,才能读取。另外,此处读取一个数据,chPush 会立即压入一个数据
n := <- ch fmt.Println("pop:",n) }
fmt.Println("after pop.")
}
func main(){
fmt.Println("begin:")
go chPush() // 异步,不会等待
fmt.Println("follow go push. no choke")
time.Sleep(1000 * time.Millisecond)
go chPop()
fmt.Println("follow go pop. no choke but delayed by sleep")
// 主线程可能会先于子协程结束,所以要某种方式等待一下
time.Sleep(1000 * time.Millisecond)
fmt.Println("end.")
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现