如何用时间编写我自己的睡眠功能.之后?

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)
}
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

func Sleep(x int) {
 time.After(time.Second * x)
}
Run Code Online (Sandbox Code Playgroud)

两者都返回错误,有人可以向我解释如何编写等同于time.Sleep使用的睡眠功能time.After,如果可能的话,何时使用通道?

icz*_*cza 7

time.After()给你一个频道.并且在指定的持续时间之后将在通道上发送值.

因此,只需从返回的通道接收一个值,接收将阻塞,直到发送该值:

func Sleep(x int) {
    <-time.After(time.Second * time.Duration(x))
}
Run Code Online (Sandbox Code Playgroud)

你的错误:

在你的第一个例子中:

msg := <- time.After(time.Second * x)
Run Code Online (Sandbox Code Playgroud)

msg已经声明,因此不能使用Short变量声明 :=.收到的值也是类型time.Time,因此您甚至无法将其分配给msg.

在第二个例子中,你需要一个类型转换x类型是inttime.Second是类型time.Duration,并time.After()预计类型的值time.Duration.