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())
}
}
第一次写 golang , 写的比较渣,大牛勿喷.
本作品采用《CC 协议》,转载必须注明作者和本文链接
by JeffreyBool blog :point_right: link