dongtong2021
2015-08-11 12:44
采纳率: 0%
浏览 76
已采纳

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

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条回答 默认 最新

  • dongzao3923 2015-08-11 12:49
    已采纳

    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.

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题