thinkgo

module
v1.8.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 23, 2019 License: MIT

README

Thinkgo package

Public libraries and components for glang development.

I like the language of php. I have been using php development experience for 5 years.
It has inspired me a lot. I quickly converted to golang development in 2 years.
I am very glad to be exposed to this language.
These functions and packages are used extensively in development,
so they are packaged as components or libraries for development.

Package management

golang1.11+版本,可采用go mod机制管理包,需设置goproxy
golang1.11以下版本,采用govendor机制引入第三包或直接使用vendor

About package

.
├── bitset                      bitSet位图实现,将int数放到内存中进行curd操作
├── common                      公共函数库,包含每天流动日志,Time,Lock操作,uuid生成等
├── crypto                      md5,sha1,sha1File,cbc256,ecb,aes加解密函数等
├── gnsq                        go nsq消费队列封装,主要是pub/sub模式,其他类型也支持句柄调用
├── goredis                     基于go-redis/redis封装的redis客户端操作,支持redis cluster集群模式
├── gqueue                      通过指定goroutine个数,实现task queue执行器
├── gresty                      request请求封装,支持get,post,put,patch,delete等
├── gxorm                       基于xorm/mysql封装,支持读写分离连接对象设置
├── jsontime                    fix time.Time datetime格式的json encode/decode bug
├── logger                      基于uber zap框架封装而成的高性能logger日志库
├── monitor                     用于对go程序做prometheus/metrics pprof性能监控,包含内存,cpu,请求数等
├── mysql                       gorm/mysql封装,主要基于gorm1.9.10+版本
├── mytest                      thinkgo单元测试用例
├── rediscache                  redisgo操作库封装
├── redislock                   redis+lua脚步实现redis分布式锁TryLock,Unlock
├── runner                      runner按照顺序,执行任务操作,可作为cron作业或定时任务
├── sem                         指定数量的空结构体缓存通道,实现信息号实现互斥锁
├── work                        利用无缓冲chan创建goroutine池来控制一组task的执行
├── workpool                    workerPool工作池,实现百万级的并发,一般用于持续不断的大规模作业
├── xerrors                     error错误处理拓展包,支持错误堆栈信息
├── xsort                       基于标准包sort封装的一些sort操作方法
├── yamlconf                    yaml配置文件读取,支持int,int64,float64,string,struct等类型读取
├── common/str_convert.go       字符串,数字相互转换的一些辅助函数,参考php函数实现
├── common/file.go              文件/目录相关的函数,参考php函数实现
└── common/num.go               数字相关的函数,参考php函数实现

usage

go version >= 1.13
设置goproxy代理
vim ~/.bashrc添加如下内容:
export GOPROXY=https://goproxy.io,direct
或者
export GOPROXY=https://goproxy.cn,direct
或者
export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

让bashrc生效
source ~/.bashrc

go version < 1.13
设置golang proxy
vim ~/.bashrc添加如下内容:
export GOPROXY=https://goproxy.io
或者使用 export GOPROXY=https://athens.azurefd.net
或者使用 export GOPROXY=https://mirrors.aliyun.com/goproxy/ #推荐该goproxy
让bashrc生效
source ~/.bashrc

go version < 1.11
如果是采用govendor管理包请按照如下方式进行:
    1. 下载thinkgo包
        cd $GOPATH/src
        git clone https://github.com/daheige/thinkgo.git
    2. 安装govendor go第三方包管理工具
        go get -u github.com/kardianos/govendor
    3. 切换到对应的目录进行 go install编译包

Test unit

测试mytest
$ go test -v
997: b75567dc6f88412d55576e4b09127d3f
998: c3923160f2304849734c0907083f7f65
999: 8b7a6dce56d346b567c65b3493285831
--- PASS: TestUuid (0.05s)
    uuid_test.go:13: 测试uuid
PASS
ok      github.com/daheige/thinkgo/mytest       15.841s

$ cd common
$ go test -v
2019/10/28 22:32:01 current rnd uuid a3e96dae-ca2a-d029-76c9-279b1fff1234
2019/10/28 22:32:01 current rnd uuid 4e136db3-56a8-fa67-93d7-f11f6cfd57ae
2019/10/28 22:32:01 current rnd uuid 30b83e42-2040-7ab3-9089-05d0d558bbcc
2019/10/28 22:32:01 current rnd uuid 16bc0ad1-4b17-27ee-2a2d-7b08f175295b
2019/10/28 22:32:01 current rnd uuid 979aefef-9db9-baad-920a-1742d24c2166
--- PASS: TestRndUuid (35.71s)
PASS
ok  	github.com/daheige/thinkgo/common	91.290s

License

MIT

Directories

