如何仅使用 time.After 编写我自己的 Sleep 函数?
How to write my own Sleep function using just time.After?
我正在尝试使用 Go 中的 time.After
编写自己的等同于 time.Sleep
的睡眠函数。
这是代码。第一次尝试:
func Sleep(x int) {
msg := make(chan int)
msg := <- time.After(time.Second * x)
}
第二次尝试:
func Sleep(x int) {
time.After(time.Second * x)
}
两个 return 错误,有人可以向我解释如何使用 time.After
编写等同于 time.Sleep
的睡眠函数吗?如果可能的话,我什么时候使用通道?
time.After()
returns你一个频道。在指定的持续时间后,将在通道上发送一个值。
所以只需从返回的通道接收一个值,接收将阻塞直到发送该值:
func Sleep(x int) {
<-time.After(time.Second * time.Duration(x))
}
您的错误:
在你的第一个例子中:
msg := <- time.After(time.Second * x)
msg
已经声明,所以 Short variable declaration :=
cannot be used. Also the recieved value will be of type time.Time
,所以你甚至不能将它分配给 msg
。
在您的第二个示例中,您需要一个类型 conversion as x
is of type int
and time.Second
is of type time.Duration
,并且 time.After()
需要一个类型 time.Duration
.
的值
我正在尝试使用 Go 中的 time.After
编写自己的等同于 time.Sleep
的睡眠函数。
这是代码。第一次尝试:
func Sleep(x int) {
msg := make(chan int)
msg := <- time.After(time.Second * x)
}
第二次尝试:
func Sleep(x int) {
time.After(time.Second * x)
}
两个 return 错误,有人可以向我解释如何使用 time.After
编写等同于 time.Sleep
的睡眠函数吗?如果可能的话,我什么时候使用通道?
time.After()
returns你一个频道。在指定的持续时间后,将在通道上发送一个值。
所以只需从返回的通道接收一个值,接收将阻塞直到发送该值:
func Sleep(x int) {
<-time.After(time.Second * time.Duration(x))
}
您的错误:
在你的第一个例子中:
msg := <- time.After(time.Second * x)
msg
已经声明,所以 Short variable declaration :=
cannot be used. Also the recieved value will be of type time.Time
,所以你甚至不能将它分配给 msg
。
在您的第二个示例中,您需要一个类型 conversion as x
is of type int
and time.Second
is of type time.Duration
,并且 time.After()
需要一个类型 time.Duration
.