golang 定时器实现方法 NewTimer及NewTicker

package Timer

import (
    "fmt"
    "sync"
    "time"
)

type TimerTicket struct {
    wg sync.WaitGroup
    second int //定时执行时间
    replay int //重试次数
}

func NewTimerTicket(second int) *TimerTicket {
    return &TimerTicket{second: second}
}

func (t *TimerTicket) Run() {
    notice:="定时器开始执行\n间隔执行时间:%d秒\n执行最大次数:%d\n"
    fmt.Printf(notice, t.second, t.replay)
    defer func() {
        fmt.Println("整体定时器结束")
    }()

    t.wg.Add(2)
    go t.ticket()
    go t.timer()
    t.wg.Wait()
}

//使用ticket实现
func (t *TimerTicket) ticket() {
    replay:=t.replay
    ticket := time.NewTicker(time.Second * time.Duration(t.second))
    defer func() {
        t.wg.Done()
        fmt.Println("ticket 结束了")
    }()
Loop:
    for {
        select {
        case <-ticket.C:
            fmt.Println("开始执行 ticket", time.Now(), "replay", replay)
            replay += 1
            if replay >= 5 {
                ticket.Stop()
                break Loop
            }
        }
    }
}

//使用timer实现
func (t *TimerTicket) timer() {
    replay:=t.replay
    ticker := time.NewTimer(time.Duration(t.second) * time.Second)
    defer func() {
        fmt.Println("timer 结束了")
        t.wg.Done()
    }()
Loop:
    for {
        select {
        case <-ticker.C:
            fmt.Println("开始执行 timer", time.Now(), "replay", replay)
            replay += 1
            if replay >= 5 {
                ticker.Stop()
                break Loop
            } else {
                ticker.Reset(time.Duration(t.second) * time.Second)
            }
        }
    }

}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang是一种编程语言,具备强大的接口特性。在Golang中,接口是一种规定了对象必须遵循的行为规范。通过接口,我们可以定义一组方法的集合,任何实现了这些方法的类型都被视为实现了该接口。 接口的实现是指一个类型声明自己遵循了某个接口。实现一个接口的类型,需要实现接口中定义的所有方法实现接口的类型不需要显式声明实现了该接口,只要实现了接口中定义的方法即可。这种方式称为隐式接口实现。 接口对象是指一个接口类型的变量或参数,可以指向满足该接口的任何具体类型的对象。通过接口对象,我们可以调用接口中定义的方法,而不需要关心具体对象是哪种类型。 使用接口的好处是可以将接口作为一个统一的契约,使得不同类型的对象可以通过实现相同的接口来实现类型的替换和灵活的设计。接口可以实现代码的重用,并且松耦合,提高代码的可维护性和可测试性。 在实际应用中,我们可以先定义接口,然后根据接口的行为规范来编写具体类型的实现。接口对象可以根据需要替换为不同的具体类型对象,实现了面向接口编程的思想。 总结来说,Golang中的接口实现是指类型声明自己遵循了某个接口并实现了接口中定义的方法。接口对象是指可以指向满足该接口的任何具体类型的对象。通过接口,我们可以实现代码的灵活和重用,使得不同类型的对象可以通过实现相同的接口来进行类型的替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值