How to write my own Sleep function using just time.After?

↘锁芯ラ 提交于 2019-12-13 09:13:00

问题


I'm trying to write my own sleep function equivalent to time.Sleep using time.After in Go.

Here's the code. First attempt:

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

Second attempt:

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

Both return errors, can someone explain to me how to write a sleep function equivalent to time.Sleep using time.After and if possible when do I use channel?


回答1:


time.After() returns you a channel. And a value will be send on the channel after the specified duration.

So just receive a value from the returned channel, and the receive will block until the value is sent:

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

Your errors:

In your first example:

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

msg is already declared, and so the Short variable declaration := cannot be used. Also the recieved value will be of type time.Time, so you can't even assign it to msg.

In your second example you need a type conversion as x is of type int and time.Second is of type time.Duration, and time.After() expects a value of type time.Duration.



来源:https://stackoverflow.com/questions/31942163/how-to-write-my-own-sleep-function-using-just-time-after

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!