Golang 细节
Posted 8000cabbage
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 细节相关的知识,希望对你有一定的参考价值。
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 ", <-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 细节的主要内容,如果未能解决你的问题,请参考以下文章