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 细节的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现简单的 Web 服务器

代码片段 - Golang 实现集合操作

golang数据类型和各类型转换注意细节图文+代码

json [Golang] golang #golang #snippets中有用的片段

java golang oop 2文章片段

golang 去练习片段