码迷,mamicode.com
首页 > 其他好文 > 详细

Golang 细节

时间:2020-03-12 09:18:24      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:ret   nic   byte   consumer   cer   one   nil   err   proc   

 

func main() {
	f, err := os.OpenFile("debug.log", os.O_RDWR, 0666)
	if err != nil {
		panic(err)
	}

	go func() {
		defer f.Write([]byte("2"))
		for {
			f.Write([]byte("1"))
			time.Sleep(time.Second)
		}
	}()

	<-time.Tick(5 * time.Second)
}

  

>11111

  

1.主函数退出后,所有由主函数创建的携程都会结束

2.主函数退出携程内的defer不一定会执行

 

func main() {
	messages := make(chan int, 10)
	done := make(chan bool)

	defer close(messages)
	// consumer
	go func() {
		ticker := time.NewTicker(1 * time.Second)
		for _ = range ticker.C {
			select {
			case what := <-done:
				fmt.Println(what)
				fmt.Println("child process interrupt...")
				return
			default:
				fmt.Printf("send message: %d\n", <-messages)
			}
		}
	}()

	// producer
	for i := 0; i < 10; i++ {
		messages <- i
	}
	time.Sleep(5 * time.Second)
	close(done)
	time.Sleep(1 * time.Second)
	fmt.Println("main process exit!")
}

  

  

>>
send message: 0
send message: 1
send message: 2
send message: 3
false
child process interrupt...
main process exit!

  

Golang 细节

标签:ret   nic   byte   consumer   cer   one   nil   err   proc   

原文地址:https://www.cnblogs.com/8000cabbage/p/12467009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!