mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-27 04:06:03 +08:00
Merge branch 'master' of https://github.com/xxjwxc/public
This commit is contained in:
7
.vscode/launch.json
vendored
Normal file
7
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": []
|
||||||
|
}
|
@@ -5,5 +5,5 @@ golang 工具包。
|
|||||||
|
|
||||||
包括:
|
包括:
|
||||||
|
|
||||||
`文件功能`,`leveldb`,`restful风格消息包头定义`,`cache缓存`,`绘图函数`,`elastic`,`echarts`,`http`,`日志`,`nsq抽取`,`线程安全队列`,`签名`,`gorm封装`,`时间函数`,`国际化i18n`,`gocui 界面类`,`驼峰命名转换工具`,`大驼峰到网络标准json串自动转换`,`剪切板`,`微信`,`ast`,`swagger 文档支持`,`mindoc/markdown 文档支持`,`分布式全局唯一id(myglobal)`,`ssh(支持tab自动补全)`,`zap logger`,`快递鸟`
|
`文件功能`,`leveldb`,`restful风格消息包头定义`,`cache缓存`,`绘图函数`,`elastic`,`echarts`,`http`,`日志`,`nsq抽取`,`线程安全队列`,`签名`,`gorm封装`,`时间函数`,`国际化i18n`,`gocui 界面类`,`驼峰命名转换工具`,`大驼峰到网络标准json串自动转换`,`剪切板`,`微信`,`ast`,`swagger 文档支持`,`mindoc/markdown 文档支持`,`分布式全局唯一id(myglobal)`,`ssh(支持tab自动补全)`,`zap logger`,`快递鸟`,`redis`
|
||||||
......
|
......
|
||||||
|
17
go.mod
17
go.mod
@@ -7,23 +7,18 @@ require (
|
|||||||
github.com/atotto/clipboard v0.1.2
|
github.com/atotto/clipboard v0.1.2
|
||||||
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
|
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
|
||||||
github.com/bitly/go-simplejson v0.5.0
|
github.com/bitly/go-simplejson v0.5.0
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
|
||||||
github.com/btcsuite/winsvc v1.0.0
|
github.com/btcsuite/winsvc v1.0.0
|
||||||
github.com/fortytw2/leaktest v1.3.0 // indirect
|
github.com/go-redis/redis/v8 v8.4.11
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/google/go-cmp v0.4.0 // indirect
|
github.com/gomodule/redigo v1.8.3
|
||||||
github.com/gookit/color v1.2.5
|
github.com/gookit/color v1.2.5
|
||||||
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc
|
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc
|
||||||
github.com/jinzhu/gorm v1.9.12
|
github.com/jinzhu/gorm v1.9.12
|
||||||
github.com/jroimartin/gocui v0.4.0
|
github.com/jroimartin/gocui v0.4.0
|
||||||
github.com/kardianos/service v1.0.0
|
github.com/kardianos/service v1.0.0
|
||||||
github.com/kr/pretty v0.2.0 // indirect
|
|
||||||
github.com/mailru/easyjson v0.7.1 // indirect
|
|
||||||
github.com/mattn/go-runewidth v0.0.9 // indirect
|
|
||||||
github.com/muesli/cache2go v0.0.0-20200423001931-a100c5aac93f
|
github.com/muesli/cache2go v0.0.0-20200423001931-a100c5aac93f
|
||||||
github.com/nicksnyder/go-i18n/v2 v2.0.3
|
github.com/nicksnyder/go-i18n/v2 v2.0.3
|
||||||
github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1 // indirect
|
|
||||||
github.com/nsqio/go-nsq v1.0.8
|
github.com/nsqio/go-nsq v1.0.8
|
||||||
github.com/olivere/elastic v6.2.31+incompatible
|
github.com/olivere/elastic v6.2.31+incompatible
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
@@ -31,10 +26,10 @@ require (
|
|||||||
github.com/syndtr/goleveldb v1.0.0
|
github.com/syndtr/goleveldb v1.0.0
|
||||||
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285
|
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285
|
||||||
go.uber.org/zap v1.10.0
|
go.uber.org/zap v1.10.0
|
||||||
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 // indirect
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb
|
||||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f
|
golang.org/x/text v0.3.3
|
||||||
golang.org/x/text v0.3.2
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
||||||
gopkg.in/eapache/queue.v1 v1.1.0
|
gopkg.in/eapache/queue.v1 v1.1.0
|
||||||
gopkg.in/go-with/wxpay.v1 v1.3.0
|
gopkg.in/go-with/wxpay.v1 v1.3.0
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||||
|
153
go.sum
153
go.sum
@@ -1,18 +1,12 @@
|
|||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
|
|
||||||
github.com/BurntSushi/toml v0.3.0 h1:e1/Ivsx3Z0FVTV0NSOv/aVgbUWyQuzj7DDnFblkRvsY=
|
|
||||||
github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/ant0ine/go-json-rest v3.3.2+incompatible h1:nBixrkLFiDNAW0hauKDLc8yJI6XfrQumWvytE1Hk14E=
|
github.com/ant0ine/go-json-rest v3.3.2+incompatible h1:nBixrkLFiDNAW0hauKDLc8yJI6XfrQumWvytE1Hk14E=
|
||||||
github.com/ant0ine/go-json-rest v3.3.2+incompatible/go.mod h1:q6aCt0GfU6LhpBsnZ/2U+mwe+0XB5WStbmwyoPfc+sk=
|
github.com/ant0ine/go-json-rest v3.3.2+incompatible/go.mod h1:q6aCt0GfU6LhpBsnZ/2U+mwe+0XB5WStbmwyoPfc+sk=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/atotto/clipboard v0.1.2 h1:YZCtFu5Ie8qX2VmVTBnrqLSiU9XOWwqNRmdT3gIQzbY=
|
github.com/atotto/clipboard v0.1.2 h1:YZCtFu5Ie8qX2VmVTBnrqLSiU9XOWwqNRmdT3gIQzbY=
|
||||||
github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||||
@@ -26,46 +20,44 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4Yn
|
|||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk=
|
github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk=
|
||||||
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
||||||
|
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
|
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
|
||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
||||||
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
|
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
|
||||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
github.com/go-redis/redis/v8 v8.4.11 h1:t2lToev01VTrqYQcv+QFbxtGgcf64K+VUMgf9Ap6A/E=
|
||||||
github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
|
github.com/go-redis/redis/v8 v8.4.11/go.mod h1:d5yY/TlkQyYBSBHnXUmnf1OrHbyQere5JV4dLKwvXmo=
|
||||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||||
@@ -74,52 +66,49 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGw
|
|||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
|
||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
|
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
||||||
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/gomodule/redigo v1.8.3 h1:HR0kYDX2RJZvAup8CsiJwxB4dTCSC0AaUq6S4SiLwUc=
|
||||||
|
github.com/gomodule/redigo v1.8.3/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
|
||||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
|
||||||
github.com/gookit/color v1.1.7/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ=
|
|
||||||
github.com/gookit/color v1.2.5 h1:s1gzb/fg3HhkSLKyWVUsZcVBUo+R1TwEYTmmxH8gGFg=
|
github.com/gookit/color v1.2.5 h1:s1gzb/fg3HhkSLKyWVUsZcVBUo+R1TwEYTmmxH8gGFg=
|
||||||
github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg=
|
github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc h1:l+v2jwOsGum32nR8cN1MxAtvUWQCIcQGm4WHwizaAbA=
|
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc h1:l+v2jwOsGum32nR8cN1MxAtvUWQCIcQGm4WHwizaAbA=
|
||||||
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc/go.mod h1:uWhWXOR4dpfk9J8fegnMY7sP2GFXxe3PFI9Ps+TRXJs=
|
github.com/jander/golog v0.0.0-20150917071935-954a5be801fc/go.mod h1:uWhWXOR4dpfk9J8fegnMY7sP2GFXxe3PFI9Ps+TRXJs=
|
||||||
github.com/jinzhu/gorm v1.9.10/go.mod h1:Kh6hTsSGffh4ui079FHrR5Gg+5D0hgihqDcsDN2BBJY=
|
|
||||||
github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q=
|
github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q=
|
||||||
github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
|
github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
|
||||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
|
|
||||||
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
|
github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
|
||||||
github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
github.com/jroimartin/gocui v0.4.0 h1:52jnalstgmc25FmtGcWqa0tcbMEWS6RpFLsOIO+I+E8=
|
github.com/jroimartin/gocui v0.4.0 h1:52jnalstgmc25FmtGcWqa0tcbMEWS6RpFLsOIO+I+E8=
|
||||||
github.com/jroimartin/gocui v0.4.0/go.mod h1:7i7bbj99OgFHzo7kB2zPb8pXLqMBSQegY7azfqXMkyY=
|
github.com/jroimartin/gocui v0.4.0/go.mod h1:7i7bbj99OgFHzo7kB2zPb8pXLqMBSQegY7azfqXMkyY=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
github.com/kardianos/service v1.0.0 h1:HgQS3mFfOlyntWX8Oke98JcJLqt1DBcHR4kxShpYef0=
|
github.com/kardianos/service v1.0.0 h1:HgQS3mFfOlyntWX8Oke98JcJLqt1DBcHR4kxShpYef0=
|
||||||
github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo=
|
github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo=
|
||||||
@@ -133,7 +122,6 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn
|
|||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
|
|
||||||
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
||||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
@@ -141,7 +129,6 @@ github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8
|
|||||||
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
||||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
|
||||||
github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
|
github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
|
||||||
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
@@ -156,38 +143,37 @@ github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1 h1:lh3PyZvY+B9nFliS
|
|||||||
github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
|
github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
|
||||||
github.com/nsqio/go-nsq v1.0.8 h1:3L2F8tNLlwXXlp2slDUrUWSBn2O3nMh8R1/KEDFTHPk=
|
github.com/nsqio/go-nsq v1.0.8 h1:3L2F8tNLlwXXlp2slDUrUWSBn2O3nMh8R1/KEDFTHPk=
|
||||||
github.com/nsqio/go-nsq v1.0.8/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
|
github.com/nsqio/go-nsq v1.0.8/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
|
||||||
|
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
|
||||||
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/olivere/elastic v6.2.31+incompatible h1:zwJIIsgfiDBuDS3sb6MCbm/e03BPEJoGZvqevZXM254=
|
github.com/olivere/elastic v6.2.31+incompatible h1:zwJIIsgfiDBuDS3sb6MCbm/e03BPEJoGZvqevZXM254=
|
||||||
github.com/olivere/elastic v6.2.31+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
|
github.com/olivere/elastic v6.2.31+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
|
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||||
|
github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
|
||||||
|
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||||
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
|
github.com/onsi/gomega v1.10.4 h1:NiTx7EEvBzu9sFOD1zORteLSt3o8gnlvZZwSE9TnY9U=
|
||||||
|
github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
@@ -195,35 +181,31 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k
|
|||||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
|
||||||
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
|
||||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
|
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||||
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
github.com/xxjwxc/gormt v1.1.2 h1:vXIL7zK3jpGemOKv2nj6i9xQyLY6sQDlYlb0PQudw0o=
|
|
||||||
github.com/xxjwxc/gormt v1.1.2/go.mod h1:9IzphAz9GIitx1A5ci5ni+twbAVVcUiP2KQa/kHPHd8=
|
|
||||||
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285 h1:gbdax2ZvHZwe8zxu7by/HMuDUS47iHR2zmEzlgAHBMw=
|
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285 h1:gbdax2ZvHZwe8zxu7by/HMuDUS47iHR2zmEzlgAHBMw=
|
||||||
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285/go.mod h1:yJ/fY5BorWARfDDsxBU/MyQTHc5MVyNcqBQQYD6MN0k=
|
github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285/go.mod h1:yJ/fY5BorWARfDDsxBU/MyQTHc5MVyNcqBQQYD6MN0k=
|
||||||
github.com/xxjwxc/oauth2 v0.0.0-20200316140438-ddd4e3c5f272 h1:aKA2UeM+nzEanWpzZWqkD3e12FlX6bRdhcOsNhm21X0=
|
|
||||||
github.com/xxjwxc/public v0.0.0-20190915135914-aefa9155c004/go.mod h1:rgW5aGDrLzmJM8NtrtskcxerGFyvn1OK3+Ra52YeZS0=
|
|
||||||
github.com/xxjwxc/public v0.0.0-20200603115833-341beff27850/go.mod h1:fp3M+FEQrCgWD1fZ/PLwZkCTglf086OEhC9LcydAUnc=
|
github.com/xxjwxc/public v0.0.0-20200603115833-341beff27850/go.mod h1:fp3M+FEQrCgWD1fZ/PLwZkCTglf086OEhC9LcydAUnc=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
go.opentelemetry.io/otel v0.16.0 h1:uIWEbdeb4vpKPGITLsRVUS44L5oDbDUCZxn8lkxhmgw=
|
||||||
|
go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
||||||
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
||||||
@@ -231,92 +213,82 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/
|
|||||||
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM=
|
|
||||||
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10Rvpy94aQh3LT/ShoCpkHw=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
|
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y=
|
|
||||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
|
||||||
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
|
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
|
||||||
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
|
||||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c h1:97SnQk1GYRXJgvwZ8fadnxDOWfKvkNQHH3CtZntPSrM=
|
|
||||||
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
|
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
|
||||||
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/eapache/queue.v1 v1.1.0 h1:EldqoJEGtXYiVCMRo2C9mePO2UUGnYn2+qLmlQSqPdc=
|
gopkg.in/eapache/queue.v1 v1.1.0 h1:EldqoJEGtXYiVCMRo2C9mePO2UUGnYn2+qLmlQSqPdc=
|
||||||
gopkg.in/eapache/queue.v1 v1.1.0/go.mod h1:wNtmx1/O7kZSR9zNT1TTOJ7GLpm3Vn7srzlfylFbQwU=
|
gopkg.in/eapache/queue.v1 v1.1.0/go.mod h1:wNtmx1/O7kZSR9zNT1TTOJ7GLpm3Vn7srzlfylFbQwU=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
|
||||||
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
|
|
||||||
gopkg.in/go-with/wxpay.v1 v1.3.0 h1:RXVQck9qNIGkajbTMCvlRPHeewyAIItzOybTTykVdV0=
|
gopkg.in/go-with/wxpay.v1 v1.3.0 h1:RXVQck9qNIGkajbTMCvlRPHeewyAIItzOybTTykVdV0=
|
||||||
gopkg.in/go-with/wxpay.v1 v1.3.0/go.mod h1:12lWy92n19pAUSSE3BrOiEZbWRkl+9tneOd/aU/LU6g=
|
gopkg.in/go-with/wxpay.v1 v1.3.0/go.mod h1:12lWy92n19pAUSSE3BrOiEZbWRkl+9tneOd/aU/LU6g=
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
||||||
@@ -325,15 +297,16 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||||
|
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gorm.io/driver/mysql v1.0.1 h1:omJoilUzyrAp0xNoio88lGJCroGdIOen9hq2A/+3ifw=
|
gorm.io/driver/mysql v1.0.1 h1:omJoilUzyrAp0xNoio88lGJCroGdIOen9hq2A/+3ifw=
|
||||||
gorm.io/driver/mysql v1.0.1/go.mod h1:KtqSthtg55lFp3S5kUXqlGaelnWpKitn4k1xZTnoiPw=
|
gorm.io/driver/mysql v1.0.1/go.mod h1:KtqSthtg55lFp3S5kUXqlGaelnWpKitn4k1xZTnoiPw=
|
||||||
gorm.io/gorm v1.9.19/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
|
gorm.io/gorm v1.9.19/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
|
||||||
gorm.io/gorm v1.20.2 h1:bZzSEnq7NDGsrd+n3evOOedDrY5oLM5QPlCjZJUK2ro=
|
gorm.io/gorm v1.20.2 h1:bZzSEnq7NDGsrd+n3evOOedDrY5oLM5QPlCjZJUK2ro=
|
||||||
gorm.io/gorm v1.20.2/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
|
gorm.io/gorm v1.20.2/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
|
@@ -1,95 +0,0 @@
|
|||||||
package goleveldb
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"../../data/config"
|
|
||||||
"../log"
|
|
||||||
"github.com/syndtr/goleveldb/leveldb"
|
|
||||||
)
|
|
||||||
|
|
||||||
var m_db *leveldb.DB = nil
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
Clear();
|
|
||||||
creat()
|
|
||||||
}
|
|
||||||
|
|
||||||
func creat(){
|
|
||||||
if m_db == nil{
|
|
||||||
var err error
|
|
||||||
m_db, err = leveldb.OpenFile(config.GetLevelDbDir(), nil)
|
|
||||||
if err != nil {
|
|
||||||
log.Print(log.Log_Error, err.Error())
|
|
||||||
m_db.Close()
|
|
||||||
m_db = nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
清空数据
|
|
||||||
*/
|
|
||||||
func Clear() bool {
|
|
||||||
Close();
|
|
||||||
os.RemoveAll(config.GetLevelDbDir());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
关闭
|
|
||||||
*/
|
|
||||||
func Close(){
|
|
||||||
if m_db != nil{
|
|
||||||
m_db.Close()
|
|
||||||
m_db = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*获取
|
|
||||||
*/
|
|
||||||
func Get(key []byte) (data []byte, err error) {
|
|
||||||
data = nil
|
|
||||||
data, err = m_db.Get(key, nil)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
设置
|
|
||||||
*/
|
|
||||||
func Set(key, value []byte) error {
|
|
||||||
err := m_db.Put(key, value, nil)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
删除
|
|
||||||
*/
|
|
||||||
func Delete(key []byte) error {
|
|
||||||
return m_db.Delete(key, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*获取
|
|
||||||
*/
|
|
||||||
func Getkv(key string) (data []byte, err error) {
|
|
||||||
return Get([]byte(key))
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
*获取
|
|
||||||
*/
|
|
||||||
func Setkv(key string, value []byte) error {
|
|
||||||
return Set([]byte(key), value)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
删除
|
|
||||||
*/
|
|
||||||
func Deletekv(key string) error {
|
|
||||||
return Delete([]byte(key))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@@ -4,7 +4,7 @@ package message
|
|||||||
type ErrCode int
|
type ErrCode int
|
||||||
|
|
||||||
const ( //消息id定义
|
const ( //消息id定义
|
||||||
NormalMessageID ErrCode = 0 // 默认返回值
|
NormalMessageID ErrCode = 0 // normal
|
||||||
ServerMaintenance ErrCode = 1 // 服务器维护中 请稍后再试
|
ServerMaintenance ErrCode = 1 // 服务器维护中 请稍后再试
|
||||||
AccountDisabled ErrCode = 2 // 帐号被禁用
|
AccountDisabled ErrCode = 2 // 帐号被禁用
|
||||||
AppidOverdue ErrCode = 3 // appid过期
|
AppidOverdue ErrCode = 3 // appid过期
|
||||||
@@ -97,4 +97,5 @@ const ( //消息id定义
|
|||||||
NotBindError ErrCode = 1085 // 未绑定
|
NotBindError ErrCode = 1085 // 未绑定
|
||||||
BindError ErrCode = 1086 // 绑定失败
|
BindError ErrCode = 1086 // 绑定失败
|
||||||
CalError ErrCode = 1087 // 计算错误
|
CalError ErrCode = 1087 // 计算错误
|
||||||
|
TokenCheckError ErrCode = 1088 // token校验失败
|
||||||
)
|
)
|
||||||
|
@@ -98,25 +98,26 @@ func _() {
|
|||||||
_ = x[NotBindError-1085]
|
_ = x[NotBindError-1085]
|
||||||
_ = x[BindError-1086]
|
_ = x[BindError-1086]
|
||||||
_ = x[CalError-1087]
|
_ = x[CalError-1087]
|
||||||
|
_ = x[TokenCheckError-1088]
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_ErrCode_name_0 = "默认返回值服务器维护中 请稍后再试帐号被禁用appid过期"
|
_ErrCode_name_0 = "normal服务器维护中 请稍后再试帐号被禁用appid过期"
|
||||||
_ErrCode_name_1 = "未知错误token失效"
|
_ErrCode_name_1 = "未知错误token失效"
|
||||||
_ErrCode_name_2 = "成功"
|
_ErrCode_name_2 = "成功"
|
||||||
_ErrCode_name_3 = "禁止访问"
|
_ErrCode_name_3 = "禁止访问"
|
||||||
_ErrCode_name_4 = "参数无效appid参数无效密文校验失败,aa用户名不存在或密码错误键值对重复未找到无效操作授权码错误已被使用已被激活激活码被禁止使用用户已存在验证码请求过于平凡邮箱发送失败手机发送失败手机号格式有问题验证码错误用户不存在topic已经存在topic不存在bundle_id不存在topic开启处理失败topic处理类型不存在topic不能为空设备不存在"
|
_ErrCode_name_4 = "参数无效appid参数无效密文校验失败,aa用户名不存在或密码错误键值对重复未找到无效操作授权码错误已被使用已被激活激活码被禁止使用用户已存在验证码请求过于平凡邮箱发送失败手机发送失败手机号格式有问题验证码错误用户不存在topic已经存在topic不存在bundle_id不存在topic开启处理失败topic处理类型不存在topic不能为空设备不存在"
|
||||||
_ErrCode_name_5 = "状态已存在上级菜单不存在菜单不存在用户权限不存在设备ID不存在商品处理类型不存在商品不存在商品正在打折商品可支付类型不存在商品已存在"
|
_ErrCode_name_5 = "状态已存在上级菜单不存在菜单不存在用户权限不存在设备ID不存在商品处理类型不存在商品不存在商品正在打折商品可支付类型不存在商品已存在"
|
||||||
_ErrCode_name_6 = "订单不存在商品未打折会话不匹配商品已恢复原价邀请用户不存在邀请用户级数已满用户未授权申请人已存在申请人不存在订单无效微信零钱重复提现提现金额错误微信提现失败重复提交bundle已存在权限已存在权限不存在房型不存在房型已存在房间不存在房间已存在房价代码或房价名称已存在房价代码不存在文件不存在房间未启用班次已存在班次不存在系统时间与营业时间不匹配当前班次已交班支付金额错误存量不足数据存储错误数据添加错误数据更新错误数据删除错误时间错误预定信息错误不允许已过期超过最大值低于最小值已存在未绑定绑定失败计算错误"
|
_ErrCode_name_6 = "订单不存在商品未打折会话不匹配商品已恢复原价邀请用户不存在邀请用户级数已满用户未授权申请人已存在申请人不存在订单无效微信零钱重复提现提现金额错误微信提现失败重复提交bundle已存在权限已存在权限不存在房型不存在房型已存在房间不存在房间已存在房价代码或房价名称已存在房价代码不存在文件不存在房间未启用班次已存在班次不存在系统时间与营业时间不匹配当前班次已交班支付金额错误存量不足数据存储错误数据添加错误数据更新错误数据删除错误时间错误预定信息错误不允许已过期超过最大值低于最小值已存在未绑定绑定失败计算错误token校验失败"
|
||||||
_ErrCode_name_7 = "新消息心跳"
|
_ErrCode_name_7 = "新消息心跳"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ErrCode_index_0 = [...]uint8{0, 15, 49, 64, 75}
|
_ErrCode_index_0 = [...]uint8{0, 6, 40, 55, 66}
|
||||||
_ErrCode_index_1 = [...]uint8{0, 12, 23}
|
_ErrCode_index_1 = [...]uint8{0, 12, 23}
|
||||||
_ErrCode_index_4 = [...]uint16{0, 12, 29, 50, 83, 98, 107, 119, 134, 146, 158, 182, 197, 224, 242, 260, 284, 299, 314, 331, 345, 363, 386, 412, 429, 444}
|
_ErrCode_index_4 = [...]uint16{0, 12, 29, 50, 83, 98, 107, 119, 134, 146, 158, 182, 197, 224, 242, 260, 284, 299, 314, 331, 345, 363, 386, 412, 429, 444}
|
||||||
_ErrCode_index_5 = [...]uint8{0, 15, 36, 51, 72, 89, 116, 131, 149, 179, 194}
|
_ErrCode_index_5 = [...]uint8{0, 15, 36, 51, 72, 89, 116, 131, 149, 179, 194}
|
||||||
_ErrCode_index_6 = [...]uint16{0, 15, 30, 45, 66, 87, 111, 126, 144, 162, 174, 198, 216, 234, 246, 261, 276, 291, 306, 321, 336, 351, 387, 408, 423, 438, 453, 468, 504, 525, 543, 555, 573, 591, 609, 627, 639, 657, 666, 675, 690, 705, 714, 723, 735, 747}
|
_ErrCode_index_6 = [...]uint16{0, 15, 30, 45, 66, 87, 111, 126, 144, 162, 174, 198, 216, 234, 246, 261, 276, 291, 306, 321, 336, 351, 387, 408, 423, 438, 453, 468, 504, 525, 543, 555, 573, 591, 609, 627, 639, 657, 666, 675, 690, 705, 714, 723, 735, 747, 764}
|
||||||
_ErrCode_index_7 = [...]uint8{0, 9, 15}
|
_ErrCode_index_7 = [...]uint8{0, 9, 15}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -137,7 +138,7 @@ func (i ErrCode) String() string {
|
|||||||
case 1027 <= i && i <= 1036:
|
case 1027 <= i && i <= 1036:
|
||||||
i -= 1027
|
i -= 1027
|
||||||
return _ErrCode_name_5[_ErrCode_index_5[i]:_ErrCode_index_5[i+1]]
|
return _ErrCode_name_5[_ErrCode_index_5[i]:_ErrCode_index_5[i+1]]
|
||||||
case 1043 <= i && i <= 1087:
|
case 1043 <= i && i <= 1088:
|
||||||
i -= 1043
|
i -= 1043
|
||||||
return _ErrCode_name_6[_ErrCode_index_6[i]:_ErrCode_index_6[i+1]]
|
return _ErrCode_name_6[_ErrCode_index_6[i]:_ErrCode_index_6[i+1]]
|
||||||
case 2001 <= i && i <= 2002:
|
case 2001 <= i && i <= 2002:
|
||||||
|
@@ -20,7 +20,7 @@ type MessageBody struct {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
_tryRegisteryCode(NormalMessageID)
|
_tryRegisteryCode(NormalMessageID)
|
||||||
_tryRegisteryCode(NormalMessageID)
|
_tryRegisteryCode(NotFindError)
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetErrorMsg 获取错误消息 参数(int,string)
|
//GetErrorMsg 获取错误消息 参数(int,string)
|
||||||
@@ -66,6 +66,12 @@ func GetSuccessMsg(codes ...ErrCode) (msg MessageBody) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetError 获取错误信息
|
||||||
|
func GetError(code ErrCode) error {
|
||||||
|
go _tryRegisteryCode(code)
|
||||||
|
return fmt.Errorf(code.String())
|
||||||
|
}
|
||||||
|
|
||||||
//GetErrorStrMsg 获取错误消息 参数(int,string)
|
//GetErrorStrMsg 获取错误消息 参数(int,string)
|
||||||
func GetErrorStrMsg(errorCode string) (msg MessageBody) {
|
func GetErrorStrMsg(errorCode string) (msg MessageBody) {
|
||||||
// if k, ok := _MessageMap[errorCode]; ok {
|
// if k, ok := _MessageMap[errorCode]; ok {
|
||||||
|
@@ -37,9 +37,7 @@ func Marshal(name string) string {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// UnMarshal 回退网络模式
|
||||||
回退网络模式
|
|
||||||
*/
|
|
||||||
func UnMarshal(name string) string {
|
func UnMarshal(name string) string {
|
||||||
const (
|
const (
|
||||||
lower = false
|
lower = false
|
||||||
@@ -89,3 +87,22 @@ func UnMarshal(name string) string {
|
|||||||
s := strings.ToLower(buf.String())
|
s := strings.ToLower(buf.String())
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnSmallMarshal 小驼峰模式
|
||||||
|
func UnSmallMarshal(name string) string {
|
||||||
|
if name == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
value = commonInitialismsReplacer.Replace(name)
|
||||||
|
)
|
||||||
|
|
||||||
|
strArry := []rune(value)
|
||||||
|
|
||||||
|
if bool(strArry[0] >= 'A' && strArry[0] <= 'Z') {
|
||||||
|
strArry[0] = strArry[0] + 32
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(strArry)
|
||||||
|
}
|
||||||
|
@@ -19,6 +19,7 @@ func Test_cache(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(CapLowercase("IDAPIID"))
|
fmt.Println(CapLowercase("IDAPIID"))
|
||||||
|
fmt.Println(CapSmallcase("IDAPIID"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func CapLowercase(name string) string {
|
func CapLowercase(name string) string {
|
||||||
@@ -29,3 +30,12 @@ func CapLowercase(name string) string {
|
|||||||
|
|
||||||
return list[0] + name[len(list[0]):]
|
return list[0] + name[len(list[0]):]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CapSmallcase(name string) string {
|
||||||
|
list := strings.Split(UnSmallMarshal(name), "_")
|
||||||
|
if len(list) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return list[0] + name[len(list[0]):]
|
||||||
|
}
|
||||||
|
@@ -20,15 +20,18 @@ type Tweet struct {
|
|||||||
func Test_cache(t *testing.T) {
|
func Test_cache(t *testing.T) {
|
||||||
//获取
|
//获取
|
||||||
cache := NewCache("_cache")
|
cache := NewCache("_cache")
|
||||||
var tp interface{}
|
tp := Tweet{
|
||||||
tp, b := cache.Value("key")
|
User: "aaaa",
|
||||||
if b {
|
Retweets: 12,
|
||||||
tmp := tp.(Tweet)
|
}
|
||||||
|
cache.Add("key", tp, 24*time.Hour)
|
||||||
|
|
||||||
|
var tmp Tweet
|
||||||
|
err := cache.Value("key", &tmp)
|
||||||
|
if err != nil {
|
||||||
fmt.Println(tmp)
|
fmt.Println(tmp)
|
||||||
} else {
|
} else {
|
||||||
var tmp Tweet
|
fmt.Println(tmp)
|
||||||
//添加
|
|
||||||
cache.Add("key", tmp, 24*time.Hour)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@@ -7,73 +7,86 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/muesli/cache2go"
|
"github.com/muesli/cache2go"
|
||||||
|
"github.com/xxjwxc/public/serializing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// CacheIFS 缓存操作接口
|
||||||
|
type CacheIFS interface {
|
||||||
|
Destory() // 析构
|
||||||
|
Add(key interface{}, value interface{}, lifeSpan time.Duration) error // 添加一个元素
|
||||||
|
Value(key interface{}, value interface{}) error // 获取一个value
|
||||||
|
IsExist(key interface{}) bool // 判断是否存在
|
||||||
|
Delete(key interface{}) error // 删除一个
|
||||||
|
Clear() error // 清空
|
||||||
|
Close() (err error) // 关闭连接
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MyCache 内存缓存
|
// MyCache 内存缓存
|
||||||
type MyCache struct {
|
type MyCache struct {
|
||||||
cache *cache2go.CacheTable
|
cache *cache2go.CacheTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// NewCache 初始化一个cache,cachename 缓存名字
|
||||||
初始化一个cache
|
|
||||||
cachename 缓存名字
|
|
||||||
*/
|
|
||||||
func NewCache(cachename string) (mc *MyCache) {
|
func NewCache(cachename string) (mc *MyCache) {
|
||||||
mc = &MyCache{}
|
mc = &MyCache{}
|
||||||
mc.cache = cache2go.Cache(cachename)
|
mc.cache = cache2go.Cache(cachename)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Destory 添加一个缓存,lifeSpan:缓存时间,0表示永不超时
|
||||||
添加一个缓存
|
func (mc *MyCache) Destory() {
|
||||||
lifeSpan:缓存时间,0表示永不超时
|
|
||||||
*/
|
|
||||||
func (mc *MyCache) Add(key interface{}, value interface{}, lifeSpan time.Duration) *cache2go.CacheItem {
|
|
||||||
return mc.cache.Add(key, lifeSpan, value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Add 添加一个缓存,lifeSpan:缓存时间,0表示永不超时
|
||||||
查找一个cache
|
func (mc *MyCache) Add(key interface{}, value interface{}, lifeSpan time.Duration) error {
|
||||||
value 返回的值
|
mc.cache.Add(key, lifeSpan, encodeValue(value))
|
||||||
*/
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (mc *MyCache) Value(key interface{}) (value interface{}, b bool) {
|
// Value 查找一个cache
|
||||||
b = false
|
func (mc *MyCache) Value(key interface{}, value interface{}) error {
|
||||||
res, err := mc.cache.Value(key)
|
res, err := mc.cache.Value(key)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
value = res.Data()
|
bt := res.Data().([]byte)
|
||||||
b = true
|
return decodeValue(bt, value)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// IsExist 判断key是否存在
|
||||||
判断key是否存在
|
|
||||||
*/
|
|
||||||
func (mc *MyCache) IsExist(key interface{}) bool {
|
func (mc *MyCache) IsExist(key interface{}) bool {
|
||||||
return mc.cache.Exists(key)
|
return mc.cache.Exists(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Delete 删除一个cache
|
||||||
删除一个cache
|
|
||||||
*/
|
|
||||||
func (mc *MyCache) Delete(key interface{}) error {
|
func (mc *MyCache) Delete(key interface{}) error {
|
||||||
_, err := mc.cache.Delete(key)
|
_, err := mc.cache.Delete(key)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// GetCache2go 获取原始cache2go操作类
|
||||||
获取原始cache2go操作类
|
|
||||||
*/
|
|
||||||
func (mc *MyCache) GetCache2go() *cache2go.CacheTable {
|
func (mc *MyCache) GetCache2go() *cache2go.CacheTable {
|
||||||
return mc.cache
|
return mc.cache
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Clear 清空表內容
|
||||||
清空表內容
|
func (mc *MyCache) Clear() error {
|
||||||
*/
|
|
||||||
func (mc *MyCache) Clear() bool {
|
|
||||||
mc.cache.Flush()
|
mc.cache.Flush()
|
||||||
return true
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close 清空表內容
|
||||||
|
func (mc *MyCache) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeValue(value interface{}) []byte {
|
||||||
|
data, _ := serializing.Encode(value)
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
func decodeValue(in []byte, out interface{}) (err error) {
|
||||||
|
return serializing.Decode(in, out)
|
||||||
}
|
}
|
||||||
|
35
mycache1/my_test.go
Normal file
35
mycache1/my_test.go
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package mycache
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Tweet is a structure used for serializing/deserializing data in Elasticsearch.
|
||||||
|
type Tweet struct {
|
||||||
|
User string `json:"user"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Retweets int `json:"retweets"`
|
||||||
|
Image string `json:"image,omitempty"`
|
||||||
|
Created time.Time `json:"created,omitempty"`
|
||||||
|
Tags []string `json:"tags,omitempty"`
|
||||||
|
Location string `json:"location,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_cache(t *testing.T) {
|
||||||
|
//获取
|
||||||
|
cache := NewCache("_cache")
|
||||||
|
var tp interface{}
|
||||||
|
tp, b := cache.Value("key")
|
||||||
|
if b {
|
||||||
|
tmp := tp.(Tweet)
|
||||||
|
fmt.Println(tmp)
|
||||||
|
} else {
|
||||||
|
var tmp Tweet
|
||||||
|
//添加
|
||||||
|
cache.Add("key", tmp, 24*time.Hour)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
79
mycache1/mycache.go
Normal file
79
mycache1/mycache.go
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
key/value 内存缓存,支持基于超时的自动无效功能
|
||||||
|
*/
|
||||||
|
package mycache
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/muesli/cache2go"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MyCache 内存缓存
|
||||||
|
type MyCache struct {
|
||||||
|
cache *cache2go.CacheTable
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
初始化一个cache
|
||||||
|
cachename 缓存名字
|
||||||
|
*/
|
||||||
|
func NewCache(cachename string) (mc *MyCache) {
|
||||||
|
mc = &MyCache{}
|
||||||
|
mc.cache = cache2go.Cache(cachename)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
添加一个缓存
|
||||||
|
lifeSpan:缓存时间,0表示永不超时
|
||||||
|
*/
|
||||||
|
func (mc *MyCache) Add(key interface{}, value interface{}, lifeSpan time.Duration) *cache2go.CacheItem {
|
||||||
|
return mc.cache.Add(key, lifeSpan, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
查找一个cache
|
||||||
|
value 返回的值
|
||||||
|
*/
|
||||||
|
|
||||||
|
func (mc *MyCache) Value(key interface{}) (value interface{}, b bool) {
|
||||||
|
b = false
|
||||||
|
res, err := mc.cache.Value(key)
|
||||||
|
if err == nil {
|
||||||
|
value = res.Data()
|
||||||
|
b = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
判断key是否存在
|
||||||
|
*/
|
||||||
|
func (mc *MyCache) IsExist(key interface{}) bool {
|
||||||
|
return mc.cache.Exists(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
删除一个cache
|
||||||
|
*/
|
||||||
|
func (mc *MyCache) Delete(key interface{}) error {
|
||||||
|
_, err := mc.cache.Delete(key)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
获取原始cache2go操作类
|
||||||
|
*/
|
||||||
|
func (mc *MyCache) GetCache2go() *cache2go.CacheTable {
|
||||||
|
return mc.cache
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
清空表內容
|
||||||
|
*/
|
||||||
|
func (mc *MyCache) Clear() bool {
|
||||||
|
mc.cache.Flush()
|
||||||
|
return true
|
||||||
|
}
|
@@ -2,14 +2,13 @@ package mydraw
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"public/mydraw"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMytest(t *testing.T) {
|
func TestMytest(t *testing.T) {
|
||||||
pen, b := mydraw.OnGetPen("./luximr.ttf", 0, 0, 0, 255)
|
pen, b := OnGetPen("./luximr.ttf", 0, 0, 0, 255)
|
||||||
if b {
|
if b {
|
||||||
var hdc mydraw.HDC
|
var hdc HDC
|
||||||
hdc.SetBg("./src.png")
|
hdc.SetBg("./src.png")
|
||||||
pen.Dpi = 200
|
pen.Dpi = 200
|
||||||
pen.FontSize = 16
|
pen.FontSize = 16
|
||||||
|
@@ -12,21 +12,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
//OnPostJSON 发送修改密码
|
//OnPostJSON 发送修改密码
|
||||||
func OnPostJSON(url, jsonstr string) []byte {
|
func OnPostJSON(url, jsonstr string) ([]byte, error) {
|
||||||
//解析这个 URL 并确保解析没有出错。
|
//解析这个 URL 并确保解析没有出错。
|
||||||
body := bytes.NewBuffer([]byte(jsonstr))
|
body := bytes.NewBuffer([]byte(jsonstr))
|
||||||
resp, err := http.Post(url, "application/json;charset=utf-8", body)
|
resp, err := http.Post(url, "application/json;charset=utf-8", body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte("")
|
return nil, err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
body1, err1 := ioutil.ReadAll(resp.Body)
|
body1, err1 := ioutil.ReadAll(resp.Body)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
mylog.Error(err1)
|
return nil, err
|
||||||
return []byte("")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return body1
|
return body1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//OnGetJSON 发送get 请求
|
//OnGetJSON 发送get 请求
|
||||||
@@ -117,7 +116,7 @@ func OnPostForm(url string, data url.Values) (body []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//SendPost 发送POST请求
|
//SendPost 发送POST请求
|
||||||
func SendPost(requestBody interface{}, responseBody interface{}, url string) bool {
|
func SendPost(requestBody interface{}, responseBody interface{}, url string) error {
|
||||||
postData, err := json.Marshal(requestBody)
|
postData, err := json.Marshal(requestBody)
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
req, _ := http.NewRequest("POST", url, bytes.NewReader(postData))
|
req, _ := http.NewRequest("POST", url, bytes.NewReader(postData))
|
||||||
@@ -126,25 +125,22 @@ func SendPost(requestBody interface{}, responseBody interface{}, url string) boo
|
|||||||
// req.Header.Add("Authorization", authorization)
|
// req.Header.Add("Authorization", authorization)
|
||||||
resp, e := client.Do(req)
|
resp, e := client.Do(req)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
mylog.Error(e)
|
return e
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mylog.Error(e)
|
return e
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
// mylog.Debug(string(body))
|
// mylog.Debug(string(body))
|
||||||
|
|
||||||
err = json.Unmarshal(body, &responseBody)
|
err = json.Unmarshal(body, &responseBody)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mylog.Error(err)
|
return e
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//WriteJSON 像指定client 发送json 包
|
//WriteJSON 像指定client 发送json 包
|
||||||
@@ -155,5 +151,25 @@ func WriteJSON(w http.ResponseWriter, msg interface{}) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
fmt.Fprintf(w, string(js))
|
fmt.Fprint(w, string(js))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PostHeader post by head
|
||||||
|
func PostHeader(url, jsonstr string, header http.Header) ([]byte, error) {
|
||||||
|
postData := bytes.NewBuffer([]byte(jsonstr))
|
||||||
|
client := &http.Client{}
|
||||||
|
req, _ := http.NewRequest("POST", url, postData)
|
||||||
|
req.Header = header
|
||||||
|
resp, e := client.Do(req)
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
|
||||||
|
return body, nil
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,6 @@ import (
|
|||||||
|
|
||||||
func Test_kdn(t *testing.T) {
|
func Test_kdn(t *testing.T) {
|
||||||
kdn := New("1111111", "11111111-1111-1111-1111-11111111111111")
|
kdn := New("1111111", "11111111-1111-1111-1111-11111111111111")
|
||||||
result := kdn.GetLogisticsTrack("4304678557725", "YD")
|
result := kdn.GetLogisticsTrack("4304678557725", "YD", "")
|
||||||
fmt.Printf(tools.JSONDecode(result))
|
fmt.Printf(tools.JSONDecode(result))
|
||||||
}
|
}
|
||||||
|
51
myredis/def.go
Normal file
51
myredis/def.go
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gomodule/redigo/redis"
|
||||||
|
)
|
||||||
|
|
||||||
|
const keepTTL = -1
|
||||||
|
|
||||||
|
// MyRedis redis配置项
|
||||||
|
type MyRedis struct {
|
||||||
|
conf *redisOptions
|
||||||
|
// con redis.Conn
|
||||||
|
pool *redis.Pool
|
||||||
|
mtx sync.Mutex
|
||||||
|
once sync.Once
|
||||||
|
dial RedisDial
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
var _default = &MyRedis{}
|
||||||
|
|
||||||
|
// redisOption redisOption
|
||||||
|
type redisOptions struct {
|
||||||
|
timeout time.Duration
|
||||||
|
groupName string
|
||||||
|
pwd string
|
||||||
|
clientName string
|
||||||
|
addrs []string
|
||||||
|
addrIdex int
|
||||||
|
db int
|
||||||
|
readTimeout time.Duration
|
||||||
|
writeTimeout time.Duration
|
||||||
|
|
||||||
|
// redis pool 相关
|
||||||
|
maxIdle int // 池中空闲连接的最大数目。
|
||||||
|
maxActive int // 池在给定时间分配的最大连接数。当为零时,池中的连接数没有限制。
|
||||||
|
}
|
||||||
|
|
||||||
|
// Option 功能选项
|
||||||
|
type Option interface {
|
||||||
|
apply(*redisOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
type optionFunc func(*redisOptions)
|
||||||
|
|
||||||
|
func (f optionFunc) apply(o *redisOptions) {
|
||||||
|
f(o)
|
||||||
|
}
|
14
myredis/log.go
Normal file
14
myredis/log.go
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type logger struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *logger) Printf(ctx context.Context, format string, v ...interface{}) {
|
||||||
|
mylog.Infof(format, v...)
|
||||||
|
}
|
96
myredis/myredis.go
Normal file
96
myredis/myredis.go
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gomodule/redigo/redis"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RedisDial 操作
|
||||||
|
type RedisDial interface {
|
||||||
|
Destory() // 析构
|
||||||
|
GetRedisClient() redis.Conn // 获取一个原始的redis连接
|
||||||
|
Ping() bool // 判断是否能ping通
|
||||||
|
Add(key interface{}, value interface{}, lifeSpan time.Duration) error // 添加一个元素
|
||||||
|
Value(key interface{}, value interface{}) error // 获取一个value
|
||||||
|
IsExist(key interface{}) bool // 判断是否存在
|
||||||
|
Delete(key interface{}) error // 删除一个
|
||||||
|
Clear() error // 清空
|
||||||
|
GetKeyS(key interface{}) ([]string, error) // 查询所有key
|
||||||
|
Close() (err error) // 关闭连接
|
||||||
|
}
|
||||||
|
|
||||||
|
// DefaultConf ...
|
||||||
|
func DefaultConf() *MyRedis {
|
||||||
|
if _default.conf == nil {
|
||||||
|
InitDefaultRedis()
|
||||||
|
}
|
||||||
|
return _default
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitDefaultRedis 初始化(必须要优先调用一次)
|
||||||
|
func InitDefaultRedis(ops ...Option) *MyRedis {
|
||||||
|
var tmp = &redisOptions{}
|
||||||
|
for _, o := range ops {
|
||||||
|
o.apply(tmp)
|
||||||
|
}
|
||||||
|
if len(tmp.addrs) == 0 {
|
||||||
|
tmp.addrs = append(tmp.addrs, ":6379")
|
||||||
|
}
|
||||||
|
|
||||||
|
_default.mtx.Lock()
|
||||||
|
defer _default.mtx.Unlock()
|
||||||
|
_default.conf = tmp
|
||||||
|
return _default
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitRedis 初始化(必须要优先调用一次)
|
||||||
|
func InitRedis(ops ...Option) *MyRedis {
|
||||||
|
var cnf = &MyRedis{}
|
||||||
|
var tmp = &redisOptions{}
|
||||||
|
for _, o := range ops {
|
||||||
|
o.apply(tmp)
|
||||||
|
}
|
||||||
|
if len(tmp.addrs) == 0 {
|
||||||
|
tmp.addrs = append(tmp.addrs, ":6379")
|
||||||
|
}
|
||||||
|
|
||||||
|
cnf.mtx.Lock()
|
||||||
|
defer cnf.mtx.Unlock()
|
||||||
|
cnf.conf = tmp
|
||||||
|
return cnf
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRedis 初始化一个(InitDefaultRedis(需要优先调用)) groupName:分组名
|
||||||
|
func NewRedis(con *MyRedis) (dial RedisDial, err error) {
|
||||||
|
if con == nil {
|
||||||
|
con = DefaultConf()
|
||||||
|
}
|
||||||
|
con.once.Do(func() { // 创建连接
|
||||||
|
ReDialRedis(con)
|
||||||
|
})
|
||||||
|
|
||||||
|
return con.dial, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReDialRedis 重新连接redis
|
||||||
|
func ReDialRedis(con *MyRedis) {
|
||||||
|
if con.dial != nil { // 清理,关闭连接
|
||||||
|
con.dial.Destory()
|
||||||
|
}
|
||||||
|
|
||||||
|
con.mtx.Lock()
|
||||||
|
defer con.mtx.Unlock()
|
||||||
|
|
||||||
|
if con.conf.maxIdle > 0 { // 创建连接池
|
||||||
|
con.dial = &redisConPool{
|
||||||
|
base: base{MyRedis: con},
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建单个连接
|
||||||
|
con.dial = &redisConOlny{
|
||||||
|
base: base{MyRedis: con},
|
||||||
|
}
|
||||||
|
}
|
45
myredis/myredis_test.go
Normal file
45
myredis/myredis_test.go
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_cache(t *testing.T) {
|
||||||
|
conf := InitRedis(WithAddr("192.155.1.150:6379"), WithClientName(""),
|
||||||
|
WithPool(2, 2),
|
||||||
|
WithTimeout(10*time.Second), WithReadTimeout(10*time.Second), WithWriteTimeout(10*time.Second),
|
||||||
|
WithPwd("Niren1015"), WithGroupName("gggg"), WithDB(0))
|
||||||
|
//获取
|
||||||
|
res, err := NewRedis(conf)
|
||||||
|
|
||||||
|
fmt.Println(err)
|
||||||
|
aaa := "ccccc"
|
||||||
|
res.Add("aaaa", aaa, 20*time.Second)
|
||||||
|
res.Close()
|
||||||
|
res.Add("bbbb", aaa, 0)
|
||||||
|
res.Close()
|
||||||
|
fmt.Println(res.Ping())
|
||||||
|
|
||||||
|
fmt.Print(res.IsExist("aaaa"))
|
||||||
|
fmt.Print(res.GetKeyS("*"))
|
||||||
|
fmt.Println(res.Clear())
|
||||||
|
|
||||||
|
fmt.Println(res.Delete("aaaa"))
|
||||||
|
|
||||||
|
var tt string
|
||||||
|
res.Value("bbbb", &tt)
|
||||||
|
|
||||||
|
var ww []int32
|
||||||
|
res.Add("cccc", []int32{1, 2, 3, 4}, 0)
|
||||||
|
res.Value("cccc", &ww)
|
||||||
|
|
||||||
|
// time.Sleep(20 * time.Second)
|
||||||
|
// fmt.Print(res.IsExist("aaaa"))
|
||||||
|
|
||||||
|
// fmt.Println(res.Clear())
|
||||||
|
|
||||||
|
// fmt.Println(tt)
|
||||||
|
return
|
||||||
|
}
|
69
myredis/option.go
Normal file
69
myredis/option.go
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// WithTimeout 设置过期时间
|
||||||
|
func WithTimeout(timeout time.Duration) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.timeout = timeout
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithGroupName 分组名
|
||||||
|
func WithGroupName(groupName string) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.groupName = groupName
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPwd 密码
|
||||||
|
func WithPwd(pwd string) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.pwd = pwd
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAddr 密码
|
||||||
|
func WithAddr(addr ...string) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.addrs = append(o.addrs, addr...)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDB 数据库地址(index)
|
||||||
|
func WithDB(db int) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.db = db
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithReadTimeout 设置读过期时间
|
||||||
|
func WithReadTimeout(timeout time.Duration) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.readTimeout = timeout
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithWriteTimeout 设置写过期时间
|
||||||
|
func WithWriteTimeout(timeout time.Duration) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.writeTimeout = timeout
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPool 连接池配置
|
||||||
|
func WithPool(maxIdle, maxActive int) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.maxIdle = maxIdle
|
||||||
|
o.maxActive = maxActive
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithClientName 指定Redis服务器连接使用的客户端名称
|
||||||
|
func WithClientName(name string) Option {
|
||||||
|
return optionFunc(func(o *redisOptions) {
|
||||||
|
o.clientName = name
|
||||||
|
})
|
||||||
|
}
|
169
myredis/pool.go
Normal file
169
myredis/pool.go
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gomodule/redigo/redis"
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type redisConPool struct {
|
||||||
|
base
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *redisConPool) Destory() {
|
||||||
|
mc.mtx.Lock()
|
||||||
|
defer mc.mtx.Unlock()
|
||||||
|
|
||||||
|
if mc.pool != nil {
|
||||||
|
mc.pool.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *redisConPool) GetRedisClient() redis.Conn {
|
||||||
|
mc.mtx.Lock()
|
||||||
|
if mc.pool == nil { // 创建连接
|
||||||
|
mc.pool = &redis.Pool{
|
||||||
|
MaxIdle: mc.conf.maxIdle,
|
||||||
|
MaxActive: mc.conf.maxActive,
|
||||||
|
Dial: func() (redis.Conn, error) {
|
||||||
|
return mc.Dial()
|
||||||
|
},
|
||||||
|
TestOnBorrow: func(c redis.Conn, t time.Time) error {
|
||||||
|
_, err := c.Do("PING")
|
||||||
|
if err != nil {
|
||||||
|
mylog.Errorf("ping redis error: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mc.mtx.Unlock()
|
||||||
|
|
||||||
|
con := mc.pool.Get()
|
||||||
|
|
||||||
|
mylog.Info(mc.pool.ActiveCount())
|
||||||
|
return con
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ping 判断是否能ping通
|
||||||
|
func (mc *redisConPool) Ping() bool {
|
||||||
|
return mc.ping(mc.GetRedisClient())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加一个缓存 lifeSpan:缓存时间,0表示永不超时
|
||||||
|
func (mc *redisConPool) Add(key interface{}, value interface{}, lifeSpan time.Duration) error {
|
||||||
|
var args []interface{}
|
||||||
|
args = append(args, mc.getKey(key), mc.encodeValue(value))
|
||||||
|
if lifeSpan > 0 {
|
||||||
|
if usePrecise(lifeSpan) {
|
||||||
|
args = append(args, "px", formatMs(lifeSpan))
|
||||||
|
} else {
|
||||||
|
args = append(args, "ex", formatSec(lifeSpan))
|
||||||
|
}
|
||||||
|
} else if lifeSpan == keepTTL {
|
||||||
|
args = append(args, "keepttl")
|
||||||
|
}
|
||||||
|
|
||||||
|
con := mc.GetRedisClient()
|
||||||
|
defer con.Close()
|
||||||
|
repy, err := mc.Do(con, "SET", args...)
|
||||||
|
mylog.Info(redis.String(repy, err))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value 查找一个cache
|
||||||
|
func (mc *redisConPool) Value(key interface{}, value interface{}) (err error) {
|
||||||
|
con := mc.GetRedisClient()
|
||||||
|
defer con.Close()
|
||||||
|
repy, err := mc.Do(con, "GET", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return mc.decodeValue(repy, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExist 判断key是否存在
|
||||||
|
func (mc *redisConPool) IsExist(key interface{}) bool {
|
||||||
|
con := mc.GetRedisClient()
|
||||||
|
defer con.Close()
|
||||||
|
repy, err := mc.Do(con, "EXISTS", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
exist, err := redis.Bool(repy, err) // 转化bool格式
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除一个cache
|
||||||
|
func (mc *redisConPool) Delete(key interface{}) error {
|
||||||
|
con := mc.GetRedisClient()
|
||||||
|
defer con.Close()
|
||||||
|
_, err := mc.Do(con, "del", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear 清空表內容
|
||||||
|
func (mc *redisConPool) Clear() error {
|
||||||
|
out, err := mc.GetKeyS("*")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range out {
|
||||||
|
err = mc.Delete(v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKeyS 查询所有key
|
||||||
|
func (mc *redisConPool) GetKeyS(key interface{}) ([]string, error) {
|
||||||
|
con := mc.GetRedisClient()
|
||||||
|
defer con.Close()
|
||||||
|
var keys []string
|
||||||
|
repy, err := mc.Do(con, "keys", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return keys, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t := repy.(type) {
|
||||||
|
case []interface{}:
|
||||||
|
for _, v := range t {
|
||||||
|
out, err := redis.String(v, nil)
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
keys = append(keys, mc.fixKeyGroupName(out))
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return keys, fmt.Errorf("decodeValue err in type not find:%v", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close 关闭一个连接
|
||||||
|
func (mc *redisConPool) Close() (err error) {
|
||||||
|
return nil
|
||||||
|
}
|
379
myredis/rediscon.go
Normal file
379
myredis/rediscon.go
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gomodule/redigo/redis"
|
||||||
|
"github.com/xxjwxc/public/dev"
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
"github.com/xxjwxc/public/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
type base struct {
|
||||||
|
*MyRedis
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) getCtx() context.Context {
|
||||||
|
return context.Background()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) getKey(key interface{}) string {
|
||||||
|
tmp := ""
|
||||||
|
if len(mc.conf.groupName) > 0 {
|
||||||
|
tmp = fmt.Sprintf("%v:", mc.conf.groupName)
|
||||||
|
}
|
||||||
|
switch t := key.(type) {
|
||||||
|
case []byte:
|
||||||
|
return fmt.Sprintf("%v%v", tmp, string(t))
|
||||||
|
case string:
|
||||||
|
return fmt.Sprintf("%v%v", tmp, t)
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%v%v", tmp, tools.JSONDecode(key))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) encodeValue(value interface{}) interface{} {
|
||||||
|
switch t := value.(type) {
|
||||||
|
case int32, byte, string, bool, int, uint, int8, int16, int64, uint16, uint32, uint64, float32, float64: // 基础类型
|
||||||
|
return t
|
||||||
|
default:
|
||||||
|
return tools.JSONDecode(value)
|
||||||
|
// data, _ := serializing.Encode(value)
|
||||||
|
// return data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) decodeValue(in, out interface{}) (err error) {
|
||||||
|
if in == nil {
|
||||||
|
return fmt.Errorf("not fond")
|
||||||
|
}
|
||||||
|
|
||||||
|
var reply string
|
||||||
|
switch t := in.(type) {
|
||||||
|
case []byte:
|
||||||
|
reply = string(t)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("decodeValue err in type not find:%v", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch o := out.(type) {
|
||||||
|
case *string: // string类型
|
||||||
|
*o = reply
|
||||||
|
return nil
|
||||||
|
case *int32:
|
||||||
|
i64, err := strconv.ParseInt(reply, 10, 0)
|
||||||
|
*o = int32(i64)
|
||||||
|
return err
|
||||||
|
case *bool:
|
||||||
|
b, err := strconv.ParseBool(string(reply))
|
||||||
|
*o = b
|
||||||
|
return err
|
||||||
|
case *int:
|
||||||
|
i64, err := strconv.ParseInt(reply, 10, 0)
|
||||||
|
*o = int(i64)
|
||||||
|
return err
|
||||||
|
case *int8:
|
||||||
|
i64, err := strconv.ParseInt(reply, 10, 0)
|
||||||
|
*o = int8(i64)
|
||||||
|
return err
|
||||||
|
case *int16:
|
||||||
|
i64, err := strconv.ParseInt(reply, 10, 0)
|
||||||
|
*o = int16(i64)
|
||||||
|
return err
|
||||||
|
case *int64:
|
||||||
|
i64, err := strconv.ParseInt(string(reply), 10, 64)
|
||||||
|
*o = int64(i64)
|
||||||
|
return err
|
||||||
|
case *uint:
|
||||||
|
i64, err := strconv.ParseUint(reply, 10, 0)
|
||||||
|
*o = uint(i64)
|
||||||
|
return err
|
||||||
|
case *uint8:
|
||||||
|
i64, err := strconv.ParseUint(reply, 10, 0)
|
||||||
|
*o = uint8(i64)
|
||||||
|
return err
|
||||||
|
case *uint16:
|
||||||
|
i64, err := strconv.ParseUint(reply, 10, 0)
|
||||||
|
*o = uint16(i64)
|
||||||
|
return err
|
||||||
|
case *uint32:
|
||||||
|
i64, err := strconv.ParseInt(string(reply), 10, 0)
|
||||||
|
*o = uint32(i64)
|
||||||
|
return err
|
||||||
|
case *uint64:
|
||||||
|
i64, err := strconv.ParseUint(reply, 10, 64)
|
||||||
|
*o = uint64(i64)
|
||||||
|
return err
|
||||||
|
case *float32:
|
||||||
|
f64, err := strconv.ParseFloat(string(reply), 32)
|
||||||
|
*o = float32(f64)
|
||||||
|
return err
|
||||||
|
case *float64: // 基础类型
|
||||||
|
f64, err := strconv.ParseFloat(string(reply), 64)
|
||||||
|
*o = float64(f64)
|
||||||
|
return err
|
||||||
|
default:
|
||||||
|
tools.JSONEncode(reply, out) // 复杂类型
|
||||||
|
return nil
|
||||||
|
//return serializing.Decode(t, out)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// return fmt.Errorf("decodeValue err not match:%v %v", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) ping(con redis.Conn) bool {
|
||||||
|
if con == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := con.Do("PING")
|
||||||
|
if err != nil {
|
||||||
|
mylog.Errorf("ping redis error: %s", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dial 获取一个链接
|
||||||
|
func (mc *base) build() (con redis.Conn, err error) {
|
||||||
|
err = fmt.Errorf("not fond ")
|
||||||
|
index := mc.conf.addrIdex
|
||||||
|
len := len(mc.conf.addrs)
|
||||||
|
b := false
|
||||||
|
for i := 0; i < len; i++ {
|
||||||
|
index = (mc.conf.addrIdex + i) % len
|
||||||
|
con, err = redis.Dial("tcp", mc.conf.addrs[index], redis.DialClientName(mc.conf.clientName),
|
||||||
|
redis.DialConnectTimeout(mc.conf.timeout), redis.DialDatabase(mc.conf.db),
|
||||||
|
redis.DialPassword(mc.conf.pwd), redis.DialReadTimeout(mc.conf.readTimeout), redis.DialWriteTimeout(mc.conf.writeTimeout),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
if mc.ping(con) {
|
||||||
|
b = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if b {
|
||||||
|
mc.conf.addrIdex = (index + 1) % len
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dial 获取一个链接
|
||||||
|
func (mc *base) Dial() (redis.Conn, error) {
|
||||||
|
mc.mtx.Lock()
|
||||||
|
defer mc.mtx.Unlock()
|
||||||
|
return mc.build() // 创建连接
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) Do(con redis.Conn, commandName string, args ...interface{}) (reply interface{}, err error) {
|
||||||
|
if dev.IsDev() {
|
||||||
|
cmd := commandName
|
||||||
|
for _, v := range args {
|
||||||
|
cmd += fmt.Sprintf(" %v", v)
|
||||||
|
if len(cmd) > 100 {
|
||||||
|
cmd = cmd[:100]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mylog.Infof("redis req :%v \n", cmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
if con != nil {
|
||||||
|
reply, err = con.Do(commandName, args...)
|
||||||
|
// show log
|
||||||
|
if dev.IsDev() {
|
||||||
|
tmp := ""
|
||||||
|
switch reply := reply.(type) {
|
||||||
|
case []byte:
|
||||||
|
tmp = string(reply)
|
||||||
|
case string:
|
||||||
|
tmp = reply
|
||||||
|
case int64:
|
||||||
|
tmp = fmt.Sprintf("%v", reply)
|
||||||
|
}
|
||||||
|
if len(tmp) > 100 {
|
||||||
|
tmp = tmp[:100]
|
||||||
|
}
|
||||||
|
mylog.Infof("redis resp:%v,%v \n", tmp, err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("con is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *base) fixKeyGroupName(key string) string {
|
||||||
|
tmp := ""
|
||||||
|
if len(mc.conf.groupName) > 0 {
|
||||||
|
tmp = fmt.Sprintf("%v:", mc.conf.groupName)
|
||||||
|
}
|
||||||
|
return strings.TrimPrefix(key, tmp)
|
||||||
|
}
|
||||||
|
|
||||||
|
type redisConOlny struct {
|
||||||
|
base
|
||||||
|
con redis.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destory 析构
|
||||||
|
func (mc *redisConOlny) Destory() {
|
||||||
|
mc.mtx.Lock()
|
||||||
|
defer mc.mtx.Unlock()
|
||||||
|
|
||||||
|
if mc.con != nil {
|
||||||
|
err := mc.con.Close()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
mc.con = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRedisClient ...
|
||||||
|
func (mc *redisConOlny) GetRedisClient() redis.Conn {
|
||||||
|
if mc.con == nil {
|
||||||
|
con, _ := mc.Dial()
|
||||||
|
mc.con = con
|
||||||
|
}
|
||||||
|
return mc.con
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ping 判断是否能ping通
|
||||||
|
func (mc *redisConOlny) Ping() bool {
|
||||||
|
return mc.ping(mc.GetRedisClient())
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否能ping通
|
||||||
|
// Add 添加一个缓存 lifeSpan:缓存时间,0表示永不超时
|
||||||
|
func (mc *redisConOlny) Add(key interface{}, value interface{}, lifeSpan time.Duration) error {
|
||||||
|
var args []interface{}
|
||||||
|
args = append(args, mc.getKey(key), mc.encodeValue(value))
|
||||||
|
if lifeSpan > 0 {
|
||||||
|
if usePrecise(lifeSpan) {
|
||||||
|
args = append(args, "px", formatMs(lifeSpan))
|
||||||
|
} else {
|
||||||
|
args = append(args, "ex", formatSec(lifeSpan))
|
||||||
|
}
|
||||||
|
} else if lifeSpan == keepTTL {
|
||||||
|
args = append(args, "keepttl")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := mc.Do(mc.GetRedisClient(), "SET", args...)
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value 查找一个cache
|
||||||
|
func (mc *redisConOlny) Value(key interface{}, value interface{}) (err error) {
|
||||||
|
repy, err := mc.Do(mc.GetRedisClient(), "GET", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return mc.decodeValue(repy, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExist 判断key是否存在
|
||||||
|
func (mc *redisConOlny) IsExist(key interface{}) bool {
|
||||||
|
repy, err := mc.Do(mc.GetRedisClient(), "EXISTS", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
exist, err := redis.Bool(repy, err) // 转化bool格式
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除一个cache
|
||||||
|
func (mc *redisConOlny) Delete(key interface{}) error {
|
||||||
|
_, err := mc.Do(mc.GetRedisClient(), "del", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear 清空表內容
|
||||||
|
func (mc *redisConOlny) Clear() error {
|
||||||
|
out, err := mc.GetKeyS("*")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range out {
|
||||||
|
err = mc.Delete(v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKeyS 查询所有key
|
||||||
|
func (mc *redisConOlny) GetKeyS(key interface{}) ([]string, error) {
|
||||||
|
var keys []string
|
||||||
|
repy, err := mc.Do(mc.GetRedisClient(), "keys", mc.getKey(key))
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return keys, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t := repy.(type) {
|
||||||
|
case []interface{}:
|
||||||
|
for _, v := range t {
|
||||||
|
out, err := redis.String(v, nil)
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
keys = append(keys, mc.fixKeyGroupName(out))
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return keys, fmt.Errorf("decodeValue err in type not find:%v", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close 关闭一个连接
|
||||||
|
func (mc *redisConOlny) Close() (err error) {
|
||||||
|
mc.mtx.Lock()
|
||||||
|
defer mc.mtx.Unlock()
|
||||||
|
if mc.con != nil {
|
||||||
|
err = mc.con.Close()
|
||||||
|
mc.con = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func usePrecise(dur time.Duration) bool {
|
||||||
|
return dur < time.Second || dur%time.Second != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatMs(dur time.Duration) int64 {
|
||||||
|
if dur > 0 && dur < time.Millisecond {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return int64(dur / time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatSec(dur time.Duration) int64 {
|
||||||
|
if dur > 0 && dur < time.Second {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return int64(dur / time.Second)
|
||||||
|
}
|
14
myredis1/log.go
Normal file
14
myredis1/log.go
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type logger struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *logger) Printf(ctx context.Context, format string, v ...interface{}) {
|
||||||
|
mylog.Infof(format, v...)
|
||||||
|
}
|
32
myredis1/my_test.go
Normal file
32
myredis1/my_test.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_cache(t *testing.T) {
|
||||||
|
//获取
|
||||||
|
res, _ := NewRedis([]string{"192.155.1.150:6379"}, "Niren1015", "gggg", 0)
|
||||||
|
|
||||||
|
fmt.Println(res.Clear())
|
||||||
|
|
||||||
|
aaa := "ccccc"
|
||||||
|
res.Add("aaaa", aaa, 20*time.Second)
|
||||||
|
res.Add("bbbb", aaa, 0)
|
||||||
|
fmt.Println(res.Delete("aaaa"))
|
||||||
|
|
||||||
|
fmt.Print(res.IsExist("aaaa"))
|
||||||
|
|
||||||
|
var tt string
|
||||||
|
res.Value("aaaa", &tt)
|
||||||
|
|
||||||
|
time.Sleep(20 * time.Second)
|
||||||
|
fmt.Print(res.IsExist("aaaa"))
|
||||||
|
|
||||||
|
fmt.Println(res.Clear())
|
||||||
|
|
||||||
|
fmt.Println(tt)
|
||||||
|
return
|
||||||
|
}
|
156
myredis1/myredis.go
Normal file
156
myredis1/myredis.go
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
package myredis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
redis "github.com/go-redis/redis/v8"
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
"github.com/xxjwxc/public/tools"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MyRedis 分布式缓存
|
||||||
|
type MyRedis struct {
|
||||||
|
redis.Cmdable
|
||||||
|
timeout time.Duration
|
||||||
|
groupName string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRedis 初始化一个cache cachename 缓存名字
|
||||||
|
func NewRedis(addrs []string, pwd, groupName string, timeout time.Duration) (mc *MyRedis, err error) {
|
||||||
|
redis.SetLogger(&logger{})
|
||||||
|
if len(addrs) <= 1 {
|
||||||
|
mc = &MyRedis{
|
||||||
|
Cmdable: redis.NewClient(&redis.Options{
|
||||||
|
Addr: addrs[0],
|
||||||
|
DialTimeout: timeout,
|
||||||
|
Password: pwd, // no password set
|
||||||
|
// DB: 0, // use default DB
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mc = &MyRedis{
|
||||||
|
Cmdable: redis.NewClusterClient(&redis.ClusterOptions{
|
||||||
|
Addrs: addrs,
|
||||||
|
Password: pwd, // no password set
|
||||||
|
DialTimeout: timeout,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mc.timeout = timeout
|
||||||
|
mc.groupName = groupName
|
||||||
|
|
||||||
|
err = mc.Ping(mc.getCtx()).Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *MyRedis) getCtx() context.Context {
|
||||||
|
return context.Background()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mc *MyRedis) getKey(key interface{}) string {
|
||||||
|
if len(mc.groupName) > 0 {
|
||||||
|
return fmt.Sprintf("%v:%v", mc.groupName, tools.JSONDecode(key))
|
||||||
|
}
|
||||||
|
return tools.JSONDecode(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add 添加一个缓存 lifeSpan:缓存时间,0表示永不超时
|
||||||
|
func (mc *MyRedis) Add(key interface{}, value interface{}, lifeSpan time.Duration) (err error) {
|
||||||
|
set := mc.Set(mc.getCtx(), mc.getKey(key), tools.JSONDecode(value), lifeSpan)
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err = set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value 查找一个cache
|
||||||
|
func (mc *MyRedis) Value(key interface{}, value interface{}) (err error) {
|
||||||
|
set := mc.Get(mc.getCtx(), mc.getKey(key))
|
||||||
|
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err = set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tools.JSONEncode(set.Val(), value)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExist 判断key是否存在
|
||||||
|
func (mc *MyRedis) IsExist(key interface{}) bool {
|
||||||
|
set := mc.Exists(mc.getCtx(), mc.getKey(key))
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err := set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return set.Val() == 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete 删除一个cache
|
||||||
|
func (mc *MyRedis) Delete(key interface{}) error {
|
||||||
|
set := mc.Del(mc.getCtx(), mc.getKey(key))
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err := set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRedisClient 获取原始cache2go操作类
|
||||||
|
func (mc *MyRedis) GetRedisClient() redis.Cmdable {
|
||||||
|
return mc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear 清空表內容
|
||||||
|
func (mc *MyRedis) Clear() error {
|
||||||
|
key := "*"
|
||||||
|
if len(mc.groupName) > 0 {
|
||||||
|
key = fmt.Sprintf("%v:*", mc.groupName)
|
||||||
|
}
|
||||||
|
|
||||||
|
set := mc.Pipeline().Do(mc.getCtx(), "KEYS", key)
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err := set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return mc.delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete 删除一个cache
|
||||||
|
func (mc *MyRedis) delete(key string) error {
|
||||||
|
set := mc.Del(mc.getCtx(), key)
|
||||||
|
mylog.Info(set.Val())
|
||||||
|
// redis.Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
// redis.Expect(set.Val()).To(Equal("OK"))
|
||||||
|
err := set.Err()
|
||||||
|
if err != nil {
|
||||||
|
mylog.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
@@ -21,5 +21,5 @@ func TestMain(t *testing.T) {
|
|||||||
|
|
||||||
// time.Sleep(1 * time.Second)
|
// time.Sleep(1 * time.Second)
|
||||||
|
|
||||||
c.Terminal() // 进入
|
c.EnterTerminal() // 进入
|
||||||
}
|
}
|
||||||
|
@@ -6,12 +6,12 @@ package mywebsocket
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"public/mycache"
|
|
||||||
"public/mylog"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ant0ine/go-json-rest/rest"
|
"github.com/ant0ine/go-json-rest/rest"
|
||||||
|
"github.com/xxjwxc/public/mycache"
|
||||||
|
"github.com/xxjwxc/public/mylog"
|
||||||
|
|
||||||
"golang.org/x/net/websocket"
|
"golang.org/x/net/websocket"
|
||||||
)
|
)
|
||||||
|
@@ -13,4 +13,3 @@ type Sign_client_tbl struct {
|
|||||||
Expire_time time.Time //超时时间
|
Expire_time time.Time //超时时间
|
||||||
Strict_verify int //是否强制验证:0:用户自定义,1:强制
|
Strict_verify int //是否强制验证:0:用户自定义,1:强制
|
||||||
}
|
}
|
||||||
z
|
|
118
sign/sign.go
118
sign/sign.go
@@ -2,13 +2,6 @@ package sign
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/xxjwxc/oauth2/oauth2Client/src/data/config"
|
|
||||||
"github.com/xxjwxc/public/mycache"
|
|
||||||
"github.com/xxjwxc/public/mylog"
|
|
||||||
"github.com/xxjwxc/public/mysqldb"
|
|
||||||
"github.com/xxjwxc/public/tools"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -16,44 +9,44 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func OnInit() {
|
func OnInit() {
|
||||||
str_db := config.GetDbUrl()
|
// str_db := config.GetDbUrl()
|
||||||
if len(str_db) > 0 {
|
// if len(str_db) > 0 {
|
||||||
var db mysqldb.MySqlDB
|
// var db mysqldb.MySqlDB
|
||||||
defer db.OnDestoryDB()
|
// defer db.OnDestoryDB()
|
||||||
orm := db.OnGetDBOrm(str_db)
|
// orm := db.OnGetDBOrm(str_db)
|
||||||
if orm.HasTable(&Sign_client_tbl{}) { //有这个表
|
// if orm.HasTable(&Sign_client_tbl{}) { //有这个表
|
||||||
now := time.Now()
|
// now := time.Now()
|
||||||
var list []Sign_client_tbl
|
// var list []Sign_client_tbl
|
||||||
err := orm.Where("expire_time > ?", now).Find(&list).Error
|
// err := orm.Where("expire_time > ?", now).Find(&list).Error
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
mylog.Error(err)
|
// mylog.Error(err)
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
cache := mycache.NewCache(_sign_data)
|
// cache := mycache.NewCache(_sign_data)
|
||||||
for _, v := range list { //保存数据到缓存
|
// for _, v := range list { //保存数据到缓存
|
||||||
cache.Add(v.App_key, v, v.Expire_time.Sub(now))
|
// cache.Add(v.App_key, v, v.Expire_time.Sub(now))
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
func getOne(appKey string) (sign Sign_client_tbl) {
|
func getOne(appKey string) (sign Sign_client_tbl) {
|
||||||
str_db := config.GetDbUrl()
|
// str_db := config.GetDbUrl()
|
||||||
if len(str_db) > 0 {
|
// if len(str_db) > 0 {
|
||||||
var db mysqldb.MySqlDB
|
// var db mysqldb.MySqlDB
|
||||||
defer db.OnDestoryDB()
|
// defer db.OnDestoryDB()
|
||||||
orm := db.OnGetDBOrm(str_db)
|
// orm := db.OnGetDBOrm(str_db)
|
||||||
if orm.HasTable(&Sign_client_tbl{}) { //有这个表
|
// if orm.HasTable(&Sign_client_tbl{}) { //有这个表
|
||||||
now := time.Now()
|
// now := time.Now()
|
||||||
err := orm.Where("app_key = ? and expire_time > ?", appKey, now).Find(&sign).Error
|
// err := orm.Where("app_key = ? and expire_time > ?", appKey, now).Find(&sign).Error
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
mylog.Error(err)
|
// mylog.Error(err)
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
cache := mycache.NewCache(_sign_data)
|
// cache := mycache.NewCache(_sign_data)
|
||||||
cache.Add(sign.App_key, sign, sign.Expire_time.Sub(now))
|
// cache.Add(sign.App_key, sign, sign.Expire_time.Sub(now))
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -62,30 +55,31 @@ func getOne(appKey string) (sign Sign_client_tbl) {
|
|||||||
生成验签
|
生成验签
|
||||||
*/
|
*/
|
||||||
func OnGetSign(appkey string, parm ...interface{}) string {
|
func OnGetSign(appkey string, parm ...interface{}) string {
|
||||||
var sign Sign_client_tbl
|
// var sign Sign_client_tbl
|
||||||
if len(appkey) > 0 {
|
// if len(appkey) > 0 {
|
||||||
cache := mycache.NewCache(_sign_data)
|
// cache := mycache.NewCache(_sign_data)
|
||||||
tp, b := cache.Value(appkey)
|
// tp, b := cache.Value(appkey)
|
||||||
if b {
|
// if b {
|
||||||
sign = tp.(Sign_client_tbl)
|
// sign = tp.(Sign_client_tbl)
|
||||||
} else {
|
// } else {
|
||||||
sign = getOne(appkey)
|
// sign = getOne(appkey)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if sign.Id == 0 {
|
// if sign.Id == 0 {
|
||||||
|
// return ""
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //开始验签
|
||||||
|
// var strKey string
|
||||||
|
// for _, v := range parm {
|
||||||
|
// strKey += tools.AsString(v)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return tools.Md5Encoder(strKey)
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
//开始验签
|
|
||||||
var strKey string
|
|
||||||
for _, v := range parm {
|
|
||||||
strKey += tools.AsString(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
return tools.Md5Encoder(strKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
开始验签
|
开始验签
|
||||||
*/
|
*/
|
||||||
|
@@ -2,15 +2,16 @@ package sign
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"public/message"
|
|
||||||
"public/tools"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/xxjwxc/public/message"
|
||||||
|
"github.com/xxjwxc/public/tools"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_sing(t *testing.T) {
|
func Test_sing(t *testing.T) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
str := "1" + tools.GetTimeString(now)
|
str := "1" + tools.GetTimeStr(now)
|
||||||
str += "1.0001"
|
str += "1.0001"
|
||||||
fmt.Println(str)
|
fmt.Println(str)
|
||||||
ttt := tools.Md5Encoder(str)
|
ttt := tools.Md5Encoder(str)
|
||||||
|
@@ -9,6 +9,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"github.com/xxjwxc/public/errors"
|
"github.com/xxjwxc/public/errors"
|
||||||
|
|
||||||
@@ -139,10 +140,45 @@ func UnicodeEmojiCode(s string) string {
|
|||||||
if len(string(rs[i])) == 4 {
|
if len(string(rs[i])) == 4 {
|
||||||
u := `[\u` + strconv.FormatInt(int64(rs[i]), 16) + `]`
|
u := `[\u` + strconv.FormatInt(int64(rs[i]), 16) + `]`
|
||||||
ret += u
|
ret += u
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ret += string(rs[i])
|
ret += string(rs[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DbcToSbc 全角转半角
|
||||||
|
func DbcToSbc(str string) string {
|
||||||
|
numConv := unicode.SpecialCase{
|
||||||
|
unicode.CaseRange{
|
||||||
|
Lo: 0x3002, // Lo 全角句号
|
||||||
|
Hi: 0x3002, // Hi 全角句号
|
||||||
|
Delta: [unicode.MaxCase]rune{
|
||||||
|
0, // UpperCase
|
||||||
|
0x002e - 0x3002, // LowerCase 转成半角句号
|
||||||
|
0, // TitleCase
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//
|
||||||
|
unicode.CaseRange{
|
||||||
|
Lo: 0xFF01, // 从全角!
|
||||||
|
Hi: 0xFF19, // 到全角 9
|
||||||
|
Delta: [unicode.MaxCase]rune{
|
||||||
|
0, // UpperCase
|
||||||
|
0x0021 - 0xFF01, // LowerCase 转成半角
|
||||||
|
0, // TitleCase
|
||||||
|
},
|
||||||
|
},
|
||||||
|
unicode.CaseRange{
|
||||||
|
Lo: 0xff21, // Lo: 全角 A
|
||||||
|
Hi: 0xFF5A, // Hi:到全角 z
|
||||||
|
Delta: [unicode.MaxCase]rune{
|
||||||
|
0, // UpperCase
|
||||||
|
0x0041 - 0xff21, // LowerCase 转成半角
|
||||||
|
0, // TitleCase
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.ToLowerSpecial(numConv, str)
|
||||||
|
}
|
||||||
|
@@ -19,6 +19,9 @@ func GetLocalSystemLang(isSimple bool) (locale string) {
|
|||||||
if isSimple {
|
if isSimple {
|
||||||
locale, _ = splitLocale(locale)
|
locale, _ = splitLocale(locale)
|
||||||
}
|
}
|
||||||
|
if len(locale) == 0 {
|
||||||
|
locale = "zh"
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -137,3 +137,8 @@ func Sha1Encrypt(str string) string {
|
|||||||
func GetUtf8Str(str string) []rune {
|
func GetUtf8Str(str string) []rune {
|
||||||
return []rune(str)
|
return []rune(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetUtf8Len 获取中文字符的长度
|
||||||
|
func GetUtf8Len(str string) int {
|
||||||
|
return len([]rune(str))
|
||||||
|
}
|
||||||
|
@@ -26,12 +26,11 @@ const (
|
|||||||
func (_wx *wxTools) GetAccessToken() (accessToken string, err error) {
|
func (_wx *wxTools) GetAccessToken() (accessToken string, err error) {
|
||||||
//先从缓存中获取 access_token
|
//先从缓存中获取 access_token
|
||||||
cache := mycache.NewCache(_cacheToken)
|
cache := mycache.NewCache(_cacheToken)
|
||||||
var tp interface{}
|
err = cache.Value(_cacheToken, &accessToken)
|
||||||
var b bool
|
if err == nil {
|
||||||
tp, b = cache.Value(_cacheToken)
|
return
|
||||||
if b {
|
}
|
||||||
accessToken = *(tp.(*string))
|
|
||||||
} else {
|
|
||||||
var url = _getToken + _wx.wxInfo.AppID + "&secret=" + _wx.wxInfo.AppSecret
|
var url = _getToken + _wx.wxInfo.AppID + "&secret=" + _wx.wxInfo.AppSecret
|
||||||
|
|
||||||
resp, err := http.Get(url)
|
resp, err := http.Get(url)
|
||||||
@@ -54,8 +53,6 @@ func (_wx *wxTools) GetAccessToken() (accessToken string, err error) {
|
|||||||
//------------------end
|
//------------------end
|
||||||
}
|
}
|
||||||
//----------------------end
|
//----------------------end
|
||||||
}
|
|
||||||
//---------------获取 access_token --------end
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -64,11 +61,11 @@ func (_wx *wxTools) GetAccessToken() (accessToken string, err error) {
|
|||||||
func (_wx *wxTools) GetAPITicket() (ticket string, err error) {
|
func (_wx *wxTools) GetAPITicket() (ticket string, err error) {
|
||||||
//先从缓存中获取
|
//先从缓存中获取
|
||||||
cache := mycache.NewCache(_cacheTicket)
|
cache := mycache.NewCache(_cacheTicket)
|
||||||
var tp interface{}
|
err = cache.Value(_cacheTicket, &ticket)
|
||||||
tp, b := cache.Value(_cacheTicket)
|
if err == nil {
|
||||||
if b {
|
return
|
||||||
ticket = tp.(string)
|
}
|
||||||
} else {
|
|
||||||
accessToken, e := _wx.GetAccessToken()
|
accessToken, e := _wx.GetAccessToken()
|
||||||
if e != nil {
|
if e != nil {
|
||||||
mylog.Error(e)
|
mylog.Error(e)
|
||||||
@@ -95,7 +92,7 @@ func (_wx *wxTools) GetAPITicket() (ticket string, err error) {
|
|||||||
ticket = result.Ticket
|
ticket = result.Ticket
|
||||||
//保存缓存
|
//保存缓存
|
||||||
cache.Add(_cacheTicket, ticket, 7000*time.Second)
|
cache.Add(_cacheTicket, ticket, 7000*time.Second)
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,11 +100,11 @@ func (_wx *wxTools) GetAPITicket() (ticket string, err error) {
|
|||||||
func (_wx *wxTools) GetJsTicket() (ticket string, err error) {
|
func (_wx *wxTools) GetJsTicket() (ticket string, err error) {
|
||||||
//先从缓存中获取
|
//先从缓存中获取
|
||||||
cache := mycache.NewCache("weixin_js_ticket")
|
cache := mycache.NewCache("weixin_js_ticket")
|
||||||
var tp interface{}
|
err = cache.Value("base", &ticket)
|
||||||
tp, b := cache.Value("base")
|
if err == nil {
|
||||||
if b {
|
return
|
||||||
ticket = tp.(string)
|
}
|
||||||
} else {
|
|
||||||
accessToken, e := _wx.GetAccessToken()
|
accessToken, e := _wx.GetAccessToken()
|
||||||
if e != nil {
|
if e != nil {
|
||||||
mylog.Error(e)
|
mylog.Error(e)
|
||||||
@@ -134,7 +131,7 @@ func (_wx *wxTools) GetJsTicket() (ticket string, err error) {
|
|||||||
ticket = result.Ticket
|
ticket = result.Ticket
|
||||||
//保存缓存
|
//保存缓存
|
||||||
cache.Add("base", ticket, 7000*time.Second)
|
cache.Add("base", ticket, 7000*time.Second)
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user