搜索

个人学习笔记不要看


发布时间: 2022-11-24 22:11:01    浏览次数:38 次
package main

import (
	"fmt"
)

func main() {
	//构建一个通道
	ch1 := make(chan int)
	//开启一个匿名并发函数
	go func() {
		fmt.Println("start goroutine")
		//通过通道通知main的goroutine
		//这句代码会一直阻塞到main的goroutine接收为止
		ch1 <- 0
		fmt.Println("exit goroutine")
	}()
	//time.Sleep(3 * time.Second)
	fmt.Println("wait goroutine")

	//等待匿名goroutine
	<- ch1
	fmt.Println("all done")
}

并发执行,main的goroutine在发布启动协成任务后就只继续执行自己的,启动一个新的goroutine需要时间,所以先打印wait goroutine,如果main的goroutine睡眠一下就会打印start goroutine

package main

import (
	"fmt"
	"time"
)

/*
通道ch是可以进行遍历的
遍历的结果就是接收到的数据
for data := range ch{
}
通过for遍历获得的变量只有一个就是data
 */
func main() {
	//构建一个通道
	ch := make(chan int)
	//开启一个并发匿名函数
	go func() {
		fmt.Println("start goroutine")
		//从3循环到0
		for i := 3; i >= 0 ; i-- {
			//发送3到0之间的数值
			ch <- i
			//每次发送完之后等待
			time.Sleep(time.Second)
		}
		fmt.Println("exit goroutine")
	}()

	//循环接收
	for data := range ch {
		fmt.Println(data)
		//遇到数据0时,退出接收循环,如果遇到0不退出,此时通道中已经没有值的话就会触发宕机错误
		if data == 0 {
			break
		}
	}
}

并发执行,但是main的goroutine结束后,子goroutine都会结束
所以不会打印exit goroutine

免责声明 个人学习笔记不要看,资源类别:文本, 浏览次数:38 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 10:11:01。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/jianjiana/p/16916380.html