In this function, I want the time to sleep after the execution of the main template. and print the message after 1 minute is passed but it gives me two problems.
- It takes 1 minute to load a template instead of sleeping after the template execution.
- It gives the message to add the
return
. When I writereturn nil
, it gives me another error on this codetime.Sleep(5 * time.Second) fmt.Println("Time Passed")
thatunreachable code
.
I used the middleware for this Main()
function to not repeat log.Fatal(err)
for each error message.
Code
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
}
CodePudding user response:
Any code after a return
statement is unreachable, because the function will return before executing those statements. If you want to print something 1 minute after the response is written, you can do:
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
}
This will start a goroutine that will sleep for a minute and print.