我正在尝试编写自己的睡眠函数,相当于在Go中time.Sleep使用time.After。
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()返回一个频道。在指定的持续时间后,将在通道上发送一个值。
time.After()
因此,只需从返回的通道接收一个值,接收就会阻塞,直到发送该值为止:
func Sleep(x int) { <-time.After(time.Second * time.Duration(x)) }
您的错误:
在第一个示例中:
msg := <- time.After(time.Second * x)
msg已经声明,因此不能使用Short变量声明 :=。接收到的值也将是类型time.Time,因此您甚至无法将其分配给msg。
msg
:=
time.Time
在第二个示例中,您需要一个类型转换,x它是type int和time.Secondtype time.Duration,并且time.After()需要type的值time.Duration。
x
int
time.Second
time.Duration