From 6b2a0341dd9453060ce034d64fc7044bea417491 Mon Sep 17 00:00:00 2001 From: tengge <930372551@qq.com> Date: Fri, 15 May 2020 21:36:30 +0800 Subject: [PATCH] panic instead of err --- server/cmd/serve.go | 6 +- server/go.mod | 5 ++ server/go.sum | 82 ++++++++++++++++++++++++++ server/helper/config.go | 7 +-- server/helper/config_test.go | 7 +-- server/helper/directory.go | 6 +- server/helper/directory_test.go | 6 +- server/helper/file.go | 15 ++--- server/helper/http.go | 31 ++++++---- server/helper/http_test.go | 12 +--- server/helper/json.go | 15 +++-- server/helper/json_test.go | 6 +- server/helper/md5.go | 5 +- server/helper/mongo.go | 76 ++++++++++++++---------- server/helper/mysql.go | 77 ------------------------ server/helper/mysql_test.go | 58 ------------------ server/helper/postgresql.go | 77 ------------------------ server/helper/postgresql_test.go | 56 ------------------ server/helper/redis.go | 70 ---------------------- server/helper/redis_test.go | 38 ------------ server/helper/sqlite.go | 76 ------------------------ server/helper/sqlite_test.go | 58 ------------------ server/test/panic/panic_return_test.go | 18 ++++++ server/test/return/return_test.go | 18 ++++++ 24 files changed, 226 insertions(+), 599 deletions(-) delete mode 100644 server/helper/mysql.go delete mode 100644 server/helper/mysql_test.go delete mode 100644 server/helper/postgresql.go delete mode 100644 server/helper/postgresql_test.go delete mode 100644 server/helper/redis.go delete mode 100644 server/helper/redis_test.go delete mode 100644 server/helper/sqlite.go delete mode 100644 server/helper/sqlite_test.go create mode 100644 server/test/panic/panic_return_test.go create mode 100644 server/test/return/return_test.go diff --git a/server/cmd/serve.go b/server/cmd/serve.go index 1a951e4b..cc631e6b 100644 --- a/server/cmd/serve.go +++ b/server/cmd/serve.go @@ -42,7 +42,11 @@ func runServe() { // Print all the exceptions for better user experience. defer func() { if r := recover(); r != nil { - fmt.Println(r) + if err, ok := r.(error); ok { + fmt.Println(err.Error()) + } else { + fmt.Println(r) + } wait() } }() diff --git a/server/go.mod b/server/go.mod index 0c21d290..d62ba1c1 100644 --- a/server/go.mod +++ b/server/go.mod @@ -15,16 +15,21 @@ require ( github.com/fatih/gomodifytags v1.4.0 // indirect github.com/fatih/structtag v1.2.0 // indirect github.com/go-delve/delve v1.4.0 // indirect + github.com/go-redis/redis v6.15.7+incompatible + github.com/go-sql-driver/mysql v1.5.0 github.com/godoctor/godoctor v0.0.0-20181123222458-69df17f3a6f6 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/haya14busa/goplay v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 + github.com/jackc/pgconn v1.5.0 + github.com/jackc/pgx/v4 v4.6.0 github.com/josharian/impl v0.0.0-20191119165012-6b9658ad00c7 // indirect github.com/json-iterator/go v1.1.9 github.com/karrick/godirwalk v1.15.6 // indirect github.com/klauspost/compress v1.10.5 // indirect github.com/mattn/go-colorable v0.1.6 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/mattn/go-sqlite3 v2.0.3+incompatible github.com/mozillazg/go-pinyin v0.17.0 github.com/neelance/parallel v0.0.0-20160708114440-4de9ce63d14c // indirect github.com/opentracing/basictracer-go v1.1.0 // indirect diff --git a/server/go.sum b/server/go.sum index 24269b68..bc00e7da 100644 --- a/server/go.sum +++ b/server/go.sum @@ -28,12 +28,14 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY= github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= 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/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/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosiner/argv v0.0.0-20170225145430-13bacc38a0a5 h1:rIXlvz2IWiupMFlC45cZCXZFvKX/ExBcSLrDy2G0Lp8= github.com/cosiner/argv v0.0.0-20170225145430-13bacc38a0a5/go.mod h1:p/NrK5tF6ICIly4qwEDsf6VDirFiWWz0FenfYBwJaKQ= @@ -41,6 +43,7 @@ github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg= github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= github.com/cpuguy83/go-md2man v1.0.8/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cweill/gotests v1.5.3 h1:k3t4wW/x/YNixWZJhUIn+mivmK5iV1tJVOwVYkx0UcU= github.com/cweill/gotests v1.5.3/go.mod h1:XZYOJkGVkCRoymaIzmp9Wyi3rUgfA3oOnkuljYrjFV8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -70,6 +73,10 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-redis/redis v6.15.7+incompatible h1:3skhDh95XQMpnqeqNftPkQD9jL9e5e36z/1SUm6dy1U= +github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +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-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= @@ -98,6 +105,7 @@ github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/V github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/godoctor/godoctor v0.0.0-20181123222458-69df17f3a6f6 h1:iRn4qXDcqlb2sFqTdyTdYKjaPoLka7tvcyF+FZA9/qw= github.com/godoctor/godoctor v0.0.0-20181123222458-69df17f3a6f6/go.mod h1:+tyhT8jBF8E0XvdlSXOSL7Iko7DlNiongHq3q+wcsPs= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= @@ -141,6 +149,46 @@ github.com/haya14busa/goplay v1.0.0/go.mod h1:TUcdOVV7TTx0Fo9CmTf16Erfju/DzXTbB7 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/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.5.0 h1:oFSOilzIZkyg787M1fEmyMfOUUvwj0daqYMfaWwNL4o= +github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +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/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.1 h1:Rdjp4NFjwHnEslx2b66FfCI2S0LhO4itac3hXz6WX9M= +github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8 h1:Q3tB+ExeflWUW7AFcAhXqk40s9mnNYLk1nOkKNZ5GnU= +github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/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.3.0 h1:l8JvKrby3RI7Kg3bYEeU9TA4vqC38QDpFCfcrC7KuN0= +github.com/jackc/pgtype v1.3.0/go.mod h1:b0JqxHvPmljG+HQ5IsvQ0yqeSi4nGcDTVjFoiLDb0Ik= +github.com/jackc/pgx v3.6.2+incompatible h1:2zP5OD7kiyR3xzRYMhOcXVvkDZsImVXfj+yIyTQf3/o= +github.com/jackc/pgx v3.6.2+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +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.6.0 h1:Fh0O9GdlG4gYpjpwOqjdEodJUQM9jzN3Hdv7PN0xmm0= +github.com/jackc/pgx/v4 v4.6.0/go.mod h1:vPh43ZzxijXUVJ+t/EmXBtFmbFVO72cuneCT9oAlxAg= +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.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/impl v0.0.0-20191119165012-6b9658ad00c7 h1:dhk1N6iuFDo1Lcew31sAQxrh8GVWaw0xu0MWNnMc6ao= @@ -176,17 +224,27 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= 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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= 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/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561 h1:isR/L+BIZ+rqODWYR/f526ygrBMGKZYFhaaFRDGvuZ8= github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -195,6 +253,9 @@ github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8Bz github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= 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-sqlite3 v1.13.0 h1:LnJI81JidiW9r7pS/hXe6cFeO5EXNq7KbfvoJLRI69c= +github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= +github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -279,10 +340,15 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/godef v1.1.2 h1:c5mCx0EcCORJOdVMREX7Lgh1raTxAHFmOfXdEB9u8Jw= github.com/rogpeppe/godef v1.1.2/go.mod h1:WtY9A/ovuQ+UakAJ1/CEqwwulX/WJjb2kgkokCHi/GY= +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 v0.0.0-20180428102519-11635eb403ff/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v0.0.0-20180523074243-ea8897e79973/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -329,6 +395,7 @@ github.com/stamblerre/gocode v1.0.0 h1:5aTRgkRTOS8mELHoKatkwhfX44OdEV3iwu3FCXyvL github.com/stamblerre/gocode v1.0.0/go.mod h1:ONyGamdxpnxaG2+XLyGkNuuoYISmz0QFVHScxvsXsqM= 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= @@ -363,6 +430,7 @@ github.com/yanyiwu/gojieba v1.1.0 h1:rx+kNP0L7zn+4Zyo1d8aLCfXt3BmIkWQ26FCbGnw1bc github.com/yanyiwu/gojieba v1.1.0/go.mod h1:0AAj9tOG6WWXQ5FNffl4ruBy/hP7bHl2gs+YiDi1aYs= github.com/yanyiwu/gojieba v1.1.2/go.mod h1:54wkP7sMJ6bklf7yPl6F+JG71dzVUU1WigZbR47nGdY= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zmb3/gogetdoc v0.0.0-20190228002656-b37376c5da6a h1:00UFliGZl2UciXe8o/2iuEsRQ9u7z0rzDTVzuj6EYY0= github.com/zmb3/gogetdoc v0.0.0-20190228002656-b37376c5da6a/go.mod h1:ofmGw6LrMypycsiWcyug6516EXpIxSbZ+uI9ppGypfY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -375,8 +443,10 @@ go.starlark.net v0.0.0-20190702223751-32f345186213 h1:lkYv5AKwvvduv5XWP6szk/bvvg go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= go.starlark.net v0.0.0-20200330013621-be5394c419b6 h1:S2s+dYPyDg/vF7KbcRIB2831xVimJoR4zebfoVBzn7Q= go.starlark.net v0.0.0-20200330013621-be5394c419b6/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +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/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= @@ -384,11 +454,14 @@ golang.org/x/arch v0.0.0-20200312215426-ff8b605520f4 h1:cZG+Ns0n5bdEEsURGnDinFsw golang.org/x/arch v0.0.0-20200312215426-ff8b605520f4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/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-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200403201458-baeed622b8d8 h1:fpnn/HnJONpIu6hkXi1u/7rR0NzilgWr4T0JmWkEitk= golang.org/x/crypto v0.0.0-20200403201458-baeed622b8d8/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88= @@ -411,6 +484,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -433,12 +507,15 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h 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-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-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -469,8 +546,10 @@ golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190408220357-e5b8258f4918/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/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 h1:bt+R27hbE7uVf7PY9S6wpNg9Xo2WRe/XQT0uGq9RQQw= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/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-20191030062658-86caa796c7ab/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-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -486,6 +565,8 @@ golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770 h1:M9Fif0OxNji8w+HvmhVQ8KJ golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools/gopls v0.4.0 h1:G4+YP9kaV4dJb79J5MobyApxX493Qa6VoiTceUmxqik= golang.org/x/tools/gopls v0.4.0/go.mod h1:fdOZ8zb6nqlePvfek79JCskQXI4W+i2e1xT+xOPKMcY= +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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= @@ -510,6 +591,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= 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= diff --git a/server/helper/config.go b/server/helper/config.go index fc0d1c37..946d57be 100644 --- a/server/helper/config.go +++ b/server/helper/config.go @@ -17,17 +17,16 @@ import ( ) // GetConfig read `config.toml` and parse `ConfigModel`. -func GetConfig(path string) (config *ConfigModel, err error) { +func GetConfig(path string) (config *ConfigModel) { file, err := os.Open(path) if err != nil { - return nil, err + panic(err) } - defer file.Close() _, err = toml.DecodeReader(file, &config) if err != nil { - return nil, err + panic(err) } // parse mongoDB connection string. diff --git a/server/helper/config_test.go b/server/helper/config_test.go index 5381db75..68bbcb10 100644 --- a/server/helper/config_test.go +++ b/server/helper/config_test.go @@ -10,11 +10,8 @@ package helper import "testing" func TestConfig(t *testing.T) { - config, err := GetConfig("../config.toml") - if err != nil { - t.Error(err) - return - } + config := GetConfig("../config.toml") + t.Logf("server.port: %v", config.Server.Port) t.Logf("database.type: %v", config.Database.Type) diff --git a/server/helper/directory.go b/server/helper/directory.go index 122420f3..b5c40084 100644 --- a/server/helper/directory.go +++ b/server/helper/directory.go @@ -12,6 +12,8 @@ import ( ) // CopyDirectory copy the contents in one directory to another. -func CopyDirectory(sourceDirName, destDirName string) error { - return copy.Copy(sourceDirName, destDirName) +func CopyDirectory(sourceDirName, destDirName string) { + if err := copy.Copy(sourceDirName, destDirName); err != nil { + panic(err) + } } diff --git a/server/helper/directory_test.go b/server/helper/directory_test.go index e36911f6..95915684 100644 --- a/server/helper/directory_test.go +++ b/server/helper/directory_test.go @@ -67,11 +67,7 @@ func TestCopyDirectory(t *testing.T) { } t.Logf("destDirName: %v", destDirName) - err = CopyDirectory(sourceDirName, destDirName) - if err != nil { - t.Error(err) - return - } + CopyDirectory(sourceDirName, destDirName) } func prepareTestTree(root string) error { diff --git a/server/helper/file.go b/server/helper/file.go index ee74a16b..875921bc 100644 --- a/server/helper/file.go +++ b/server/helper/file.go @@ -8,29 +8,30 @@ package helper import ( - "fmt" "io/ioutil" "os" ) // CopyFile copy one file from source path to dest path. -func CopyFile(sourcePath, destPath string) error { +func CopyFile(sourcePath, destPath string) { stat, err := os.Stat(sourcePath) if os.IsNotExist(err) { - return fmt.Errorf("sourcePath is not existed") + panic("sourcePath is not existed") } if stat.IsDir() { - return fmt.Errorf("sourcePath is dir, not file") + panic("sourcePath is dir, not file") } stat, err = os.Stat(destPath) if err == nil && stat.IsDir() { - return fmt.Errorf("destPath is dir") + panic("destPath is dir") } bytes, err := ioutil.ReadFile(sourcePath) if err != nil { - return err + panic(err) } - return ioutil.WriteFile(destPath, bytes, 0755) + if err = ioutil.WriteFile(destPath, bytes, 0755); err != nil { + panic(err) + } } diff --git a/server/helper/http.go b/server/helper/http.go index 2a261f68..1fc7af9a 100644 --- a/server/helper/http.go +++ b/server/helper/http.go @@ -15,23 +15,33 @@ import ( ) // Get create a get request to the server. -func Get(url string) ([]byte, error) { +func Get(url string) []byte { resp, err := http.Get(url) if err != nil { - return nil, err + panic(err) } defer resp.Body.Close() - return ioutil.ReadAll(resp.Body) + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + panic(err) + } + return bytes } // Post create a post request to the server. -func Post(url string, data url.Values) ([]byte, error) { +func Post(url string, data url.Values) []byte { resp, err := http.PostForm(url, data) if err != nil { - return nil, err + panic(err) } defer resp.Body.Close() - return ioutil.ReadAll(resp.Body) + + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + panic(err) + } + + return bytes } // Write write a string response to the web client. @@ -59,7 +69,7 @@ func Writef(w http.ResponseWriter, format string, args ...interface{}) { } // WriteJSON write a json response to the web client. -func WriteJSON(w http.ResponseWriter, obj interface{}) error { +func WriteJSON(w http.ResponseWriter, obj interface{}) { header := w.Header() header.Set("Content-Type", "application/json") @@ -67,12 +77,7 @@ func WriteJSON(w http.ResponseWriter, obj interface{}) error { header.Set("Pragma", "no-cache") header.Set("Expires", "0") - bytes, err := ToJSON(obj) - if err != nil { - return err - } + bytes := ToJSON(obj) w.Write(bytes) - - return nil } diff --git a/server/helper/http_test.go b/server/helper/http_test.go index c5a3e744..9fe4c3d3 100644 --- a/server/helper/http_test.go +++ b/server/helper/http_test.go @@ -17,20 +17,12 @@ import ( ) func TestGet(t *testing.T) { - bytes, err := Get("http://www.baidu.com") - if err != nil { - t.Error(err) - return - } + bytes := Get("http://www.baidu.com") t.Log(string(bytes)) } func TestPost(t *testing.T) { - bytes, err := Post("https://passport.baidu.com/v2/api/?login", url.Values{"username": {"foo"}, "password": {"bar"}}) - if err != nil { - t.Error(err) - return - } + bytes := Post("https://passport.baidu.com/v2/api/?login", url.Values{"username": {"foo"}, "password": {"bar"}}) t.Log(string(bytes)) } diff --git a/server/helper/json.go b/server/helper/json.go index c913c5c5..fefd52aa 100644 --- a/server/helper/json.go +++ b/server/helper/json.go @@ -32,11 +32,18 @@ func init() { } // ToJSON convert interface{} to json bytes. -func ToJSON(obj interface{}) ([]byte, error) { - return jsoniter.Marshal(obj) +func ToJSON(obj interface{}) []byte { + bytes, err := jsoniter.Marshal(obj) + if err != nil { + panic(err) + } + + return bytes } // FromJSON convert json bytes to interface{}. -func FromJSON(bytes []byte, result interface{}) error { - return jsoniter.Unmarshal(bytes, result) +func FromJSON(bytes []byte, result interface{}) { + if err := jsoniter.Unmarshal(bytes, result); err != nil { + panic(err) + } } diff --git a/server/helper/json_test.go b/server/helper/json_test.go index 1e4f4fa2..921c4248 100644 --- a/server/helper/json_test.go +++ b/server/helper/json_test.go @@ -32,11 +32,7 @@ func TestJSON(t *testing.T) { "d": primitiveD, } - bytes, err := ToJSON(obj) - if err != nil { - t.Error(err) - return - } + bytes := ToJSON(obj) t.Log(string(bytes)) } diff --git a/server/helper/md5.go b/server/helper/md5.go index 24940b25..8f620208 100644 --- a/server/helper/md5.go +++ b/server/helper/md5.go @@ -15,6 +15,9 @@ import ( // MD5 convert a string to md5 encrypt string. func MD5(str string) string { h := md5.New() - h.Write([]byte(str)) + if _, err := h.Write([]byte(str)); err != nil { + panic(err) + } + return hex.EncodeToString(h.Sum(nil)) } diff --git a/server/helper/mongo.go b/server/helper/mongo.go index d3d0ed24..74e53b5f 100644 --- a/server/helper/mongo.go +++ b/server/helper/mongo.go @@ -9,7 +9,6 @@ package helper import ( "context" - "fmt" "time" "go.mongodb.org/mongo-driver/bson" @@ -18,29 +17,29 @@ import ( ) // NewMongo create a mongo client using connectionString and databaseName. -func NewMongo(connectionString, databaseName string) (*Mongo, error) { +func NewMongo(connectionString, databaseName string) *Mongo { m := Mongo{connectionString, databaseName, nil, nil} clientOptions := options.Client().ApplyURI(connectionString) client, err := mongo.NewClient(clientOptions) if err != nil { - return nil, err + panic(err) } ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel() - err = client.Connect(ctx) - if err != nil { - return nil, err + if err = client.Connect(ctx); err != nil { + panic(err) } db := client.Database(databaseName) m.Client = client m.Database = db - return &m, nil + + return &m } // Mongo represent a mongo client. @@ -51,56 +50,69 @@ type Mongo struct { Database *mongo.Database } -// ListCollectionNames list collectionNames of database. -func (m Mongo) ListCollectionNames() (collectionNames []string, err error) { +// checkDatabase check if database really created. +func (m Mongo) checkDatabase() { if m.Database == nil { - return nil, fmt.Errorf("mongo client is not created") + panic("mongo client is not created") } +} + +// ListCollectionNames list collectionNames of database. +func (m Mongo) ListCollectionNames() (collectionNames []string) { + m.checkDatabase() + nameOnly := true listOptions := options.ListCollectionsOptions{NameOnly: &nameOnly} - return m.Database.ListCollectionNames(context.TODO(), bson.M{}, &listOptions) + collectionNames, err := m.Database.ListCollectionNames(context.TODO(), bson.M{}, &listOptions) + if err != nil { + panic(err) + } + + return collectionNames } // GetCollection get a collection from collectionName. -func (m Mongo) GetCollection(name string) (collection *mongo.Collection, err error) { - if m.Database == nil { - return nil, fmt.Errorf("mongo client is not created") - } - return m.Database.Collection(name), nil +func (m Mongo) GetCollection(name string) (collection *mongo.Collection) { + m.checkDatabase() + + return m.Database.Collection(name) } // RunCommand run a mongo command. -func (m Mongo) RunCommand(command interface{}) (result *mongo.SingleResult, err error) { - if m.Database == nil { - return nil, fmt.Errorf("mongo client is not created") - } - return m.Database.RunCommand(context.TODO(), command), nil +func (m Mongo) RunCommand(command interface{}) (result *mongo.SingleResult) { + m.checkDatabase() + + return m.Database.RunCommand(context.TODO(), command) } // DropCollection drop a collection. func (m Mongo) DropCollection(name string) error { - if m.Database == nil { - return fmt.Errorf("mongo client is not created") - } + m.checkDatabase() + return m.Database.Collection(name).Drop(context.TODO()) } // InsertOne insert one document to a collection. -func (m Mongo) InsertOne(collectionName string, document interface{}) (*mongo.InsertOneResult, error) { - collection, err := m.GetCollection(collectionName) +func (m Mongo) InsertOne(collectionName string, document interface{}) (result *mongo.InsertOneResult) { + m.checkDatabase() + + collection := m.GetCollection(collectionName) + + result, err := collection.InsertOne(context.TODO(), document) if err != nil { - return nil, err + panic(err) } - return collection.InsertOne(context.TODO(), document) + + return } // InsertMany insert many documents to a collection. -func (m Mongo) InsertMany(collectionName string, documents []interface{}) (*mongo.InsertManyResult, error) { - collection, err := m.GetCollection(collectionName) +func (m Mongo) InsertMany(collectionName string, documents []interface{}) (result *mongo.InsertManyResult) { + collection := m.GetCollection(collectionName) + result, err := collection.InsertMany(context.TODO(), documents) if err != nil { - return nil, err + panic(err) } - return collection.InsertMany(context.TODO(), documents) } // Count get documents count of a collection. diff --git a/server/helper/mysql.go b/server/helper/mysql.go deleted file mode 100644 index a596fb26..00000000 --- a/server/helper/mysql.go +++ /dev/null @@ -1,77 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "database/sql" - "fmt" - - _ "github.com/go-sql-driver/mysql" // mysql driver -) - -// NewMySQL create a new MySQL client. -func NewMySQL(host string, port uint16, username, password, database string) (*MySQL, error) { - db, err := sql.Open("mysql", fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", username, password, host, port, database)) - if err != nil { - return nil, err - } - - err = db.Ping() - if err != nil { - return nil, err - } - - return &MySQL{db}, nil -} - -// MySQL represent a new MySQL client. -type MySQL struct { - DB *sql.DB -} - -// Prepare creates a prepared statement for later queries or executions. -func (m MySQL) Prepare(query string) (*sql.Stmt, error) { - if m.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return m.DB.Prepare(query) -} - -// Exec executes a query without returning any rows. -func (m MySQL) Exec(query string, args ...interface{}) (sql.Result, error) { - if m.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return m.DB.Exec(query, args...) -} - -// Query executes a query that returns rows, typically a SELECT. -func (m MySQL) Query(query string, args ...interface{}) (*sql.Rows, error) { - if m.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return m.DB.Query(query, args...) -} - -// QueryRow executes a query that is expected to return at most one row. -func (m MySQL) QueryRow(query string, args ...interface{}) (*sql.Row, error) { - if m.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return m.DB.QueryRow(query, args...), nil -} - -// Close closes the database and prevents new queries from starting. -func (m MySQL) Close() error { - if m.DB == nil { - return fmt.Errorf("db is not created") - } - return m.DB.Close() -} diff --git a/server/helper/mysql_test.go b/server/helper/mysql_test.go deleted file mode 100644 index 1301f421..00000000 --- a/server/helper/mysql_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "testing" -) - -func TestMySQL(t *testing.T) { - client, err := NewMySQL("localhost", 3306, "root", "root", "test") - if err != nil { - t.Error(err) - return - } - defer client.Close() - - _, err = client.Exec("create table test (name text, age int)") - if err != nil { - t.Error(err) - return - } - - _, err = client.Exec("insert into test (name, age) values ('xiaoming', 12)") - if err != nil { - t.Error(err) - return - } - - rows, err := client.Query("select * from test where name='xiaoming'") - if err != nil { - t.Error(err) - return - } - - for rows.Next() { - var name string - var age int - err := rows.Scan(&name, &age) - if err != nil { - t.Error(err) - return - } - t.Logf("name: %v, age: %v", name, age) - } - - _, err = client.Exec("drop table test") - if err != nil { - t.Error(err) - return - } -} diff --git a/server/helper/postgresql.go b/server/helper/postgresql.go deleted file mode 100644 index 78aeacb2..00000000 --- a/server/helper/postgresql.go +++ /dev/null @@ -1,77 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "context" - "fmt" - - "github.com/jackc/pgconn" - "github.com/jackc/pgx/v4" -) - -// NewPostgreSQL create a new postgreSQL connection. -// -// TODO: PostgreSQL and PostGIS is useful in GIS. We may add GIS feature in the feature. -func NewPostgreSQL(host string, port uint16, user, password, database string) (*PostgreSQL, error) { - connConfig, err := pgx.ParseConfig("") - if err != nil { - return nil, err - } - connConfig.Host = host - connConfig.Port = port - connConfig.User = user - connConfig.Password = password - connConfig.Database = database - - conn, err := pgx.ConnectConfig(context.Background(), connConfig) - if err != nil { - return nil, err - } - - err = conn.Ping(context.TODO()) - if err != nil { - return nil, err - } - - return &PostgreSQL{conn}, nil -} - -// PostgreSQL postgreSQL connection. -type PostgreSQL struct { - Connection *pgx.Conn -} - -// Query query records with sql string. -func (p PostgreSQL) Query(sql string, args ...interface{}) (pgx.Rows, error) { - if p.Connection == nil { - return nil, fmt.Errorf("connection is not created") - } - - return p.Connection.Query(context.Background(), sql, args...) -} - -// Exec execute a sql. -func (p PostgreSQL) Exec(sql string, args ...interface{}) (pgconn.CommandTag, error) { - if p.Connection == nil { - return nil, fmt.Errorf("connection is not created") - } - - return p.Connection.Exec(context.TODO(), sql, args...) -} - -// Close close connection. -func (p PostgreSQL) Close() error { - if p.Connection == nil { - return fmt.Errorf("connection is not created") - } - - return p.Connection.Close(context.TODO()) -} diff --git a/server/helper/postgresql_test.go b/server/helper/postgresql_test.go deleted file mode 100644 index 51c291ed..00000000 --- a/server/helper/postgresql_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "testing" -) - -func TestPostgreSQL(t *testing.T) { - post, err := NewPostgreSQL("localhost", 5432, "postgres", "123", "postgres") - if err != nil { - t.Error(err) - return - } - defer post.Close() - - _, err = post.Exec("create table test (name text, age int)") - if err != nil { - t.Error(err) - return - } - - _, err = post.Exec("insert into test (name, age) values ('xiaoming', 12)") - if err != nil { - t.Error(err) - return - } - - rows, err := post.Query("select * from test where name='xiaoming'") - if err != nil { - t.Error(err) - return - } - - for rows.Next() { - cols, err := rows.Values() - if err != nil { - t.Error(err) - return - } - t.Log(cols) - } - - _, err = post.Exec("drop table test") - if err != nil { - t.Error(err) - return - } -} diff --git a/server/helper/redis.go b/server/helper/redis.go deleted file mode 100644 index a564b6cd..00000000 --- a/server/helper/redis.go +++ /dev/null @@ -1,70 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "fmt" - - "github.com/go-redis/redis" -) - -// Redis represent a new redis client. -// -// TODO: We may use redis to store GIS tiled data in the future. -type Redis struct { - Client *redis.Client -} - -// Create create a new redis client. -func (r Redis) Create(addr string, dbName int) (*Redis, error) { - client := redis.NewClient(&redis.Options{ - Addr: addr, - DB: dbName, - }) - - pong, err := client.Ping().Result() - if err != nil { - return nil, err - } - - if pong != "PONG" { - return nil, fmt.Errorf("redis did not respond with 'PONG', '%s'", pong) - } - - r.Client = client - - return &r, nil -} - -// Set set redis key value. -func (r *Redis) Set(key string, val []byte) error { - return r.Client. - Set(key, val, 0). - Err() -} - -// Get get a redis value through a key. -func (r *Redis) Get(key string) (val []byte, hit bool, err error) { - val, err = r.Client.Get(key).Bytes() - - switch err { - case nil: // cache hit - return val, true, nil - case redis.Nil: // cache miss - return val, false, nil - default: // error - return val, false, err - } -} - -// Del deleta a redis key. -func (r *Redis) Del(key string) (err error) { - return r.Client.Del(key).Err() -} diff --git a/server/helper/redis_test.go b/server/helper/redis_test.go deleted file mode 100644 index 5de8326c..00000000 --- a/server/helper/redis_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import "testing" - -func TestRedis(t *testing.T) { - redis, err := Redis{}.Create("localhost:6379", 0) - if err != nil { - t.Error(err) - return - } - err = redis.Set("foo", []byte("bar")) - if err != nil { - t.Error(err) - return - } - bytes, hit, err := redis.Get("foo") - if err != nil { - t.Error(err) - return - } - if !hit { - t.Error("redis not hit") - return - } - result := string(bytes) - if result != "bar" { - t.Errorf("expect bar, %v get", result) - } -} diff --git a/server/helper/sqlite.go b/server/helper/sqlite.go deleted file mode 100644 index 1b85f73e..00000000 --- a/server/helper/sqlite.go +++ /dev/null @@ -1,76 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "database/sql" - "fmt" - - _ "github.com/mattn/go-sqlite3" // sqlite3 driver for go using database/sql -) - -// NewSQLite create a new sqlite connection. -func NewSQLite(path string) (*SQLite, error) { - db, err := sql.Open("sqlite3", path) - if err != nil { - return nil, err - } - - err = db.Ping() - if err != nil { - return nil, err - } - return &SQLite{db}, nil -} - -// SQLite is a SQLite client. -type SQLite struct { - DB *sql.DB -} - -// Prepare creates a prepared statement for later queries or executions. -func (s SQLite) Prepare(query string) (*sql.Stmt, error) { - if s.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return s.DB.Prepare(query) -} - -// Exec executes a query without returning any rows. -func (s SQLite) Exec(query string, args ...interface{}) (sql.Result, error) { - if s.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return s.DB.Exec(query, args...) -} - -// Query executes a query that returns rows, typically a SELECT. -func (s SQLite) Query(query string, args ...interface{}) (*sql.Rows, error) { - if s.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return s.DB.Query(query, args...) -} - -// QueryRow executes a query that is expected to return at most one row. -func (s SQLite) QueryRow(query string, args ...interface{}) (*sql.Row, error) { - if s.DB == nil { - return nil, fmt.Errorf("db is not created") - } - return s.DB.QueryRow(query, args...), nil -} - -// Close closes the database and prevents new queries from starting. -func (s SQLite) Close() error { - if s.DB == nil { - return fmt.Errorf("db is not created") - } - return s.DB.Close() -} diff --git a/server/helper/sqlite_test.go b/server/helper/sqlite_test.go deleted file mode 100644 index fd06afa1..00000000 --- a/server/helper/sqlite_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// +build ignore - -// Copyright 2017-2020 The ShadowEditor Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. -// -// For more information, please visit: https://github.com/tengge1/ShadowEditor -// You can also visit: https://gitee.com/tengge1/ShadowEditor - -package helper - -import ( - "testing" -) - -func TestSQLite(t *testing.T) { - client, err := NewSQLite("./test.db") - if err != nil { - t.Error(err) - return - } - defer client.Close() - - _, err = client.Exec("create table test (name text, age int)") - if err != nil { - t.Error(err) - return - } - - _, err = client.Exec("insert into test (name, age) values ('xiaoming', 12)") - if err != nil { - t.Error(err) - return - } - - rows, err := client.Query("select * from test where name='xiaoming'") - if err != nil { - t.Error(err) - return - } - - for rows.Next() { - var name string - var age int - err := rows.Scan(&name, &age) - if err != nil { - t.Error(err) - return - } - t.Logf("name: %v, age: %v", name, age) - } - - _, err = client.Exec("drop table test") - if err != nil { - t.Error(err) - return - } -} diff --git a/server/test/panic/panic_return_test.go b/server/test/panic/panic_return_test.go new file mode 100644 index 00000000..1f394616 --- /dev/null +++ b/server/test/panic/panic_return_test.go @@ -0,0 +1,18 @@ +package panic + +import ( + "fmt" + "testing" +) + +func TestReturn(t *testing.T) { + callPanic(true) +} + +func callPanic(flag bool) { + fmt.Println("before panic") + if flag { + panic("Panic!!!") + } + fmt.Println("after panic") +} diff --git a/server/test/return/return_test.go b/server/test/return/return_test.go new file mode 100644 index 00000000..b4404a3d --- /dev/null +++ b/server/test/return/return_test.go @@ -0,0 +1,18 @@ +package return1 + +import ( + "fmt" + "testing" +) + +func TestReturn(t *testing.T) { + result := returnFunc() + fmt.Println(result) +} + +func returnFunc() (result int) { + if result, num := 5, 6; result > 3 { + fmt.Println(num) + } + return +}