package main
import(
"fmt"
"time"
)
func main(){
fmt.Println("1")
defer fmt.Println("-1")
go func() {
fmt.Println("2")
defer fmt.Println("-2")
time.Sleep(9 * time.Second)
}()
time.Sleep(1 * time.Second)
fmt.Println("3")
}
产生输出:1 2 3 -1 但我原以为 goroutine 的 defer 会被调用来产生:1 2 3 -2 -1
在我的实际代码中,我的 goroutine 在 websocket 上被阻塞了......我想我可以发送一个关闭信号,但我还没有弄清楚如何做一个等待多个对象的事情(如果它实际上可以完成)。我目前正在通过将延迟的 -2 提升到主范围来解决我的问题。
是否有一些技巧可以推迟我做错的安置?