How to write my own Sleep function using just time

2019-09-24 01:15发布

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条回答
该账号已被封号
2楼-- · 2019-09-24 01:45

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.

查看更多
登录 后发表回答