Golang中的nodejs setTimeout是什么?
我目前正在学习,并且我错过了来自golang的Nodejs的setTimeout
。 我还没读过很多,我想知道是否可以像间隔或回送一样执行相同的操作。
有没有一种方法可以将它从节点写入golang? 我听说golang处理并发性很好,这可能是一些goroutines或其他?
//Nodejs function main() { //Do something setTimeout(main, 3000) console.log('Server is listening to 1337') }
先谢谢你!
//Go version func main() { for t := range time.Tick(3*time.Second) { fmt.Printf("working %s \n", t) } //basically this will not execute.. fmt.Printf("will be called 1st") }
最接近的等价物是时间time.AfterFunc
函数:
import "time" ... time.AfterFunc(3*time.Second, somefunction)
这将产生一个新的goroutine,并在指定的时间后运行给定的函数。 软件包中还有其他相关的function可能是有用的:
-
time.After
:此版本将返回一个频道,将在给定的时间后发送一个值。 如果您希望在等待一个或多个通道时发生超时,这可以与select
语句结合使用。 -
time.Sleep
:这个版本将会阻塞,直到定时器到期。 在Go中,编写同步代码更为常见,并且依靠调度程序切换到其他goroutine,所以有时候简单的阻塞是最好的解决scheme。
也有time.Ticker
和time.Ticker
types,可用于轻微的情况下,你可能需要取消定时器。
另一个解决scheme可能是实施一个
立即调用的函数expression式(IIFE)function如下:
go func() { time.Sleep(time.Second * 3) // your code here }()