模板执行后如何实现time.Sleep?

How to implement the time.Sleep after the template execution?

在这个函数中,我想要在主模板执行后休眠的时间。并在 1 分钟后打印消息,但这给了我两个问题。

  1. 加载模板需要1分钟,而不是模板执行后休眠。
  2. 它给出了添加 return 的消息。当我写 return nil 时,它给了我这个代码 time.Sleep(5 * time.Second) fmt.Println("Time Passed") 的另一个错误 unreachable code.

我使用这个 Main() 函数的中间件来不为每个错误消息重复 log.Fatal(err)

代码

func Main(w http.ResponseWriter, r *http.Request) error {
    match := Get("id1")
    if match {
        return MainTmpl.Execute(w, nil)
        time.Sleep(1 * time.Minute)
        fmt.Println("Time Passed")
    } else {
        return LoginTmpl.Execute(w, nil)
    }
    return nil
}

return 语句之后的任何代码都是无法访问的,因为该函数将在执行这些语句之前 return。如果你想在回复写完 1 分钟后打印一些东西,你可以这样做:

func Main(w http.ResponseWriter, r *http.Request) error {
    match := Get("id1")
    if match {
        go func() {
           time.Sleep(1 * time.Minute)
           fmt.Println("Time Passed")
        }()
        return MainTmpl.Execute(w, nil)
    } else {
        return LoginTmpl.Execute(w, nil)
    }
    return nil
}

这将启动一个 goroutine,它将休眠一分钟并打印。