通道接收运算符与不是通道的东西一起使用?

Channel receive operator used with something which is not a channel?

我想了解这段代码的含义:

<-

在以下代码段中:

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)
}

虽然我理解这段代码的作用(它每 2 秒打印一次 doing something from polling),但我不明白为什么 <- 在它的外部使用从频道发送 to/receiving 的正常上下文。

换句话说,我在这里看不到频道。

time.After returns一个频道:

func After(d Duration) <-chan Time

<-time.After(...) 只是等待,直到从通道中读取一个元素,这发生在指定的时间量过去之后。通道值为时长后的时间。

此函数为封装函数,请勿与Time上的方法混淆: func (t Time) After(u Time) bool 只是 returns 是否 tu 之后。此方法将被调用:if sometimevariable.After(...) {