Path Synopsis
chan实现trylock乐观锁 file 文件相关的一些辅助函数 * 采用cas实现乐观锁及TryLock Compare And Swap 简称CAS,在sync/atomic包种 这类原子操作由名称以‘CompareAndSwap’为前缀的若干个函数代表。
chan实现trylock乐观锁 file 文件相关的一些辅助函数 * 采用cas实现乐观锁及TryLock Compare And Swap 简称CAS,在sync/atomic包种 这类原子操作由名称以‘CompareAndSwap’为前缀的若干个函数代表。
* golang nsq消费队列封装,提供如下功能点 1、初始化生产者 2、初始化消费者 3、提供不同方式的消费者消费模式 4、当调用InitProducer,InitConsumer后可以直接调用nsq上底层方法 也可以使用本包提供的方法,其实也是调用nsq底层方法 5、关于优雅退出生产者和消费者,请看nsq_test.go 6、通过直接连接到nsqd进行消费,速度快,但不方便拓展,建议通过lookupd查找节点进行消费
* golang nsq消费队列封装,提供如下功能点 1、初始化生产者 2、初始化消费者 3、提供不同方式的消费者消费模式 4、当调用InitProducer,InitConsumer后可以直接调用nsq上底层方法 也可以使用本包提供的方法,其实也是调用nsq底层方法 5、关于优雅退出生产者和消费者,请看nsq_test.go 6、通过直接连接到nsqd进行消费,速度快,但不方便拓展,建议通过lookupd查找节点进行消费
package gqueue 通过指定goroutine个数,实现task queue执行器 提交任务到tash chan中,然后不断从chan中取出task执行 结合官方的sync.WaitGroup计数信号等待执行完毕 go goroutine非抢占式的,通过runtime.Gosched()让出cpu给其他goroutine
package gqueue 通过指定goroutine个数,实现task queue执行器 提交任务到tash chan中,然后不断从chan中取出task执行 结合官方的sync.WaitGroup计数信号等待执行完毕 go goroutine非抢占式的,通过runtime.Gosched()让出cpu给其他goroutine
package jsontime fix time.Time json encode/decode bug.
package jsontime fix time.Time json encode/decode bug.
* * gorm mysql封装,支持多个数据库实例化为连接池对象 * 结合了xorm思想,将每个数据库对象作为一个数据库引擎句柄 * xorm设计思想:在xorm里面,可以同时存在多个Orm引擎 * 一个Orm引擎称为Engine,一个Engine一般只对应一个数据库 * 因此,可以将gorm的每个数据库连接句柄,可以作为一个Engine来进行处理 * 容易踩坑的地方: * 对于golang的官方sql引擎,sql.open并非立即连接db,用的时候才会真正的建立连接 * 但是gorm.Open在设置完db对象后,还发送了一个Ping操作,判断连接是否连接上去 * 对于短连接的话,建议用完就调用db.Close()方法释放db连接资源 * 对于长连接服务,一般建议在main/init中关闭连接就可以 * 具体可以看gorm/main.go源码85行 * 对于gorm实现读写分离: * 可以实例化master,slaves实例,对于curd用不同的句柄就可以
* * gorm mysql封装,支持多个数据库实例化为连接池对象 * 结合了xorm思想,将每个数据库对象作为一个数据库引擎句柄 * xorm设计思想:在xorm里面,可以同时存在多个Orm引擎 * 一个Orm引擎称为Engine,一个Engine一般只对应一个数据库 * 因此,可以将gorm的每个数据库连接句柄,可以作为一个Engine来进行处理 * 容易踩坑的地方: * 对于golang的官方sql引擎,sql.open并非立即连接db,用的时候才会真正的建立连接 * 但是gorm.Open在设置完db对象后,还发送了一个Ping操作,判断连接是否连接上去 * 对于短连接的话,建议用完就调用db.Close()方法释放db连接资源 * 对于长连接服务,一般建议在main/init中关闭连接就可以 * 具体可以看gorm/main.go源码85行 * 对于gorm实现读写分离: * 可以实例化master,slaves实例,对于curd用不同的句柄就可以
*runner用于按照顺序,执行程序任务操作,可作为cron作业或定时任务 runner 包可用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以 用 runner 包来终止程序。
*runner用于按照顺序,执行程序任务操作,可作为cron作业或定时任务 runner 包可用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以 用 runner 包来终止程序。
利用无缓冲chan创建goroutine池来控制一组task的执行 1.
利用无缓冲chan创建goroutine池来控制一组task的执行 1.
package workpool 实现百万级的并发 go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁 并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降 所以需要考虑使用工作池来控制协程数量,以达到高并发的效果.
package workpool 实现百万级的并发 go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁 并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降 所以需要考虑使用工作池来控制协程数量,以达到高并发的效果.
* 自定义错误类型,一般用在api/微服务等业务逻辑中,处理错误 支持是否输出堆栈信息,可以把stack信息记录到日志文件中,方便定位问题
* 自定义错误类型,一般用在api/微服务等业务逻辑中,处理错误 支持是否输出堆栈信息,可以把stack信息记录到日志文件中,方便定位问题

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL