成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 1.23中Timer無(wú)buffer的實(shí)現(xiàn)方式竟是這樣!

開(kāi)發(fā) 前端
Go 中的 Timer? 實(shí)現(xiàn)依賴于無(wú)緩沖的通道和 Go 的調(diào)度器。你可以使用 time.Timer? 或 time.After 來(lái)創(chuàng)建簡(jiǎn)單的 Timer,或者通過(guò)自定義結(jié)構(gòu)體來(lái)實(shí)現(xiàn)更復(fù)雜的 Timer 功能。?

在 Go 1.23 中,Timer 的實(shí)現(xiàn)通常是通過(guò) time 包提供的 time.Timer 類型來(lái)實(shí)現(xiàn)的。Timer 是一個(gè)用于在指定時(shí)間后觸發(fā)一次事件的計(jì)時(shí)器。Timer 的實(shí)現(xiàn)并不依賴于緩沖區(qū),而是通過(guò) Go 的調(diào)度器和通道機(jī)制來(lái)實(shí)現(xiàn)的。

Timer 的基本實(shí)現(xiàn)

Timer 的核心是一個(gè) time.Timer 結(jié)構(gòu)體,它包含一個(gè) time.Timer.C 通道,當(dāng)計(jì)時(shí)器到期時(shí),當(dāng)前時(shí)間會(huì)被發(fā)送到這個(gè)通道。

以下是一個(gè)簡(jiǎn)單的 Timer 實(shí)現(xiàn)示例:

package main

import (
"fmt"
"time"
)

func main() {
// 創(chuàng)建一個(gè) Timer,設(shè)置 2 秒后觸發(fā)
timer := time.NewTimer(2 * time.Second)

// 等待 Timer 觸發(fā)
<-timer.C
fmt.Println("Timer expired")

// 如果你想要停止 Timer,可以使用 Stop() 方法
// timer.Stop()
}

無(wú)緩沖區(qū)的實(shí)現(xiàn)

Timer 的實(shí)現(xiàn)并不依賴于緩沖區(qū),而是通過(guò) Go 的通道機(jī)制來(lái)實(shí)現(xiàn)的。Timer.C 是一個(gè)無(wú)緩沖的通道,當(dāng)計(jì)時(shí)器到期時(shí),當(dāng)前時(shí)間會(huì)被發(fā)送到這個(gè)通道。由于通道是無(wú)緩沖的,發(fā)送操作會(huì)阻塞,直到有接收者準(zhǔn)備好接收數(shù)據(jù)。

自定義無(wú)緩沖 Timer 實(shí)現(xiàn)

如果你想自己實(shí)現(xiàn)一個(gè)無(wú)緩沖的 Timer,可以使用 time.After 函數(shù),它返回一個(gè)通道,當(dāng)指定的時(shí)間到達(dá)時(shí),通道會(huì)接收到一個(gè)時(shí)間值。

package main

import (
"fmt"
"time"
)

func main() {
// 使用 time.After 創(chuàng)建一個(gè)無(wú)緩沖的 Timer
timerCh := time.After(2 * time.Second)

// 等待 Timer 觸發(fā)
<-timerCh
fmt.Println("Timer expired")
}

更復(fù)雜的 Timer 實(shí)現(xiàn)

如果你需要更復(fù)雜的 Timer 實(shí)現(xiàn),比如可以重置或停止的 Timer,可以參考以下代碼:

package main

import (
"fmt"
"time"
)

type MyTimer struct {
duration time.Duration
timer    *time.Timer
resetCh  chan time.Duration
stopCh   chan struct{}
}

func NewMyTimer(duration time.Duration) *MyTimer {
t := &MyTimer{
duration: duration,
resetCh:  make(chan time.Duration),
stopCh:   make(chan struct{}),
}
t.timer = time.NewTimer(duration)
go t.run()
return t
}

