今天我们来聊聊go的atomic pkg,atomic是go并发编程中最为基础的库。如果说它是go并发编程的基石一点也不为过,像标准库中大家使用率非常高的Mutex, RWMutex,WaitGroup,Once等的实现都依赖于atomic。 Atomic简介 atomic提供一系列用于实现同步功能的、底层的,原子的方法: AddT 系列将增量增加到源值上,并返回新值。 CompareAndSwapT 系列比较两个变量的值,并进行交换。 SwapT系列交换值,并返回旧值。 LoadT 系列获取值。 StoreT 系列更新值。 Value 存储器,支持Load,Store。 这些方法是原子操作,不会被CPU中断,也就说在多 …
阅读更多Factory - 工厂模式 工厂模式在Go中使用的非常广泛,比如常用于数据的读写模块。假设我们需要从某种介质中读取数据,并将更新后的结果保存到该介质中。考虑到以后可能更换为其他类型的介质,为了避免日后更换介质而大面积变更代码,我们就会用到本模式。 实现 1.定义工厂方法所创建对象的接口 假设我们的存储模块只有Read和Write两个功能,我们需要先定义存储器inteface。 1package store 2 3import "io" 4 5type Store interface { 6 Read(string) ([]byte, error) 7 Save(string, []byte) (error) 8} …
阅读更多Singleton - 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 实现 饿汉式 饿汉式单例是指在方法调用前,实例就已经创建好了。 按照用法使用,可以看到控制台输出10次单例的内存地址是一样的。 1package main 2 3import ( 4 "fmt" 5 "sync" 6 "time" 7) 8 9type ( 10 server struct { 11 port int 12 } 13) 14 15var ( 16 instance = &server{} 17) 18 19func getServerSingleton() *server …
阅读更多在写boxgo的过程中,想要生成漂亮的godoc,发现不太熟悉godoc的用法,所以就有了本篇文章,记录一下。 Go团队非常重视文档,文档对项目的可阅读性、可维护性起到重要作用,所以写好文档变得非常重要。Go团队提供了godoc工具以帮助开发者方便、准确,容易的生成项目文档。godoc解析Go源代码(包括注释),并以HTML或纯文本格式生成文档。 生成文档 提取规则: 类型、变量、常量、函数,包都可以通过在声明的前面写注释的方法生成文档(中间不要有空行)。 1// Package doc 包注释 --- good 2package doc 3 4type ( 5 // UserType 类型注释 --- good 6 …
阅读更多