go func()中的内容如果没有sleep,主线程不保证能执行完

package main

import (
	"fmt"
	"time"
)

func main() {
	msg := make(chan string, 10)
	msg2 := make(chan string, 5)
	go func() {
		msg <- "a"
		msg <- "b"
		msg <- "c"
		msg2 <- "1"
		msg2 <- "2"
		msg2 <- "3"
	}()

	go func() {
		for v := range msg {
			fmt.Println(v)
		}
	}()

	//1 close(msg)
	for v := range msg2 {
		fmt.Println(v)
		//2 作用和1类似,避免deadlock
		if len(msg2) <= 0 {
			break
		}
	}

	time.Sleep(1)
}

1
2
a
b
c
3