菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
3353
0

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

原创
05/13 14:22
阅读数 1369

计数器实现:

我们怎么利用 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

第一次写 golang , 写的比较渣,大牛勿喷.

原文地址

发表评论

0/200
3353 点赞
0 评论
收藏
为你推荐 换一批