Go 继续默认设置为什么其他案例没有打印出来

Go 继续默认设置为什么其他案例没有打印出来,go,Go,当我运行这段代码时,我不明白为什么在打印X之后它不会打印其他案例。 我希望看到X将它打印出来三秒钟,然后最终从server2打印出来 package main func server1(ch chan string) { time.Sleep(6 * time.Second) ch <- "from server1" } func server2(ch chan string) { time.Sleep(3 * time.Second)

当我运行这段代码时,我不明白为什么在打印X之后它不会打印其他案例。 我希望看到X将它打印出来三秒钟,然后最终从server2打印出来

package main


func server1(ch chan string) {
    time.Sleep(6 * time.Second)
    ch <- "from server1"
}
func server2(ch chan string) {
    time.Sleep(3 * time.Second)
    ch <- "from server2"

}
func main() {
    output1 := make(chan string)
    output2 := make(chan string)
    go server1(output1)
    go server2(output2)
    select {
    case s1 := <-output1:
        fmt.Println(s1)
    case s2 := <-output2:
        fmt.Println(s2)
    default:
        fmt.Println(“X”)
    }
}
主程序包
func server1(ch chan字符串){
时间。睡眠(6*时间。秒)
ch
func main(){
输出1:=生成(更改字符串)
输出2:=make(成串)
go服务器1(输出1)
go服务器2(输出2)
为了{
挑选{

案例s1:=当main exist程序终止时,包括其所有goroutine,它们不会在以太中继续。您需要将select语句放入循环中。感谢有意义。很抱歉开始学习go
func main() {
    output1 := make(chan string)
    output2 := make(chan string)
    go server1(output1)
    go server2(output2)
    for {
        select {
        case s1 := <-output1:
            fmt.Println(s1)
        case s2 := <-output2:
            fmt.Println(s2)
        default: // todo: return
            fmt.Println("X")
        }
    }
}