代码行情程序会告诉goroutine通过代码行情代码停止它吗?

package main
import "fmt"
import "time"

func main() {
    ticker := time.NewTicker(time.Millisecond * 500)
    go func() {
        for t := range ticker.C {
            fmt.Println("Tick at", t)
        }
        fmt.Println("ticker stopped")
    }()
    time.Sleep(time.Second * 5)
    ticker.Stop()
    time.Sleep(time.Second * 5)
}

I thought when I call ticker.Stop(), ticker.C should tell the goroutine that it is over, so the for loop should end, but it doesn't look like that, the string "ticker stopped" is never printed.

As JimB pointed out, the documentation for the time.Ticker specifies that Stop() does not close the channel, to prevent a read from the channel succeeding incorrectly. Your best bet is probably a quit channel.

package main

import "fmt"
import "time"

func main() {
    ticker := time.NewTicker(time.Millisecond * 500)
    quit := make(chan struct{})
    go func() {
        for {
            select {
            case t := <-ticker.C:
                fmt.Println("Tick at", t)
            case <-quit:
                fmt.Println("ticker stopped")
                return
            }
        }
    }()
    time.Sleep(time.Second * 5)
    ticker.Stop()
    close(quit)
    time.Sleep(time.Second * 5)
}

https://play.golang.org/p/xTKNkMtdIf