func (t *MyTimer) run() {
for {
select {
case <-t.timer.C:
fmt.Println("Timer expired")
return
case newDuration := <-t.resetCh:
if !t.timer.Stop() {
<-t.timer.C
}
t.timer.Reset(newDuration)
case <-t.stopCh:
if !t.timer.Stop() {
<-t.timer.C
}
return
}
}
}

func (t *MyTimer) Reset(duration time.Duration) {
t.resetCh <- duration
}

func (t *MyTimer) Stop() {
t.stopCh <- struct{}{}
}

func main() {
timer := NewMyTimer(2 * time.Second)

time.Sleep(1 * time.Second)
timer.Reset(3 * time.Second)

time.Sleep(2 * time.Second)
timer.Stop()
fmt.Println("Timer stopped")
}

在這個(gè)示例中,MyTimer 是一個(gè)自定義的 Timer 實(shí)現(xiàn),它支持重置和停止操作。MyTimer 使用 time.Timer 作為底層實(shí)現(xiàn),并通過(guò)通道來(lái)接收重置和停止的信號(hào)。

總結(jié)

Go 中的 Timer 實(shí)現(xiàn)依賴于無(wú)緩沖的通道和 Go 的調(diào)度器。你可以使用 time.Timer 或 time.After 來(lái)創(chuàng)建簡(jiǎn)單的 Timer,或者通過(guò)自定義結(jié)構(gòu)體來(lái)實(shí)現(xiàn)更復(fù)雜的 Timer 功能。

責(zé)任編輯:武曉燕 來(lái)源: Go語(yǔ)言圈
相關(guān)推薦

2025-05-06 05:00:00

2025-05-06 08:00:35

2025-04-07 02:21:00

2024-06-24 08:10:34

Java8表達(dá)式IDE

2024-09-02 00:30:41

Go語(yǔ)言場(chǎng)景

2019-03-08 10:08:41

網(wǎng)絡(luò)程序猿代碼

2024-09-02 10:21:21

2010-01-28 09:45:16

Android Tim

2022-06-20 08:56:25

Kafka微服務(wù)運(yùn)維

2021-04-12 09:35:23

大數(shù)據(jù)據(jù)分析數(shù)據(jù)

2024-11-01 12:57:03

2024-05-10 08:36:40

Go語(yǔ)言對(duì)象

2018-02-02 11:12:01

ANCPU

2009-07-17 16:32:34

Timer對(duì)象Swing

2022-10-24 00:48:58

Go語(yǔ)言errgroup

2019-09-11 10:14:15

蘋(píng)果iPhone價(jià)格

2024-09-09 08:56:03

2021-12-09 08:50:35

Kubernetes增強(qiáng)功能版本更新

2016-07-15 10:48:49

無(wú)服務(wù)器計(jì)算虛擬

2025-06-04 08:40:00

Go語(yǔ)言鏈表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区二区三区四区五区午夜 | 亚洲综合二区 | 亚洲一区免费视频 | 日韩看片| 亚洲 中文 欧美 日韩 在线观看 | 日韩中文字幕在线播放 | 国产精品自拍av | 午夜视频免费在线观看 | 中文字幕在线视频免费观看 | 久久久久综合 | 国产激情一区二区三区 | 亚洲精品大全 | 国产精品综合色区在线观看 | 一区二区三区小视频 | 精品国产一区二区在线 | 久草日韩| 日韩国产在线观看 | h视频免费在线观看 | 国产成人免费网站 | 国产午夜精品一区二区三区四区 | 女人夜夜春 | 色黄网站 | 亚洲高清中文字幕 | 久久高清 | 欧美精品一 | 中文字幕第一页在线 | 日本在线中文 | 久久亚洲国产精品 | 在线视频91 | 性色av网站 | 99爱在线 | 午夜激情国产 | 国产一区二区精品在线 | 国产免费一区二区三区 | 日韩精品一区二区三区视频播放 | 久久久久久国产精品免费 | 先锋av资源网 | 国产精品福利在线观看 | 伊人狠狠| 欧美日韩国产三级 | 精品成人|