为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕神8447489 2021-11-01 10:52:53
我正在尝试编写自己的 sleep 函数,相当于在 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,如果可能,我何时使用通道?
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

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


所以只需从返回的通道接收一个值,接收将阻塞,直到该值被发送:


func Sleep(x int) {

    <-time.After(time.Second * time.Duration(x))

}

你的错误:


在你的第一个例子中:


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

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


在你的第二个例子中,你需要一个类型转换as xis of typeint和time.Secondis of type time.Duration,并且time.After()需要一个 type 的值time.Duration。


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信