golang 利用接口实现多态统计计数器

计数器实现:

我们怎么利用 golang 接口实现多态计数器呢? 直接上代码...

statistics.go

package statistics

import (
    "sync"
)

var GpsClient = new(dataMap)

var CanClient = new(dataMap)

type statistic interface {
    IncSuccess() uint64
    IncError() uint64
    GetSuccess() uint64
    GetError() uint64
    GetCount() uint64
}

type dataMap struct {
    dataType string
    success  uint64
    error    uint64
    sync.Mutex
}

func (d *dataMap) IncSuccess() uint64 {
    d.Lock()
    defer d.Unlock()
    d.success ++
    return d.success
}

func (d *dataMap) IncError() uint64 {
    d.Lock()
    defer d.Unlock()
    d.error ++
    return d.error
}

func (d *dataMap) GetSuccess() uint64 {
    d.Lock()
    defer d.Unlock()
    return d.success
}

func (d *dataMap) GetError() uint64 {
    d.Lock()
    defer d.Unlock()
    return d.error
}

func (d *dataMap) GetCount() uint64 {
    d.Lock()
    defer d.Unlock()
    count := d.success + d.error
    return count
}

上面的代码我们可以封装成一个包,供外面使用.

main.go

package main

func main(){
    go Task()

    for {
        func() {
            fmt.Printf("can: success = %d \n",statistics.CanClient.IncSuccess())
            fmt.Printf("can: error = %d \n",statistics.CanClient.IncError())
        }()

        time.Sleep(time.Second)
        fmt.Printf("can: error = %d \n",statistics.CanClient.GetError())
        fmt.Printf("can: count = %d \n",statistics.CanClient.GetCount())
    }

}

func Task() {
    for {
        func() {
            fmt.Printf("gps:success = %d\n", statistics.GpsClient.IncSuccess())
        }()
        time.Sleep(time.Second)
        fmt.Printf("gps count = %d \n", statistics.GpsClient.GetCount())
    }
}

file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值