Go 继续默认设置为什么其他案例没有打印出来
当我运行这段代码时,我不明白为什么在打印X之后它不会打印其他案例。 我希望看到X将它打印出来三秒钟,然后最终从server2打印出来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)
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*时间。秒)
chfunc 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")
}
}
}