From 51133d42ab87b8209296ffa625f69cf70ed12ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Sun, 20 Mar 2022 11:19:57 +0800 Subject: [PATCH] add utils mod --- go.sum | 224 ++++----------------------- utils/godmail/go.mod | 3 + utils/goenv/go.mod | 3 + utils/goenv/goenv.go | 22 +++ utils/gofiles/go.mod | 3 + utils/gofloat/go.mod | 3 + utils/goget/go.mod | 3 + utils/goget/goget.go | 15 ++ utils/goheader/go.mod | 3 + utils/gohttp/go.mod | 3 + utils/gohttp/gohttp.go | 75 ++++++++- utils/goint/go.mod | 3 + utils/goint64/go.mod | 3 + utils/goip/go.mod | 3 + utils/goip/goip.go | 73 +++++++++ utils/gojson/go.mod | 3 + utils/goless/go.mod | 3 + utils/golock/go.mod | 3 + utils/golock/lock.go | 58 +++++++ utils/golog/go.mod | 3 + utils/gomac/go.mod | 3 + utils/gomac/gomac.go | 21 +++ utils/gomd5/go.mod | 3 + utils/gomd5/gomd5.go | 8 + utils/{gomongodb => gomongo}/app.go | 22 ++- utils/{gomongodb => gomongo}/curd.go | 63 +++++--- utils/gomongo/go.mod | 3 + utils/gomysql/app.go | 36 +++++ utils/gomysql/go.mod | 3 + utils/goparams/go.mod | 3 + utils/gophp/go.mod | 3 + utils/gophp/gophp.go | 2 +- utils/gophp/serialize/serialize.go | 4 +- utils/gophp/serialize/unserialize.go | 2 +- utils/gopostgresql/app.go | 26 ++++ utils/gopostgresql/go.mod | 3 + utils/gopostgresql/type.go | 31 ++++ utils/gopreg/go.mod | 3 + utils/gorandom/go.mod | 3 + utils/goredis/app.go | 10 +- utils/goredis/go.mod | 3 + utils/goredis/hash_operation.go | 26 ++++ utils/goredis/list_operation.go | 76 +++++++++ utils/goredis/string_operation.go | 7 +- utils/gorequest/go.mod | 3 + utils/gorequest/gorequest.go | 63 +++----- utils/goround/go.mod | 3 + utils/gorsa/go.mod | 3 + utils/gosort/go.mod | 3 + utils/gosort/gpsort.go | 26 ++++ utils/gossh/go.mod | 3 + utils/gossl/go.mod | 3 + utils/gossl/gossl.go | 43 +++++ utils/gourl/go.mod | 3 + utils/gouuid/go.mod | 3 + utils/phpjson/go.mod | 3 + utils/rmb/go.mod | 3 + utils/rmb/rmb.go | 27 ++++ 58 files changed, 784 insertions(+), 278 deletions(-) create mode 100644 utils/godmail/go.mod create mode 100644 utils/goenv/go.mod create mode 100644 utils/goenv/goenv.go create mode 100644 utils/gofiles/go.mod create mode 100644 utils/gofloat/go.mod create mode 100644 utils/goget/go.mod create mode 100644 utils/goget/goget.go create mode 100644 utils/goheader/go.mod create mode 100644 utils/gohttp/go.mod create mode 100644 utils/goint/go.mod create mode 100644 utils/goint64/go.mod create mode 100644 utils/goip/go.mod create mode 100644 utils/goip/goip.go create mode 100644 utils/gojson/go.mod create mode 100644 utils/goless/go.mod create mode 100644 utils/golock/go.mod create mode 100644 utils/golock/lock.go create mode 100644 utils/golog/go.mod create mode 100644 utils/gomac/go.mod create mode 100644 utils/gomac/gomac.go create mode 100644 utils/gomd5/go.mod rename utils/{gomongodb => gomongo}/app.go (66%) rename utils/{gomongodb => gomongo}/curd.go (72%) create mode 100644 utils/gomongo/go.mod create mode 100644 utils/gomysql/app.go create mode 100644 utils/gomysql/go.mod create mode 100644 utils/goparams/go.mod create mode 100644 utils/gophp/go.mod create mode 100644 utils/gopostgresql/app.go create mode 100644 utils/gopostgresql/go.mod create mode 100644 utils/gopostgresql/type.go create mode 100644 utils/gopreg/go.mod create mode 100644 utils/gorandom/go.mod create mode 100644 utils/goredis/go.mod create mode 100644 utils/goredis/hash_operation.go create mode 100644 utils/goredis/list_operation.go create mode 100644 utils/gorequest/go.mod create mode 100644 utils/goround/go.mod create mode 100644 utils/gorsa/go.mod create mode 100644 utils/gosort/go.mod create mode 100644 utils/gosort/gpsort.go create mode 100644 utils/gossh/go.mod create mode 100644 utils/gossl/go.mod create mode 100644 utils/gossl/gossl.go create mode 100644 utils/gourl/go.mod create mode 100644 utils/gouuid/go.mod create mode 100644 utils/phpjson/go.mod create mode 100644 utils/rmb/go.mod create mode 100644 utils/rmb/rmb.go diff --git a/go.sum b/go.sum index 77324663..b0fb66af 100644 --- a/go.sum +++ b/go.sum @@ -1,52 +1,29 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -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-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= 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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/dtapps/go-library/utils v0.0.0-20220320030939-97dd0d930b08 h1:IM3l/xtezgegBdGKtqVCMcXWzoiDg+/JM1ERGWxlOmg= +github.com/dtapps/go-library/utils v0.0.0-20220320030939-97dd0d930b08/go.mod h1:CAe843VUK1BRfUY/2wIREtFQinxGXm0ZD9KhzY4akv0= +github.com/dtapps/go-library/utils/gostring v0.0.0-20220320030939-97dd0d930b08 h1:4OoRMcKUDxuiM/FO2TtrW+kgYpiUNWZdBqFnRXiPEiE= +github.com/dtapps/go-library/utils/gostring v0.0.0-20220320030939-97dd0d930b08/go.mod h1:/I01jp7NkiWZaPvtPifORyhWx3s5WgFwdXVg5tiJVGU= +github.com/dtapps/go-library/utils/gotime v0.0.0-20220320030939-97dd0d930b08 h1:4AURjlNDoRy06Nn5Rjcz9f8wYpRgGvpaRcSxe02FHmw= +github.com/dtapps/go-library/utils/gotime v0.0.0-20220320030939-97dd0d930b08/go.mod h1:r0LiuyhLO87GE+vsrySui1ku/HAkcL5iXRPvn6s0CEo= 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/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg= github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= -github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg= -github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk= -github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/golang-module/carbon v1.5.5 h1:/cv1ZguAe/jsiVsvQl/OZB1DO/trrfiMgAv/IXQ0lqo= -github.com/golang-module/carbon v1.5.5/go.mod h1:M/TDTYPp3qWtW68u49dLDJOyGmls6L6BXdo/pyvkMaU= github.com/golang/protobuf v1.2.0/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= @@ -66,91 +43,21 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.10.1 h1:DzdIHIjG1AxGwoEEqS+mGsURyjt4enSmqzACXvVzOT8= -github.com/jackc/pgconn v1.10.1/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.2.0 h1:r7JypeP2D3onoQTCxWdTpCtJ4D+qpKr0TxvoyMhZ5ns= -github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.9.1 h1:MJc2s0MFS8C3ok1wQTdQxWuXQcB6+HwAm5x1CzW7mf0= -github.com/jackc/pgtype v1.9.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.14.1 h1:71oo1KAGI6mXhLiTMn6iDFcp3e7+zon/capWjl2OEFU= -github.com/jackc/pgx/v4 v4.14.1/go.mod h1:RgDuE4Z34o7XE92RpLsvFiOEfrAUT0Xt2KxvX73W06M= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.2.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= 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/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= -github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/nilorg/sdk v0.0.0-20210429091026-95b6cdc95c84 h1:Nxk1uViXfb9MHgtHBlQFWzlQCsJbDQuotfTsAFcFP3o= github.com/nilorg/sdk v0.0.0-20210429091026-95b6cdc95c84/go.mod h1:X1swpPdqguAZaBDoEPyEWHSsJii0YQ1o+3piMv6W3JU= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -164,137 +71,87 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 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/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -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/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -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/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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.mongodb.org/mongo-driver v1.8.1 h1:OZE4Wni/SJlrcmSIBRYNzunX5TKxjrTS4jKSnA99oKU= go.mongodb.org/mongo-driver v1.8.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= -go.uber.org/atomic v1.3.2/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/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.mongodb.org/mongo-driver v1.8.4 h1:NruvZPPL0PBcRJKmbswoWSrmHeUvzdxA3GCPfD/NEOA= +go.mongodb.org/mongo-driver v1.8.4/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38= +golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20181205085412-a5c9d58dba9a/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -302,35 +159,21 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -344,17 +187,11 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/dtapps/go-library.v3 v3.0.1 h1:YnHrAsXczWaMmK/2ZcSovg50R68ehSLYjt1aAUaB804= +gopkg.in/dtapps/go-library.v3 v3.0.1/go.mod h1:AZdg65wLh4PK3KVN1GwXRf4tEZntUF0o7WfXtfHpCSw= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= 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/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -366,10 +203,7 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.3.2 h1:QJryWiqQ91EvZ0jZL48NOpdlPdMjdip1hQ8bTgo4H7I= -gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= -gorm.io/driver/postgres v1.3.1 h1:Pyv+gg1Gq1IgsLYytj/S2k7ebII3CzEdpqQkPOdH24g= -gorm.io/driver/postgres v1.3.1/go.mod h1:WwvWOuR9unCLpGWCL6Y3JOeBWvbKi6JLhayiVclSZZU= gorm.io/gorm v1.23.1 h1:aj5IlhDzEPsoIyOPtTRVI+SyaN1u6k613sbt4pwbxG0= gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +gorm.io/gorm v1.23.3 h1:jYh3nm7uLZkrMVfA8WVNjDZryKfr7W+HTlInVgKFJAg= +gorm.io/gorm v1.23.3/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= diff --git a/utils/godmail/go.mod b/utils/godmail/go.mod new file mode 100644 index 00000000..afa6ef46 --- /dev/null +++ b/utils/godmail/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/godmail + +go 1.18 diff --git a/utils/goenv/go.mod b/utils/goenv/go.mod new file mode 100644 index 00000000..0ff79458 --- /dev/null +++ b/utils/goenv/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goenv + +go 1.18 diff --git a/utils/goenv/goenv.go b/utils/goenv/goenv.go new file mode 100644 index 00000000..daaef4af --- /dev/null +++ b/utils/goenv/goenv.go @@ -0,0 +1,22 @@ +package goenv + +import ( + "github.com/dtapps/go-library/utils/gostring" + "os" +) + +func GetEnvDefault(key, defVal string) string { + val, ok := os.LookupEnv(key) + if ok { + return val + } + return defVal +} + +func GetEnvDefaultInt(key string, defVal int) int { + val, ok := os.LookupEnv(key) + if ok { + return gostring.ToInt(val) + } + return defVal +} diff --git a/utils/gofiles/go.mod b/utils/gofiles/go.mod new file mode 100644 index 00000000..c2c26c88 --- /dev/null +++ b/utils/gofiles/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gofiles + +go 1.18 diff --git a/utils/gofloat/go.mod b/utils/gofloat/go.mod new file mode 100644 index 00000000..dae94fe8 --- /dev/null +++ b/utils/gofloat/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gofloat + +go 1.18 diff --git a/utils/goget/go.mod b/utils/goget/go.mod new file mode 100644 index 00000000..662d80bf --- /dev/null +++ b/utils/goget/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goget + +go 1.18 diff --git a/utils/goget/goget.go b/utils/goget/goget.go new file mode 100644 index 00000000..1436d96f --- /dev/null +++ b/utils/goget/goget.go @@ -0,0 +1,15 @@ +package goget + +func GetDefault(key, defVal any) any { + if key != nil { + return key + } + return defVal +} + +func GetStringDefault(key, defVal string) string { + if key != "" { + return key + } + return defVal +} diff --git a/utils/goheader/go.mod b/utils/goheader/go.mod new file mode 100644 index 00000000..7cc79a33 --- /dev/null +++ b/utils/goheader/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goheader + +go 1.18 diff --git a/utils/gohttp/go.mod b/utils/gohttp/go.mod new file mode 100644 index 00000000..4aed1206 --- /dev/null +++ b/utils/gohttp/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gohttp + +go 1.18 diff --git a/utils/gohttp/gohttp.go b/utils/gohttp/gohttp.go index 2634e846..ec91dd95 100644 --- a/utils/gohttp/gohttp.go +++ b/utils/gohttp/gohttp.go @@ -2,10 +2,11 @@ package gohttp import ( "bytes" + "dtapps/dta/library/utils/goheader" + "dtapps/dta/library/utils/gorequest" "encoding/json" "errors" "fmt" - "gopkg.in/dtapps/go-library.v3/utils/gorequest" "io/ioutil" "net/http" "net/url" @@ -57,6 +58,46 @@ func Get(url string, params map[string]interface{}) (httpResponse Response, err return httpResponse, err } +func GetJsonHeader(url string, params map[string]interface{}, headers goheader.Headers) (httpResponse Response, err error) { + // 创建 http 客户端 + client := &http.Client{} + // 创建请求 + req, _ := http.NewRequest(http.MethodGet, url, nil) + if len(params) > 0 { + // GET 请求携带查询参数 + q := req.URL.Query() + for k, v := range params { + q.Add(k, getString(v)) + } + req.URL.RawQuery = q.Encode() + } + // 设置请求头 + req.Header.Set("User-Agent", gorequest.GetRandomUserAgent()) + req.Header.Set("Content-Type", "application/json") + for key, value := range headers { + req.Header.Set(key, value.(string)) + } + // 发送请求 + resp, err := client.Do(req) + if err != nil { + // 格式化返回错误 + return httpResponse, errors.New(fmt.Sprintf("请求出错 %s", err)) + } + // 最后关闭连接 + defer resp.Body.Close() + // 读取内容 + respBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return httpResponse, errors.New(fmt.Sprintf("解析内容出错 %s", err)) + } + httpResponse.Status = resp.Status + httpResponse.StatusCode = resp.StatusCode + httpResponse.Header = resp.Header + httpResponse.Body = respBody + httpResponse.ContentLength = resp.ContentLength + return httpResponse, err +} + func PostForm(targetUrl string, params map[string]interface{}) (httpResponse Response, err error) { // 创建 http 客户端 client := &http.Client{} @@ -122,6 +163,38 @@ func PostJson(targetUrl string, paramsStr []byte) (httpResponse Response, err er return httpResponse, err } +func PostJsonHeader(targetUrl string, paramsStr []byte, headers goheader.Headers) (httpResponse Response, err error) { + // 创建请求 + req, _ := http.NewRequest(http.MethodPost, targetUrl, bytes.NewBuffer(paramsStr)) + // 设置请求头 + req.Header.Set("User-Agent", gorequest.GetRandomUserAgent()) + req.Header.Set("Content-Type", "application/json") + for key, value := range headers { + req.Header.Set(key, value.(string)) + } + // 创建 http 客户端 + client := &http.Client{} + // 发送请求 + resp, err := client.Do(req) + if err != nil { + // 格式化返回错误 + return httpResponse, errors.New(fmt.Sprintf("请求出错 %s", err)) + } + // 最后关闭连接 + defer resp.Body.Close() + // 读取内容 + respBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return httpResponse, errors.New(fmt.Sprintf("解析内容出错 %s", err)) + } + httpResponse.Status = resp.Status + httpResponse.StatusCode = resp.StatusCode + httpResponse.Header = resp.Header + httpResponse.Body = respBody + httpResponse.ContentLength = resp.ContentLength + return httpResponse, err +} + func getString(i interface{}) string { switch v := i.(type) { case string: diff --git a/utils/goint/go.mod b/utils/goint/go.mod new file mode 100644 index 00000000..32196b9c --- /dev/null +++ b/utils/goint/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goint + +go 1.18 diff --git a/utils/goint64/go.mod b/utils/goint64/go.mod new file mode 100644 index 00000000..f810e89d --- /dev/null +++ b/utils/goint64/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goint64 + +go 1.18 diff --git a/utils/goip/go.mod b/utils/goip/go.mod new file mode 100644 index 00000000..d9133ed5 --- /dev/null +++ b/utils/goip/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goip + +go 1.18 diff --git a/utils/goip/goip.go b/utils/goip/goip.go new file mode 100644 index 00000000..2019a7b9 --- /dev/null +++ b/utils/goip/goip.go @@ -0,0 +1,73 @@ +package goip + +import ( + "dtapps/dta/library/utils/gohttp" + "encoding/json" + "log" + "net" +) + +// GetInsideIp 内网ip +func GetInsideIp() string { + conn, err := net.Dial("udp", "8.8.8.8:80") + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + localAddr := conn.LocalAddr().(*net.UDPAddr) + return localAddr.IP.String() +} + +var respGetOutsideIp struct { + Ip string `json:"ip"` +} + +// GetOutsideIp 外网ip +func GetOutsideIp() string { + get, _ := gohttp.Get("https://api.dtapp.net/ip", map[string]interface{}{}) + _ = json.Unmarshal(get.Body, &respGetOutsideIp) + if respGetOutsideIp.Ip != "" { + return respGetOutsideIp.Ip + } + return "0.0.0.0" +} + +func GetOutboundIP() string { + conn, err := net.Dial("udp", "8.8.8.8:80") + if err != nil { + log.Fatal(err) + } + defer conn.Close() + + localAddr := conn.LocalAddr().(*net.UDPAddr) + return localAddr.IP.String() +} + +// Ips 获取全部网卡的全部IP +func Ips() (map[string]string, error) { + + ips := make(map[string]string) + + //返回 interface 结构体对象的列表,包含了全部网卡信息 + interfaces, err := net.Interfaces() + if err != nil { + return nil, err + } + + //遍历全部网卡 + for _, i := range interfaces { + + // Addrs() 方法返回一个网卡上全部的IP列表 + address, err := i.Addrs() + if err != nil { + return nil, err + } + + //遍历一个网卡上全部的IP列表,组合为一个字符串,放入对应网卡名称的map中 + for _, v := range address { + ips[i.Name] += v.String() + " " + } + } + return ips, nil +} diff --git a/utils/gojson/go.mod b/utils/gojson/go.mod new file mode 100644 index 00000000..3315f93f --- /dev/null +++ b/utils/gojson/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gojson + +go 1.18 diff --git a/utils/goless/go.mod b/utils/goless/go.mod new file mode 100644 index 00000000..6eedad86 --- /dev/null +++ b/utils/goless/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goless + +go 1.18 diff --git a/utils/golock/go.mod b/utils/golock/go.mod new file mode 100644 index 00000000..7e22d766 --- /dev/null +++ b/utils/golock/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/golock + +go 1.18 diff --git a/utils/golock/lock.go b/utils/golock/lock.go new file mode 100644 index 00000000..8432710e --- /dev/null +++ b/utils/golock/lock.go @@ -0,0 +1,58 @@ +package golock + +import ( + "context" + "dtapps/dta/global" + "dtapps/dta/library/utils/gouuid" + "github.com/go-redis/redis/v8" + "time" +) + +type lock struct { + key string + expiration time.Duration + requestId string +} + +func NewLock(key string, expiration time.Duration) *lock { + requestId := gouuid.GetUuId() + return &lock{key: key, expiration: expiration, requestId: requestId} +} + +// Get 获取锁 +func (lk *lock) Get() bool { + + cxt, cancel := context.WithTimeout(context.Background(), 3*time.Second) + + defer cancel() + + ok, err := global.GvaRedis.Db.SetNX(cxt, lk.key, lk.requestId, lk.expiration).Result() + + if err != nil { + + return false + } + + return ok +} + +// Release 释放锁 +func (lk *lock) Release() error { + + cxt, cancel := context.WithTimeout(context.Background(), 3*time.Second) + + defer cancel() + + const luaScript = ` + if redis.call('get', KEYS[1])==ARGV[1] then + return redis.call('del', KEYS[1]) + else + return 0 + end + ` + + script := redis.NewScript(luaScript) + + _, err := script.Run(cxt, global.GvaRedis.Db, []string{lk.key}, lk.requestId).Result() + return err +} diff --git a/utils/golog/go.mod b/utils/golog/go.mod new file mode 100644 index 00000000..eaf30df0 --- /dev/null +++ b/utils/golog/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/golog + +go 1.18 diff --git a/utils/gomac/go.mod b/utils/gomac/go.mod new file mode 100644 index 00000000..85219b32 --- /dev/null +++ b/utils/gomac/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gomac + +go 1.18 diff --git a/utils/gomac/gomac.go b/utils/gomac/gomac.go new file mode 100644 index 00000000..64e5ecb0 --- /dev/null +++ b/utils/gomac/gomac.go @@ -0,0 +1,21 @@ +package gomac + +import ( + "net" +) + +func GetMacAddrs() (macAddrs []string) { + netInterfaces, err := net.Interfaces() + if err != nil { + return macAddrs + } + for _, netInterface := range netInterfaces { + macAddr := netInterface.HardwareAddr.String() + if len(macAddr) == 0 { + continue + } + + macAddrs = append(macAddrs, macAddr) + } + return macAddrs +} diff --git a/utils/gomd5/go.mod b/utils/gomd5/go.mod new file mode 100644 index 00000000..ce16132e --- /dev/null +++ b/utils/gomd5/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gomd5 + +go 1.18 diff --git a/utils/gomd5/gomd5.go b/utils/gomd5/gomd5.go index 84201a5f..96fbc485 100644 --- a/utils/gomd5/gomd5.go +++ b/utils/gomd5/gomd5.go @@ -28,6 +28,14 @@ func ToUpper(str string) string { return strings.ToUpper(hex.EncodeToString(cipherStr)) } +// ToLower md5加密后转小写 +func ToLower(str string) string { + h := md5.New() + h.Write([]byte(str)) + cipherStr := h.Sum(nil) + return strings.ToLower(hex.EncodeToString(cipherStr)) +} + // GetMD5Encode 返回一个32位md5加密后的字符串 func GetMD5Encode(data string) string { h := md5.New() diff --git a/utils/gomongodb/app.go b/utils/gomongo/app.go similarity index 66% rename from utils/gomongodb/app.go rename to utils/gomongo/app.go index 53bbb442..7712753c 100644 --- a/utils/gomongodb/app.go +++ b/utils/gomongo/app.go @@ -1,4 +1,4 @@ -package gomongodb +package gomongo import ( "context" @@ -6,34 +6,32 @@ import ( "fmt" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" + "log" ) // App 实例 type App struct { - Mgo *mongo.Client + Db *mongo.Client User string // 用户名 Password string // 密码 Host string // 地址 Port int // 端口 - Database string // 数据库 - Collection string // 表名 + Dbname string // 数据库 + Dns string // 地址 + collection string // 表名 } // InitClient 初始化连接 func (app *App) InitClient() { + log.Printf("gomongo:%+v\n", app) var err error // 连接到MongoDB - app.Mgo, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%s@%s:%d", - app.User, - app.Password, - app.Host, - app.Port, - ))) + app.Db, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(app.Dns)) if err != nil { panic(errors.New(fmt.Sprintf("gomongodb connect error:%v", err))) } // 检查连接 - err = app.Mgo.Ping(context.TODO(), nil) + err = app.Db.Ping(context.TODO(), nil) if err != nil { panic(errors.New(fmt.Sprintf("gomongodb ping error:%v", err))) } @@ -42,7 +40,7 @@ func (app *App) InitClient() { // Close 关闭 func (app *App) Close() { - err := app.Mgo.Disconnect(context.TODO()) + err := app.Db.Disconnect(context.TODO()) if err != nil { panic(errors.New(fmt.Sprintf("gomongodb close error:%v", err))) } diff --git a/utils/gomongodb/curd.go b/utils/gomongo/curd.go similarity index 72% rename from utils/gomongodb/curd.go rename to utils/gomongo/curd.go index ac795811..3800d667 100644 --- a/utils/gomongodb/curd.go +++ b/utils/gomongo/curd.go @@ -1,41 +1,64 @@ -package gomongodb +package gomongo import ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" + "reflect" ) +func (app *App) Database(database string) *App { + app.Dbname = database + return app +} + +func (app *App) Collection(collection string) *App { + app.collection = collection + return app +} + +func (app *App) Model(value interface{}) *App { + // https://studygolang.com/articles/896 + val := reflect.ValueOf(value) + if methodValue := val.MethodByName("Database"); methodValue.IsValid() { + app.Dbname = methodValue.Call(nil)[0].String() + } + if methodValue := val.MethodByName("TableName"); methodValue.IsValid() { + app.collection = methodValue.Call(nil)[0].String() + } + return app +} + func (app *App) Session() (session mongo.Session, err error) { - session, err = app.Mgo.StartSession() + session, err = app.Db.StartSession() return } // InsertOne 插入单个文档 func (app *App) InsertOne(value interface{}) (result *mongo.InsertOneResult, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err = collection.InsertOne(context.TODO(), value) return result, err } // InsertMany 插入多个文档 func (app *App) InsertMany(values []interface{}) (result *mongo.InsertManyResult, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err = collection.InsertMany(context.TODO(), values) return result, err } // Delete 删除文档 func (app *App) Delete(filter interface{}) (int64, error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) count, err := collection.DeleteOne(context.TODO(), filter, nil) return count.DeletedCount, err } // DeleteMany 删除多个文档 func (app *App) DeleteMany(key string, value interface{}) (int64, error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) filter := bson.D{{key, value}} count, err := collection.DeleteMany(context.TODO(), filter) return count.DeletedCount, err @@ -47,7 +70,7 @@ func (app *App) DeleteMany(key string, value interface{}) (int64, error) { // 从数组中增加一个元素 push($push) // 从数组中删除一个元素 pull($pull) func (app *App) UpdateOne(filter, update interface{}) (int64, error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err := collection.UpdateOne(context.TODO(), filter, update) return result.UpsertedCount, err } @@ -58,42 +81,42 @@ func (app *App) UpdateOne(filter, update interface{}) (int64, error) { // 从数组中增加一个元素 push($push) // 从数组中删除一个元素 pull($pull) func (app *App) UpdateMany(filter, update interface{}) (int64, error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err := collection.UpdateMany(context.TODO(), filter, update) return result.UpsertedCount, err } // Find 查询 func (app *App) Find(filter interface{}, opts ...*options.FindOptions) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err = collection.Find(context.TODO(), filter, opts...) return result, err } // FindOne 查询单个文档 func (app *App) FindOne(filter interface{}) (result *mongo.SingleResult) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result = collection.FindOne(context.TODO(), filter) return result } // FindMany 查询多个文档 func (app *App) FindMany(filter interface{}) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err = collection.Find(context.TODO(), filter) return result, err } // FindManyByFilters 多条件查询 func (app *App) FindManyByFilters(filter interface{}) (result *mongo.Cursor, err error) { - collection, err := app.Mgo.Database(app.Database).Collection(app.Collection).Clone() + collection, err := app.Db.Database(app.Dbname).Collection(app.collection).Clone() result, err = collection.Find(context.TODO(), bson.M{"$and": filter}) return result, err } // FindManyByFiltersSort 多条件查询支持排序 func (app *App) FindManyByFiltersSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) { - collection, err := app.Mgo.Database(app.Database).Collection(app.Collection).Clone() + collection, err := app.Db.Database(app.Dbname).Collection(app.collection).Clone() findOptions := options.Find() findOptions.SetSort(Sort) result, err = collection.Find(context.TODO(), filter, findOptions) @@ -102,7 +125,7 @@ func (app *App) FindManyByFiltersSort(filter interface{}, Sort interface{}) (res // FindCollection 查询集合文档 func (app *App) FindCollection(Limit int64) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) findOptions := options.Find() findOptions.SetLimit(Limit) result, err = collection.Find(context.TODO(), bson.D{{}}, findOptions) @@ -111,7 +134,7 @@ func (app *App) FindCollection(Limit int64) (result *mongo.Cursor, err error) { // FindCollectionSort 查询集合文档支持排序 func (app *App) FindCollectionSort(Sort interface{}, Limit int64) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) findOptions := options.Find() findOptions.SetSort(Sort) findOptions.SetLimit(Limit) @@ -121,7 +144,7 @@ func (app *App) FindCollectionSort(Sort interface{}, Limit int64) (result *mongo // FindManyCollectionSort 查询集合文档支持排序支持条件 func (app *App) FindManyCollectionSort(filter interface{}, Sort interface{}) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) findOptions := options.Find() findOptions.SetSort(Sort) result, err = collection.Find(context.TODO(), filter, findOptions) @@ -130,7 +153,7 @@ func (app *App) FindManyCollectionSort(filter interface{}, Sort interface{}) (re // CollectionCount 查询集合里有多少数据 func (app *App) CollectionCount() (name string, size int64) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) name = collection.Name() size, _ = collection.EstimatedDocumentCount(context.TODO()) return name, size @@ -141,7 +164,7 @@ func (app *App) CollectionCount() (name string, size int64) { // Limit 读取数量 // sort 1 ,-1 . 1 为升序 , -1 为降序 func (app *App) CollectionDocuments(Skip, Limit int64, sort int, key string, value interface{}) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) SORT := bson.D{{"_id", sort}} filter := bson.D{{key, value}} findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip) @@ -151,14 +174,14 @@ func (app *App) CollectionDocuments(Skip, Limit int64, sort int, key string, val // AggregateByFiltersSort 统计分析 func (app *App) AggregateByFiltersSort(pipeline interface{}, opts ...*options.AggregateOptions) (result *mongo.Cursor, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) result, err = collection.Aggregate(context.TODO(), pipeline, opts...) return result, err } // CountDocumentsByFilters 统计数量 func (app *App) CountDocumentsByFilters(filter interface{}) (count int64, err error) { - collection := app.Mgo.Database(app.Database).Collection(app.Collection) + collection := app.Db.Database(app.Dbname).Collection(app.collection) count, err = collection.CountDocuments(context.TODO(), filter) return count, err } diff --git a/utils/gomongo/go.mod b/utils/gomongo/go.mod new file mode 100644 index 00000000..7aa952cd --- /dev/null +++ b/utils/gomongo/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gomongo + +go 1.18 diff --git a/utils/gomysql/app.go b/utils/gomysql/app.go new file mode 100644 index 00000000..18b8775c --- /dev/null +++ b/utils/gomysql/app.go @@ -0,0 +1,36 @@ +package gomysql + +import ( + "fmt" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "log" + "time" +) + +type App struct { + Db *gorm.DB + Dns string // 地址 +} + +func (app *App) InitClient() { + + log.Printf("gomysql:%+v\n", app) + + var err error + + app.Db, err = gorm.Open(mysql.Open(app.Dns), &gorm.Config{}) + + if err != nil { + panic(fmt.Sprintf("连接数据库失败:%v", err)) + } + + sqlDB, err := app.Db.DB() + if err != nil { + panic(fmt.Sprintf("连接数据库服务器失败:%v", err)) + } + sqlDB.SetMaxIdleConns(10) // 设置空闲连接池中连接的最大数量 + sqlDB.SetMaxOpenConns(100) // 设置打开数据库连接的最大数量。 + sqlDB.SetConnMaxLifetime(time.Second * 600) // 设置了连接可复用的最大时间。 + +} diff --git a/utils/gomysql/go.mod b/utils/gomysql/go.mod new file mode 100644 index 00000000..723a545d --- /dev/null +++ b/utils/gomysql/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gomysql + +go 1.18 diff --git a/utils/goparams/go.mod b/utils/goparams/go.mod new file mode 100644 index 00000000..a1560e07 --- /dev/null +++ b/utils/goparams/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goparams + +go 1.18 diff --git a/utils/gophp/go.mod b/utils/gophp/go.mod new file mode 100644 index 00000000..6e275804 --- /dev/null +++ b/utils/gophp/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gophp + +go 1.18 diff --git a/utils/gophp/gophp.go b/utils/gophp/gophp.go index ed334c11..dc233d82 100644 --- a/utils/gophp/gophp.go +++ b/utils/gophp/gophp.go @@ -1,6 +1,6 @@ package gophp -import "gopkg.in/dtapps/go-library.v3/utils/gophp/serialize" +import "dtapps/dta/library/utils/gophp/serialize" // Serialize 序列 func Serialize(value interface{}) ([]byte, error) { diff --git a/utils/gophp/serialize/serialize.go b/utils/gophp/serialize/serialize.go index 711e4ecd..6fcd10c6 100644 --- a/utils/gophp/serialize/serialize.go +++ b/utils/gophp/serialize/serialize.go @@ -2,9 +2,9 @@ package serialize import ( "bytes" + "dtapps/dta/library/utils/goless" + "dtapps/dta/library/utils/gostring" "fmt" - "gopkg.in/dtapps/go-library.v3/utils/goless" - "gopkg.in/dtapps/go-library.v3/utils/gostring" "reflect" "sort" ) diff --git a/utils/gophp/serialize/unserialize.go b/utils/gophp/serialize/unserialize.go index b47a1cee..de49fa2e 100644 --- a/utils/gophp/serialize/unserialize.go +++ b/utils/gophp/serialize/unserialize.go @@ -2,8 +2,8 @@ package serialize import ( "bytes" + "dtapps/dta/library/utils/gostring" "fmt" - "gopkg.in/dtapps/go-library.v3/utils/gostring" "strconv" ) diff --git a/utils/gopostgresql/app.go b/utils/gopostgresql/app.go new file mode 100644 index 00000000..a77be3eb --- /dev/null +++ b/utils/gopostgresql/app.go @@ -0,0 +1,26 @@ +package gopostgresql + +import ( + "fmt" + "gorm.io/driver/postgres" + "gorm.io/gorm" +) + +type App struct { + Db *gorm.DB + Dns string +} + +func (app *App) InitClient() { + var err error + + app.Db, err = gorm.Open(postgres.Open(app.Dns), &gorm.Config{}) + if err != nil { + panic(fmt.Sprintf("连接数据库失败:%v", err)) + } + + _, err = app.Db.DB() + if err != nil { + panic(fmt.Sprintf("连接数据库服务器失败:%v", err)) + } +} diff --git a/utils/gopostgresql/go.mod b/utils/gopostgresql/go.mod new file mode 100644 index 00000000..8cf577cd --- /dev/null +++ b/utils/gopostgresql/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gopostgresql + +go 1.18 diff --git a/utils/gopostgresql/type.go b/utils/gopostgresql/type.go new file mode 100644 index 00000000..62cd6bc2 --- /dev/null +++ b/utils/gopostgresql/type.go @@ -0,0 +1,31 @@ +package gopostgresql + +import ( + "database/sql/driver" + "encoding/json" + "errors" + "fmt" +) + +type JSON json.RawMessage + +// Scan 实现 sql.Scanner 接口,Scan 将 value 扫描至 Jsonb +func (j *JSON) Scan(value interface{}) error { + bytes, ok := value.([]byte) + if !ok { + return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) + } + + result := json.RawMessage{} + err := json.Unmarshal(bytes, &result) + *j = JSON(result) + return err +} + +// Value 实现 driver.Valuer 接口,Value 返回 json value +func (j JSON) Value() (driver.Value, error) { + if len(j) == 0 { + return nil, nil + } + return json.RawMessage(j).MarshalJSON() +} diff --git a/utils/gopreg/go.mod b/utils/gopreg/go.mod new file mode 100644 index 00000000..208c5b38 --- /dev/null +++ b/utils/gopreg/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gopreg + +go 1.18 diff --git a/utils/gorandom/go.mod b/utils/gorandom/go.mod new file mode 100644 index 00000000..6ad04f76 --- /dev/null +++ b/utils/gorandom/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gorandom + +go 1.18 diff --git a/utils/goredis/app.go b/utils/goredis/app.go index 834c3f36..c955dac1 100644 --- a/utils/goredis/app.go +++ b/utils/goredis/app.go @@ -5,24 +5,26 @@ import ( "errors" "fmt" "github.com/go-redis/redis/v8" + "log" "time" ) // App 实例 type App struct { - Rdb *redis.Client + Db *redis.Client Addr string // 地址 Password string // 密码 DB int // 数据库 PoolSize int // 连接池大小 } -// InitClient 初始化连接 普通连接 +// InitClient 初始化连接 func (app *App) InitClient() { if app.PoolSize == 0 { app.PoolSize = 100 } - app.Rdb = redis.NewClient(&redis.Options{ + log.Printf("goredis:%+v\n", app) + app.Db = redis.NewClient(&redis.Options{ Addr: app.Addr, // 地址 Password: app.Password, // 密码 DB: app.DB, // 数据库 @@ -32,7 +34,7 @@ func (app *App) InitClient() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - _, err := app.Rdb.Ping(ctx).Result() + _, err := app.Db.Ping(ctx).Result() if err != nil { panic(errors.New(fmt.Sprintf("goredis ping error:%v", err))) } diff --git a/utils/goredis/go.mod b/utils/goredis/go.mod new file mode 100644 index 00000000..eff56d3d --- /dev/null +++ b/utils/goredis/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goredis + +go 1.18 diff --git a/utils/goredis/hash_operation.go b/utils/goredis/hash_operation.go new file mode 100644 index 00000000..fa0c1b4c --- /dev/null +++ b/utils/goredis/hash_operation.go @@ -0,0 +1,26 @@ +package goredis + +import ( + "context" + "github.com/go-redis/redis/v8" +) + +type HashOperation struct { + db *redis.Client + ctx context.Context +} + +// NewHashOperation hash类型数据操作 https://www.tizi365.com/archives/296.html +func NewHashOperation(db *redis.Client, ctx context.Context) *HashOperation { + return &HashOperation{db: db, ctx: ctx} +} + +// Set 根据key和field字段设置,field字段的值 +func (cl *HashOperation) Set(key string, value interface{}) *redis.IntCmd { + return cl.db.HSet(cl.ctx, key, value) +} + +// Get 根据key和field字段设置,field字段的值 +func (cl *HashOperation) Get(key, field string) *redis.StringCmd { + return cl.db.HGet(cl.ctx, key, field) +} diff --git a/utils/goredis/list_operation.go b/utils/goredis/list_operation.go new file mode 100644 index 00000000..5c2a412d --- /dev/null +++ b/utils/goredis/list_operation.go @@ -0,0 +1,76 @@ +package goredis + +import ( + "context" + "github.com/go-redis/redis/v8" +) + +type ListOperation struct { + db *redis.Client + ctx context.Context +} + +// NewListOperation 列表(list)类型数据操作 https://www.tizi365.com/archives/299.html +func (app *App) NewListOperation() *ListOperation { + return &ListOperation{db: app.Db, ctx: context.Background()} +} + +// LPush 从列表左边插入数据 +func (cl *ListOperation) LPush(key string, value interface{}) *redis.IntCmd { + return cl.db.LPush(cl.ctx, key, value) +} + +// LPushX 跟LPush的区别是,仅当列表存在的时候才插入数据 +func (cl *ListOperation) LPushX(key string, value interface{}) *redis.IntCmd { + return cl.db.LPushX(cl.ctx, key, value) +} + +// RPop 从列表的右边删除第一个数据,并返回删除的数据 +func (cl *ListOperation) RPop(key string) *redis.StringCmd { + return cl.db.RPop(cl.ctx, key) +} + +// RPush 从列表右边插入数据 +func (cl *ListOperation) RPush(key string, value interface{}) *redis.IntCmd { + return cl.db.RPush(cl.ctx, key, value) +} + +// RPushX 跟RPush的区别是,仅当列表存在的时候才插入数据 +func (cl *ListOperation) RPushX(key string, value interface{}) *redis.IntCmd { + return cl.db.RPushX(cl.ctx, key, value) +} + +// LPop 从列表左边删除第一个数据,并返回删除的数据 +func (cl *ListOperation) LPop(key string) *redis.StringCmd { + return cl.db.LPop(cl.ctx, key) +} + +// Len 返回列表的大小 +func (cl *ListOperation) Len(key string) *redis.IntCmd { + return cl.db.LLen(cl.ctx, key) +} + +// Range 返回列表的一个范围内的数据,也可以返回全部数据 +func (cl *ListOperation) Range(key string, start, stop int64) *redis.StringSliceCmd { + return cl.db.LRange(cl.ctx, key, start, stop) +} + +// RangeAli 返回key全部数据 +func (cl *ListOperation) RangeAli(key string) *redis.StringSliceCmd { + return cl.db.LRange(cl.ctx, key, 0, -1) +} + +// Rem 删除key中的数据 +func (cl *ListOperation) Rem(key string, count int64, value interface{}) *redis.IntCmd { + return cl.db.LRem(cl.ctx, key, count, value) +} + +// Index 根据索引坐标,查询key中的数据 +func (cl *ListOperation) Index(key string, index int64) *redis.StringCmd { + return cl.db.LIndex(cl.ctx, key, index) +} + +// Insert 在指定位置插入数据 +func (cl *ListOperation) Insert(key, op string, pivot, value interface{}) *redis.IntCmd { + return cl.db.LInsert(cl.ctx, key, op, pivot, value) +} diff --git a/utils/goredis/string_operation.go b/utils/goredis/string_operation.go index f6e9b997..e9183aed 100644 --- a/utils/goredis/string_operation.go +++ b/utils/goredis/string_operation.go @@ -13,7 +13,7 @@ type StringOperation struct { func (app *App) NewStringOperation() *StringOperation { return &StringOperation{ - db: app.Rdb, + db: app.Db, ctx: context.Background(), } } @@ -36,3 +36,8 @@ func (o *StringOperation) Get(key string) *StringResult { func (o *StringOperation) MGet(keys ...string) *SliceResult { return NewSliceResult(o.db.MGet(o.ctx, keys...).Result()) } + +// Del 删除key操作,支持批量删除 +func (o *StringOperation) Del(keys ...string) *redis.IntCmd { + return o.db.Del(o.ctx, keys...) +} diff --git a/utils/gorequest/go.mod b/utils/gorequest/go.mod new file mode 100644 index 00000000..ffdc0216 --- /dev/null +++ b/utils/gorequest/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gorequest + +go 1.18 diff --git a/utils/gorequest/gorequest.go b/utils/gorequest/gorequest.go index bb9946c7..5b2be8c2 100644 --- a/utils/gorequest/gorequest.go +++ b/utils/gorequest/gorequest.go @@ -5,6 +5,7 @@ import ( "math/rand" "net" "net/http" + "runtime" "strings" "time" ) @@ -46,53 +47,33 @@ func ClientIp(r *http.Request) string { // GetRandomUserAgent 获取用户UA func GetRandomUserAgent() string { r := rand.New(rand.NewSource(time.Now().UnixNano())) - return userAgentList[r.Intn(len(userAgentList))] + switch runtime.GOOS { + case "linux": + return userAgentListLinux[r.Intn(len(userAgentListLinux))] + case "windows": + return userAgentListWindows[r.Intn(len(userAgentListWindows))] + default: + return userAgentListMac[r.Intn(len(userAgentListMac))] + } } -var userAgentList = []string{ - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55", // Edge 2021-07-28 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67", // Edge 2021-08-09 - "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67", // Edge 2021-08-11 - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36", - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36", // Chrome 2021-07-28 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", // Chrome 2021-08-11 - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", // Chrome 2021-08-11 - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15", // Safari 2021-07-28 - - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0", // Firefox 2021-07-28 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0 ", // Firefox 2021-08-11 +var userAgentListWindows = []string{ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36", // Chrome 2022-02-14 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0", // Firefox 2022-02-14 + "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", // IE 2022-02-14 } -// GetRandomUserAgentMobile 获取用户UA -func GetRandomUserAgentMobile() string { - r := rand.New(rand.NewSource(time.Now().UnixNano())) - return userAgentMobileList[r.Intn(len(userAgentMobileList))] +var userAgentListLinux = []string{ + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36 HeyTapBrowser/40.7.35.1", // Chrome 2022-02-14 + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36 OnePlusBrowser/30.5.0.8", // Chrome 2022-02-14 + "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20060814 Firefox/51.0", // Firefox 2022-02-14 } -var userAgentMobileList = []string{ - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/94.0.972.2 Version/15.0 Mobile/15E148 Safari/604.1", // Edge 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/92.0.4515.90 Mobile/15E148 Safari/604.1", // Chrome 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1", // Safari 2021-08-11 - - "Mozilla/5.0 (Linux; U; Android 11; zh-cn; M2011K2C Build/RKQ1.200928.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.147 Mobile Safari/537.36 XiaoMi/MiuiBrowser/15.1.12", // XIAOMI 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.34.0 main%2F1.0 baiduboxapp/12.21.1.10 (Baidu; P2 15.0) NABar/1.0 themeUA=Theme/default webCore=0x1337abb70", // BAIDU 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5318f ChannelId(29) Ariver/1.1.0 AliApp(AP/10.2.28.6000) Nebula WK RVKType(1) AlipayDefined(nt:WIFI,ws:414|832|3.0,ac:T) AlipayClient/10.2.28.6000 Language/zh-Hans Region/CN NebulaX/1.0.0", // ALIPAY 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5261w AliApp(DingTalk/6.0.23) com.laiwang.DingTalk/15108471 Channel/201200 language/zh-Hans-CN UT4Aplus/0.0.6 WK", // DINGDING 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.10(0x18000a24) NetType/WIFI Language/zh_CN", // WECHAT 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 wxwork/3.1.11 MicroMessenger/7.0.1 Language/zh ColorScheme/Dark", // WECHATWORK 2021-08-11 - - "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19A5318f QQ/8.8.17.612 V1_IPH_SQ_8.8.17_1_APP_A Pixel/1242 MiniAppEnable SimpleUISwitch/0 StudyMode/0 QQTheme/1102 Core/WKWebView Device/Apple(iPhone 11 Pro Max) NetType/WIFI QBWebViewType/1 WKType/1", // QQ 2021-08-11 - +var userAgentListMac = []string{ + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15", // Safari 2022-02-14 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36 Edg/98.0.1108.51", // Edge 2022-02-14 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36", // Chrome 2022-02-14 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0", // Firefox 2022-02-14 } func ExternalIp() (string, error) { diff --git a/utils/goround/go.mod b/utils/goround/go.mod new file mode 100644 index 00000000..01e0c543 --- /dev/null +++ b/utils/goround/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/goround + +go 1.18 diff --git a/utils/gorsa/go.mod b/utils/gorsa/go.mod new file mode 100644 index 00000000..f0817c75 --- /dev/null +++ b/utils/gorsa/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gorsa + +go 1.18 diff --git a/utils/gosort/go.mod b/utils/gosort/go.mod new file mode 100644 index 00000000..eb947ee1 --- /dev/null +++ b/utils/gosort/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gosort + +go 1.18 diff --git a/utils/gosort/gpsort.go b/utils/gosort/gpsort.go new file mode 100644 index 00000000..08995af7 --- /dev/null +++ b/utils/gosort/gpsort.go @@ -0,0 +1,26 @@ +package gosort + +// QuickSort 快速排序算法 +// https://www.topgoer.com/Go%E9%AB%98%E7%BA%A7/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95.html +func QuickSort(arr []int) []int { + if len(arr) <= 1 { + return arr + } + splitdata := arr[0] //第一个数据 + low := make([]int, 0, 0) //比我小的数据 + hight := make([]int, 0, 0) //比我大的数据 + mid := make([]int, 0, 0) //与我一样大的数据 + mid = append(mid, splitdata) //加入一个 + for i := 1; i < len(arr); i++ { + if arr[i] < splitdata { + low = append(low, arr[i]) + } else if arr[i] > splitdata { + hight = append(hight, arr[i]) + } else { + mid = append(mid, arr[i]) + } + } + low, hight = QuickSort(low), QuickSort(hight) + myarr := append(append(low, mid...), hight...) + return myarr +} diff --git a/utils/gossh/go.mod b/utils/gossh/go.mod new file mode 100644 index 00000000..fa7341a5 --- /dev/null +++ b/utils/gossh/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gossh + +go 1.18 diff --git a/utils/gossl/go.mod b/utils/gossl/go.mod new file mode 100644 index 00000000..98d3b42c --- /dev/null +++ b/utils/gossl/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gossl + +go 1.18 diff --git a/utils/gossl/gossl.go b/utils/gossl/gossl.go new file mode 100644 index 00000000..854a7c76 --- /dev/null +++ b/utils/gossl/gossl.go @@ -0,0 +1,43 @@ +package gossl + +import ( + "crypto/tls" + "errors" + "fmt" + "net/http" + "time" +) + +// https://mritd.com/2021/05/31/golang-check-certificate-expiration-time/ +func checkSSl(beforeTime time.Duration) error { + c := &http.Client{ + Transport: &http.Transport{ + // 注意如果证书已过期,那么只有在关闭证书校验的情况下链接才能建立成功 + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }, + // 10s 超时后认为服务挂了 + Timeout: 10 * time.Second, + } + resp, err := c.Get("https://mritd.com") + if err != nil { + return err + } + defer func() { _ = resp.Body.Close() }() + + // 遍历所有证书 + for _, cert := range resp.TLS.PeerCertificates { + // 检测证书是否已经过期 + if !cert.NotAfter.After(time.Now()) { + return errors.New(fmt.Sprintf("Website [https://mritd.com] certificate has expired: %s", cert.NotAfter.Local().Format("2006-01-02 15:04:05"))) + } + + // 检测证书距离当前时间 是否小于 beforeTime + // 例如 beforeTime = 7d,那么在证书过期前 6d 开始就发出警告 + if cert.NotAfter.Sub(time.Now()) < beforeTime { + return errors.New(fmt.Sprintf("Website [https://mritd.com] certificate will expire, remaining time: %fh", cert.NotAfter.Sub(time.Now()).Hours())) + } + } + return nil +} diff --git a/utils/gourl/go.mod b/utils/gourl/go.mod new file mode 100644 index 00000000..e13fcf9b --- /dev/null +++ b/utils/gourl/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gourl + +go 1.18 diff --git a/utils/gouuid/go.mod b/utils/gouuid/go.mod new file mode 100644 index 00000000..f98fee4a --- /dev/null +++ b/utils/gouuid/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/gouuid + +go 1.18 diff --git a/utils/phpjson/go.mod b/utils/phpjson/go.mod new file mode 100644 index 00000000..2e3d347b --- /dev/null +++ b/utils/phpjson/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/phpjson + +go 1.18 diff --git a/utils/rmb/go.mod b/utils/rmb/go.mod new file mode 100644 index 00000000..81ec4c34 --- /dev/null +++ b/utils/rmb/go.mod @@ -0,0 +1,3 @@ +module github.com/dtapps/go-library/utils/rmb + +go 1.18 diff --git a/utils/rmb/rmb.go b/utils/rmb/rmb.go new file mode 100644 index 00000000..66ce217d --- /dev/null +++ b/utils/rmb/rmb.go @@ -0,0 +1,27 @@ +package rmb + +import ( + "fmt" + "github.com/shopspring/decimal" +) + +// Fen2Yuan 一分钱转一块钱 分转元 +func Fen2Yuan(price int64) string { + d := decimal.New(1, 2) //分除以100得到元 + result := decimal.NewFromInt(price).DivRound(d, 2).String() + return result +} + +// Yuan2Fen 元转分,乘以100后,保留整数部分 +func Yuan2Fen(price float64) int64 { + d := decimal.New(1, 2) //分转元乘以100 + d1 := decimal.New(1, 0) //乘完之后,保留2为小数,需要这么一个中间参数 + //df := decimal.NewFromFloat(price).Mul(d).DivRound(d1,2).String() + df := decimal.NewFromFloat(price).Mul(d).IntPart() + + //如下是满足,当乘以100后,仍然有小数位,取四舍五入法后,再取整数部分 + dff := decimal.NewFromFloat(price).Mul(d).DivRound(d1, 0).IntPart() + fmt.Printf("输入值为:%f, 简单的元转分后,取整数部分:%d\n", price, df) + fmt.Printf("输入值为:%f, 元转分后,若还有小数,需做四舍五入后,再取整数:%d\n", price, dff) + return df +}