air*_*eak -2 time sleep channel go
我正在尝试编写自己的睡眠功能,相当于在Go中time.Sleep使用time.After.
这是代码.第一次尝试:
func Sleep(x int) {
  msg := make(chan int)
  msg := <- time.After(time.Second * x)
}
第二次尝试:
func Sleep(x int) {
 time.After(time.Second * x)
}
两者都返回错误,有人可以向我解释如何编写等同于time.Sleep使用的睡眠功能time.After,如果可能的话,何时使用通道?
time.After()给你一个频道.并且在指定的持续时间之后将在通道上发送值.
因此,只需从返回的通道接收一个值,接收将阻塞,直到发送该值:
func Sleep(x int) {
    <-time.After(time.Second * time.Duration(x))
}
你的错误:
在你的第一个例子中:
msg := <- time.After(time.Second * x)
msg已经声明,因此不能使用Short变量声明 :=.收到的值也是类型time.Time,因此您甚至无法将其分配给msg.
在第二个例子中,你需要一个类型转换的x类型是int和time.Second是类型time.Duration,并time.After()预计类型的值time.Duration.