问题
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