小编典典

如何仅使用time.After编写自己的Sleep函数?

go

我正在尝试编写自己的睡眠函数,相当于在Go中time.Sleep使用time.After

这是代码。第一次尝试:

func Sleep(x int) {
  msg := make(chan int)
  msg := <- time.After(time.Second * x)
}

第二次尝试:

func Sleep(x int) {
 time.After(time.Second * x)
}

两者都返回错误,有人可以向我解释如何编写等同于time.Sleep使用的睡眠函数time.After,如果可能的话,何时使用通道?


阅读 317

收藏
2020-07-02

共1个答案

小编典典

time.After()返回一个频道。在指定的持续时间后,将在通道上发送一个值。

因此,只需从返回的通道接收一个值,接收就会阻塞,直到发送该值为止:

func Sleep(x int) {
    <-time.After(time.Second * time.Duration(x))
}

您的错误:

在第一个示例中:

msg := <- time.After(time.Second * x)

msg已经声明,因此不能使用Short变量声明
:=。接收到的值也将是类型time.Time,因此您甚至无法将其分配给msg

在第二个示例中,您需要一个类型转换x它是type
inttime.Secondtype
time.Duration,并且time.After()需要type的值time.Duration

2020-07-02