Go by Example ไธญๆ–‡็‰ˆ: Ticker

ๅฎšๆ—ถๅ™จ ๆ˜ฏๅฝ“ไฝ ๆƒณ่ฆๅœจๆœชๆฅๆŸไธ€ๅˆปๆ‰ง่กŒไธ€ๆฌกๆ—ถไฝฟ็”จ็š„ - ๆ‰“็‚นๅ™จ ๅˆ™ๆ˜ฏไธบไฝ ๆƒณ่ฆไปฅๅ›บๅฎš็š„ๆ—ถ้—ด้—ด้š”้‡ๅคๆ‰ง่กŒ่€Œๅ‡†ๅค‡็š„ใ€‚ ่ฟ™้‡Œๆ˜ฏไธ€ไธชๆ‰“็‚นๅ™จ็š„ไพ‹ๅญ๏ผŒๅฎƒๅฐ†ๅฎšๆ—ถ็š„ๆ‰ง่กŒ๏ผŒ็›ดๅˆฐๆˆ‘ไปฌๅฐ†ๅฎƒๅœๆญขใ€‚

package main
import (
    "fmt"
    "time"
)
func main() {

ๆ‰“็‚นๅ™จๅ’Œๅฎšๆ—ถๅ™จ็š„ๆœบๅˆถๆœ‰็‚น็›ธไผผ๏ผšไฝฟ็”จไธ€ไธช้€š้“ๆฅๅ‘้€ๆ•ฐๆฎใ€‚ ่ฟ™้‡Œๆˆ‘ไปฌไฝฟ็”จ้€š้“ๅ†…ๅปบ็š„ select๏ผŒ็ญ‰ๅพ…ๆฏ 500ms ๅˆฐ่พพไธ€ๆฌก็š„ๅ€ผใ€‚

    ticker := time.NewTicker(500 * time.Millisecond)
    done := make(chan bool)
    go func() {
        for {
            select {
            case <-done:
                return
            case t := <-ticker.C:
                fmt.Println("Tick at", t)
            }
        }
    }()

ๆ‰“็‚นๅ™จๅฏไปฅๅ’Œๅฎšๆ—ถๅ™จไธ€ๆ ท่ขซๅœๆญขใ€‚ ๆ‰“็‚นๅ™จไธ€ๆ—ฆๅœๆญข๏ผŒๅฐ†ไธ่ƒฝๅ†ไปŽๅฎƒ็š„้€š้“ไธญๆŽฅๆ”ถๅˆฐๅ€ผใ€‚ ๆˆ‘ไปฌๅฐ†ๅœจ่ฟ่กŒ 1600ms ๅŽๅœๆญข่ฟ™ไธชๆ‰“็‚นๅ™จใ€‚

    time.Sleep(1600 * time.Millisecond)
    ticker.Stop()
    done <- true
    fmt.Println("Ticker stopped")
}

ๅฝ“ๆˆ‘ไปฌ่ฟ่กŒ่ฟ™ไธช็จ‹ๅบๆ—ถ๏ผŒๆ‰“็‚นๅ™จไผšๅœจๆˆ‘ไปฌๅœๆญขๅฎƒๅ‰ๆ‰“็‚น 3 ๆฌกใ€‚

$ go run tickers.go
Tick at 2012-09-23 11:29:56.487625 -0700 PDT
Tick at 2012-09-23 11:29:56.988063 -0700 PDT
Tick at 2012-09-23 11:29:57.488076 -0700 PDT
Ticker stopped

ไธ‹ไธ€ไธชไพ‹ๅญ: ๅทฅไฝœๆฑ