我想了解这段代码的含义:
<-
在以下代码段中:
package main
import (
"fmt"
"net/http"
"time"
)
func doSomething(s string) {
fmt.Println("doing something", s)
}
func startPolling() {
for {
// Here:
<-time.After(2 * time.Second)
go doSomething("from polling")
}
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello")
}
func main() {
go startPolling()
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
虽然我理解这段代码的作用(它每两秒打印从轮询做一些事情)但我不明白为什么<-
在其正常的发送上下文之外被使用/从频道接收。
换句话说,我在这里看不到一个频道。
答案 0 :(得分:2)
time.After会返回一个频道:
func After(d Duration) <-chan Time
<-time.After(...)
只是等待有一个要从通道读取的元素,这在指定的时间过去之后发生。通道值是持续时间之后的时间。
此函数是一个包函数,不应与Time
上的方法混淆:
func (t Time) After(u Time) bool
只返回t
是否在u
之后。将使用以下方法调用此方法:if sometimevariable.After(...) {