我在一小段代码中使用它,让time.After()
起作用。如果没有它,程序将直接执行下一行而不会等待计时器完成。
以下是示例:
package main
import (
"fmt"
"time"
)
func main() {
a := 1
fmt.Println("Starting")
<-time.After(time.Second * 2)
fmt.Println("Printed after 2 seconds")
}
我在一小段代码中使用它,让time.After()
起作用。如果没有它,程序将直接执行下一行而不会等待计时器完成。
以下是示例:
package main
import (
"fmt"
"time"
)
func main() {
a := 1
fmt.Println("Starting")
<-time.After(time.Second * 2)
fmt.Println("Printed after 2 seconds")
}
<-
运算符用于等待通道的响应。在此代码中,它用于等待由 time.After
提供并在 X 时间后被触发的通道。您可以在 @Marc 提到的Go 之旅中了解更多有关通道的信息。请注意,如果您不需要处理多个通道结果(如使用 select
),则可以将 <-time.After(time.Second * 2)
替换为同步的 time.Sleep(time.Second * 2)
语句。
time.After
通常用于计时异步操作的结果,涉及一个或多个通道,例如:
func doLongCalculations() (int, error) {
resultchan := make(chan int)
defer close(resultchan)
go calculateSomething(resultchan)
select {
case <-time.After(time.Second * 2):
return nil, fmt.Errorf("operation timed out")
case result := <-resultchan
return result, nil
}
}
我们再次强烈建议您参加Go之旅,以了解Go的基础知识 :)
time.Sleep()
更符合我的使用情况,这样就不需要使用额外的通道。 - Evaldo Junior
<-
符号表示该通道上的接收操作。time.After
是一个返回(只能接收)通道的函数。 - jub0bs