Merge branch 'master' of git.zhangdeman.cn:zhangdeman/gopkg
This commit is contained in:
commit
e72c059f67
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 任意类型之间的相互转换
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-23 10:23 下午
|
||||
package convert
|
||||
@ -16,7 +16,7 @@ package convert
|
||||
|
||||
代码中有一个Scaner接口,可以自行实现,然后通过"convertAssign()"函数,作为dst参数传入。
|
||||
|
||||
Author : zhangdeman001@ke.com<张德满>
|
||||
Author : zhangdeman001@ke.com<白茶清欢>
|
||||
|
||||
*/
|
||||
import (
|
||||
|
@ -2,14 +2,14 @@
|
||||
//
|
||||
// Description : easylock...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 6:29 下午
|
||||
package easylock
|
||||
|
||||
// EasyLock ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:18 下午 2021/4/1
|
||||
type EasyLock interface {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : easylock ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-04-01 4:13 下午
|
||||
package easylock
|
||||
@ -13,14 +13,14 @@ type option struct {
|
||||
|
||||
// Option 设置option选项
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:15 下午 2021/4/1
|
||||
type OptionFunc func(o *option)
|
||||
|
||||
// WithFlag 设置flag
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:17 下午 2021/4/1
|
||||
func WithFlag(flag string) OptionFunc {
|
||||
@ -31,7 +31,7 @@ func WithFlag(flag string) OptionFunc {
|
||||
|
||||
// LockCnt 计数lockCnt
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:41 下午 2021/4/1
|
||||
type LockCnt struct {
|
||||
@ -44,7 +44,7 @@ type base struct {
|
||||
|
||||
// ParseOption 解析option
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:24 下午 2021/4/1
|
||||
func (b *base) ParseOption(optionFuncList ...OptionFunc) *option {
|
||||
@ -57,7 +57,7 @@ func (b *base) ParseOption(optionFuncList ...OptionFunc) *option {
|
||||
|
||||
// AddLockCnt 锁数量加一
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:44 下午 2021/4/1
|
||||
func (b *base) AddLockCnt(lockCnt *LockCnt) {
|
||||
@ -66,7 +66,7 @@ func (b *base) AddLockCnt(lockCnt *LockCnt) {
|
||||
|
||||
// DecreaseLockCnt 锁数量
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:45 下午 2021/4/1
|
||||
func (b *base) DecreaseLockCnt(lockCnt *LockCnt) {
|
||||
@ -75,7 +75,7 @@ func (b *base) DecreaseLockCnt(lockCnt *LockCnt) {
|
||||
|
||||
// AddRLockCnt 锁数量加一
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:44 下午 2021/4/1
|
||||
func (b *base) AddRLockCnt(lockCnt *LockCnt) {
|
||||
@ -84,7 +84,7 @@ func (b *base) AddRLockCnt(lockCnt *LockCnt) {
|
||||
|
||||
// DecreaseRLockCnt 锁数量
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:45 下午 2021/4/1
|
||||
func (b *base) DecreaseRLockCnt(lockCnt *LockCnt) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : easylock...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 10:55 下午
|
||||
package easylock
|
||||
@ -11,7 +11,7 @@ import "github.com/pkg/errors"
|
||||
|
||||
// segmentError ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 1:44 下午 2021/2/24
|
||||
func segmentError() error {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 包装各种姿势的锁
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 6:26 下午
|
||||
package easylock
|
||||
@ -11,7 +11,7 @@ import "sync"
|
||||
|
||||
// NewLock获取普通锁实例,因为只有一把锁,flag没有意义,传空即可
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:42 下午 2021/2/24
|
||||
func NewLock() EasyLock {
|
||||
|
@ -2,16 +2,16 @@
|
||||
//
|
||||
// Description : 分段的锁
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 10:44 下午
|
||||
package easylock
|
||||
|
||||
import "github.com/go-developer/gopkg/util"
|
||||
import "git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
|
||||
// NewSegment 获取分段锁
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:20 下午 2021/2/24
|
||||
func NewSegment(segmentCnt int) (EasyLock, error) {
|
||||
|
@ -2,14 +2,14 @@
|
||||
//
|
||||
// Description : easymap...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-23 9:55 下午
|
||||
package easymap
|
||||
|
||||
// EasyMap 约束各种数据接口的实现
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:56 下午 2021/2/23
|
||||
type EasyMap interface {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : easymap...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-23 10:15 下午
|
||||
package easymap
|
||||
@ -11,7 +11,7 @@ import "github.com/pkg/errors"
|
||||
|
||||
// keyNotFound key 不存在
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:17 下午 2021/2/23
|
||||
func keyNotFound(key interface{}) error {
|
||||
@ -20,7 +20,7 @@ func keyNotFound(key interface{}) error {
|
||||
|
||||
// convertFail 数据类型妆换失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:28 下午 2021/2/23
|
||||
func convertFail(err error) error {
|
||||
@ -29,7 +29,7 @@ func convertFail(err error) error {
|
||||
|
||||
// segmentError ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 1:44 下午 2021/2/24
|
||||
func segmentError() error {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 普通的的map,增加锁支持
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-23 10:03 下午
|
||||
package easymap
|
||||
@ -10,12 +10,12 @@ package easymap
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/go-developer/gopkg/convert"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/convert"
|
||||
)
|
||||
|
||||
// NewNormal 获取map实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:07 下午 2021/2/23
|
||||
func NewNormal(withLock bool) EasyMap {
|
||||
@ -31,7 +31,7 @@ func NewNormal(withLock bool) EasyMap {
|
||||
|
||||
// normal 普通map,内部可以加锁
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:03 下午 2021/2/23
|
||||
type normal struct {
|
||||
@ -235,7 +235,7 @@ func (n *normal) Exist(key interface{}) bool {
|
||||
|
||||
// GetAll 读取全部数据使用的是原始数据深拷贝,避免获取到全部数据之后,直接读取导致并发读写
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:36 下午 2021/2/23
|
||||
func (n *normal) GetAll() map[interface{}]interface{} {
|
||||
|
@ -2,18 +2,18 @@
|
||||
//
|
||||
// Description : 分段存储的map,并发行更好,分段数量为 1, 将退化成普通的
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-23 10:47 下午
|
||||
package easymap
|
||||
|
||||
import (
|
||||
"github.com/go-developer/gopkg/util"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
)
|
||||
|
||||
// NewSegment 获取分段map实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:05 下午 2021/2/24
|
||||
func NewSegment(segmentCnt int, withLock bool) (EasyMap, error) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 内置sync.Map + segment
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 2:08 下午
|
||||
package easymap
|
||||
@ -10,7 +10,7 @@ package easymap
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/go-developer/gopkg/convert"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/convert"
|
||||
)
|
||||
|
||||
func NewSync() EasyMap {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : easymap...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 5:57 下午
|
||||
package easymap
|
||||
|
@ -2,18 +2,18 @@
|
||||
//
|
||||
// Description : 内置sync.Map + segment
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 2:08 下午
|
||||
package easymap
|
||||
|
||||
import (
|
||||
"github.com/go-developer/gopkg/util"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
)
|
||||
|
||||
// NewSegmentSync 获取SegmentSync实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:02 下午 2021/2/24
|
||||
func NewSegmentSync(segment int) (EasyMap, error) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 便捷的相关API处理
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-26 2:06 下午
|
||||
package api
|
||||
@ -13,7 +13,7 @@ import (
|
||||
|
||||
// IApi 每一个接口的实现约束
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:08 下午 2021/3/26
|
||||
type IApi interface {
|
||||
@ -29,7 +29,7 @@ type IApi interface {
|
||||
|
||||
// RouterFunc 注册路由的函数
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:09 下午 2021/3/26
|
||||
type RouterFunc func() (method string, uri string, handlerFunc gin.HandlerFunc, middlewareList []gin.HandlerFunc)
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 注册路由
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-26 2:13 下午
|
||||
package api
|
||||
@ -11,7 +11,7 @@ import (
|
||||
"log"
|
||||
"reflect"
|
||||
|
||||
"github.com/go-developer/gopkg/gin/util"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/gin/util"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
@ -25,7 +25,7 @@ var (
|
||||
|
||||
// DisableDebugLog 禁用debug日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:17 下午 2021/3/26
|
||||
func DisableDebugLog() {
|
||||
@ -34,7 +34,7 @@ func DisableDebugLog() {
|
||||
|
||||
// RegisterRouter 注册一个路由
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:14 下午 2021/3/26
|
||||
func RegisterRouter(router *gin.Engine, apiInstanceList ...interface{}) error {
|
||||
@ -106,7 +106,7 @@ func RegisterRouter(router *gin.Engine, apiInstanceList ...interface{}) error {
|
||||
|
||||
// routerLog 记录日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:28 下午 2021/3/26
|
||||
func routerLog(msg string) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 路由注册单元测试
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-26 3:49 下午
|
||||
package api
|
||||
@ -18,7 +18,7 @@ import (
|
||||
|
||||
// TestRegisterRouter ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:50 下午 2021/3/26
|
||||
func TestRegisterRouter(t *testing.T) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : middleware...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-09 5:52 下午
|
||||
package middleware
|
||||
@ -10,13 +10,13 @@ package middleware
|
||||
import (
|
||||
"time"
|
||||
|
||||
commonUtil "git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
"github.com/gin-gonic/gin"
|
||||
commonUtil "github.com/go-developer/gopkg/util"
|
||||
)
|
||||
|
||||
// InitRequest 初始化请求信息,统一设置请求时间/请求ID等信息
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:53 下午 2021/3/9
|
||||
func InitRequest() func(ctx *gin.Context) {
|
||||
|
62
gin/request/util.go
Normal file
62
gin/request/util.go
Normal file
@ -0,0 +1,62 @@
|
||||
// Package request...
|
||||
//
|
||||
// Description : 解析请求
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 8:53 下午
|
||||
package request
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ParseGetRequestURI 解析URL请求参数
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:03 下午 2021/7/24
|
||||
func ParseGetRequestURI(url *url.URL) map[string][]string {
|
||||
url.RawQuery = strings.TrimSpace(url.RawQuery)
|
||||
parseResult := make(map[string][]string)
|
||||
if len(url.RawQuery) == 0 {
|
||||
return parseResult
|
||||
}
|
||||
requestURIArr := strings.Split(url.RawQuery, "&")
|
||||
for _, kvPair := range requestURIArr {
|
||||
kvPair = strings.TrimSpace(kvPair)
|
||||
if len(kvPair) == 0 {
|
||||
continue
|
||||
}
|
||||
kvArr := strings.Split(kvPair, "=")
|
||||
_, keyExist := parseResult[kvArr[0]]
|
||||
if len(kvArr) == 1 {
|
||||
// 识别到 ?a=1&b=2&c 这种格式,默认补齐成 ?a=1&b=2&c=
|
||||
if keyExist {
|
||||
parseResult[kvPair] = append(parseResult[kvPair], "")
|
||||
} else {
|
||||
parseResult[kvPair] = []string{""}
|
||||
}
|
||||
continue
|
||||
}
|
||||
// 兼容参数值中包含=的情况
|
||||
if keyExist {
|
||||
parseResult[kvArr[0]] = append(parseResult[kvArr[0]], strings.Join(kvArr[1:], "="))
|
||||
} else {
|
||||
parseResult[kvArr[0]] = []string{strings.Join(kvArr[1:], "=")}
|
||||
}
|
||||
}
|
||||
return parseResult
|
||||
}
|
||||
|
||||
// ParseGetRequestBody 解析get请求的body
|
||||
//
|
||||
// Author : zhangdeman001@ke.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:07 下午 2021/7/24
|
||||
func ParseGetRequestBody(ctx *gin.Context) {
|
||||
|
||||
}
|
43
gin/request/util_test.go
Normal file
43
gin/request/util_test.go
Normal file
@ -0,0 +1,43 @@
|
||||
// Package request...
|
||||
//
|
||||
// Description : request...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 9:21 下午
|
||||
package request
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestParseGetRequestURI 测试解析请求uri
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:28 下午 2021/7/24
|
||||
func TestParseGetRequestURI(t *testing.T) {
|
||||
type args struct {
|
||||
url *url.URL
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want map[string][]string
|
||||
}{
|
||||
{"不存在任何参数", args{url: &url.URL{RawQuery: ""}}, make(map[string][]string)},
|
||||
{"正常参数", args{url: &url.URL{RawQuery: "name=zhang&age=10"}}, map[string][]string{"name": {"zhang"}, "age": {"10"}}},
|
||||
{"多个相同参数", args{url: &url.URL{RawQuery: "name=zhang&age=10&name=wang"}}, map[string][]string{"name": {"zhang", "wang"}, "age": {"10"}}},
|
||||
{"末尾存在&符", args{url: &url.URL{RawQuery: "name=zhang&age=10&name=wang&"}}, map[string][]string{"name": {"zhang", "wang"}, "age": {"10"}}},
|
||||
{"缺失=号", args{url: &url.URL{RawQuery: "name=zhang&age=10&name=wang&test"}}, map[string][]string{"name": {"zhang", "wang"}, "age": {"10"}, "test": {""}}},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := ParseGetRequestURI(tt.args.url); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("ParseGetRequestURI() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
// Package gin ...
|
||||
// Package util ...
|
||||
//
|
||||
// Description : 结合gin框架的一些工具集
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-09 4:51 下午
|
||||
package util
|
||||
@ -18,7 +18,7 @@ import (
|
||||
|
||||
// Response 向客户端响应数据
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:52 下午 2021/3/9
|
||||
func Response(ctx *gin.Context, code interface{}, message string, data interface{}) {
|
||||
@ -34,7 +34,7 @@ func Response(ctx *gin.Context, code interface{}, message string, data interface
|
||||
|
||||
// RegisterRouter 注册gin路由
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:36 下午 2021/3/9
|
||||
func RegisterRouter(router *gin.Engine, method string, uri string, handler gin.HandlerFunc, middlewareList []gin.HandlerFunc) error {
|
||||
@ -67,7 +67,7 @@ func RegisterRouter(router *gin.Engine, method string, uri string, handler gin.H
|
||||
|
||||
// RegisterRouterGroup 注册gin路由
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:36 下午 2021/3/9
|
||||
func RegisterRouterGroup(router *gin.RouterGroup, method string, uri string, handler gin.HandlerFunc) error {
|
||||
|
4
go.mod
4
go.mod
@ -1,4 +1,4 @@
|
||||
module github.com/go-developer/gopkg
|
||||
module git.zhangdeman.cn/zhangdeman/gopkg
|
||||
|
||||
go 1.15
|
||||
|
||||
@ -15,7 +15,7 @@ require (
|
||||
github.com/tidwall/gjson v1.6.8
|
||||
github.com/tidwall/pretty v1.1.0 // indirect
|
||||
go.uber.org/zap v1.16.0
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
gorm.io/driver/mysql v1.0.4
|
||||
gorm.io/gorm v1.20.12
|
||||
)
|
||||
|
13
go.sum
13
go.sum
@ -42,11 +42,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
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=
|
||||
@ -56,11 +53,9 @@ github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9q
|
||||
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
|
||||
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
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 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
@ -93,11 +88,9 @@ 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.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
|
||||
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
@ -114,7 +107,6 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
go.opentelemetry.io/otel v0.17.0 h1:6MKOu8WY4hmfpQ4oQn34u6rYhnf2sWf1LXYO/UFm71U=
|
||||
go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s=
|
||||
@ -135,7 +127,6 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
@ -152,7 +143,6 @@ golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/Lt
|
||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
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-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@ -192,16 +182,13 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
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=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 动态构建json
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-10 10:26 下午
|
||||
package json
|
||||
@ -13,7 +13,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-developer/gopkg/easylock"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/easylock"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
@ -24,7 +24,7 @@ const (
|
||||
|
||||
// JSONode JSOM节点
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:33 下午 2021/3/10
|
||||
type JSONode struct {
|
||||
@ -42,7 +42,7 @@ type JSONode struct {
|
||||
|
||||
// NewDynamicJSON 获取JSON实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:36 下午 2021/3/10
|
||||
func NewDynamicJSON() *DynamicJSON {
|
||||
@ -62,7 +62,7 @@ func NewDynamicJSON() *DynamicJSON {
|
||||
|
||||
// DynamicJSON 动态json
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:03 下午 2021/3/10
|
||||
type DynamicJSON struct {
|
||||
@ -74,7 +74,7 @@ type DynamicJSON struct {
|
||||
|
||||
// SetValue 设置节点值,如果节点不存在,创建;如果已存在,更新, 多级key使用, value 必须是基础数据类型, 如果是结构体, 需要继续添加path,多级path使用.分割
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:45 下午 2021/3/10
|
||||
func (dj *DynamicJSON) SetValue(path string, value interface{}, isComplexType bool) {
|
||||
@ -102,7 +102,7 @@ func (dj *DynamicJSON) SetValue(path string, value interface{}, isComplexType bo
|
||||
|
||||
// String 获取字符串的格式JSON
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:16 下午 2021/3/11
|
||||
func (dj *DynamicJSON) String() string {
|
||||
@ -114,7 +114,7 @@ func (dj *DynamicJSON) String() string {
|
||||
|
||||
// buildTpl 构建json模版与绑定数据
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:38 下午 2021/3/11
|
||||
func (dj *DynamicJSON) buildTpl(root *JSONode, tplList *[]string, valList *[]interface{}) (*[]string, *[]interface{}) {
|
||||
@ -151,7 +151,7 @@ func (dj *DynamicJSON) buildTpl(root *JSONode, tplList *[]string, valList *[]int
|
||||
|
||||
// getValFormat 构建值得占位符
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:49 下午 2021/3/13
|
||||
func (dj *DynamicJSON) getValFormat(root *JSONode) string {
|
||||
@ -181,7 +181,7 @@ func (dj *DynamicJSON) getValFormat(root *JSONode) string {
|
||||
|
||||
// getStartSymbol 计算起始的符号
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:21 下午 2021/3/13
|
||||
func (dj *DynamicJSON) getStartSymbol(root *JSONode) string {
|
||||
@ -216,7 +216,7 @@ func (dj *DynamicJSON) getStartSymbol(root *JSONode) string {
|
||||
|
||||
// getEndSymbol 计算结束的符号
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:21 下午 2021/3/13
|
||||
func (dj *DynamicJSON) getEndSymbol(root *JSONode) string {
|
||||
@ -246,7 +246,7 @@ func (dj *DynamicJSON) getEndSymbol(root *JSONode) string {
|
||||
|
||||
// Search 搜索一个key TODO : 优化
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:19 下午 2021/3/10
|
||||
func (dj *DynamicJSON) search(root *JSONode, key string) *JSONode {
|
||||
@ -266,7 +266,7 @@ func (dj *DynamicJSON) search(root *JSONode, key string) *JSONode {
|
||||
|
||||
// createNode 创建新的节点
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:57 下午 2021/3/10
|
||||
func (dj *DynamicJSON) createNode(parent *JSONode, key string, value interface{}, isComplexType bool) error {
|
||||
@ -309,7 +309,7 @@ func (dj *DynamicJSON) createNode(parent *JSONode, key string, value interface{}
|
||||
|
||||
// extraSliceIndex 抽取slice索引
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:37 下午 2021/3/11
|
||||
func (dj *DynamicJSON) extraSliceIndex(key string) (bool, int) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : json...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-10 11:44 下午
|
||||
package json
|
||||
@ -14,7 +14,7 @@ import (
|
||||
|
||||
// TestJSON ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:58 下午 2021/3/14
|
||||
func TestJSON(t *testing.T) {
|
||||
@ -42,7 +42,7 @@ func TestJSON(t *testing.T) {
|
||||
|
||||
// TestType 判断数据类型断言
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:59 下午 2021/3/14
|
||||
func TestType(t *testing.T) {
|
||||
@ -51,7 +51,7 @@ func TestType(t *testing.T) {
|
||||
|
||||
// TestSelect 测试动态选择字段
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:47 下午 2021/4/13
|
||||
func TestSelect(t *testing.T) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 将复杂数据结构转化为 JSONNode 树
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-14 10:40 下午
|
||||
package json
|
||||
@ -17,12 +17,12 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/go-developer/gopkg/util"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
)
|
||||
|
||||
// NewParseJSONTree 获取解析的实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:43 下午 2021/3/14
|
||||
func NewParseJSONTree(data interface{}) *ParseJSONTree {
|
||||
@ -31,7 +31,7 @@ func NewParseJSONTree(data interface{}) *ParseJSONTree {
|
||||
|
||||
// ParseJSONTree 解析json树
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:41 下午 2021/3/14
|
||||
type ParseJSONTree struct {
|
||||
@ -40,7 +40,7 @@ type ParseJSONTree struct {
|
||||
|
||||
// Parse 解析数据
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:44 下午 2021/3/14
|
||||
func (pjt *ParseJSONTree) Parse(pathList []string) (*DynamicJSON, error) {
|
||||
@ -77,7 +77,7 @@ func (pjt *ParseJSONTree) Parse(pathList []string) (*DynamicJSON, error) {
|
||||
|
||||
// isLegalData 判断是否能转换成json结构, 只有slice/map/struct/能转换成slice或map的[]byte是合法的
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:46 下午 2021/3/14
|
||||
func (pjt *ParseJSONTree) isLegalData() bool {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : config 日志配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-02 3:07 下午
|
||||
package logger
|
||||
@ -39,7 +39,7 @@ const (
|
||||
|
||||
// RotateLogConfig 日志切割的配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:08 下午 2021/1/2
|
||||
type RotateLogConfig struct {
|
||||
@ -54,14 +54,14 @@ type RotateLogConfig struct {
|
||||
|
||||
// SetRotateLogConfigOption 设置日志切割的选项
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:13 下午 2021/1/2
|
||||
type SetRotateLogConfigFunc func(rlc *RotateLogConfig)
|
||||
|
||||
// WithTimeIntervalType 设置日志切割时间间隔
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:34 下午 2021/1/2
|
||||
func WithTimeIntervalType(timeIntervalType TimeIntervalType) SetRotateLogConfigFunc {
|
||||
@ -72,7 +72,7 @@ func WithTimeIntervalType(timeIntervalType TimeIntervalType) SetRotateLogConfigF
|
||||
|
||||
// WithDivisionChar 设置分隔符
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:49 下午 2021/1/2
|
||||
func WithDivisionChar(divisionChar string) SetRotateLogConfigFunc {
|
||||
@ -83,7 +83,7 @@ func WithDivisionChar(divisionChar string) SetRotateLogConfigFunc {
|
||||
|
||||
// WithMaxAge 设置日志保存时间
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:03 下午 2021/1/2
|
||||
func WithMaxAge(maxAge time.Duration) SetRotateLogConfigFunc {
|
||||
@ -94,7 +94,7 @@ func WithMaxAge(maxAge time.Duration) SetRotateLogConfigFunc {
|
||||
|
||||
// NewRotateLogConfig 生成日志切割的配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:53 下午 2021/1/2
|
||||
func NewRotateLogConfig(logPath string, logFile string, option ...SetRotateLogConfigFunc) (*RotateLogConfig, error) {
|
||||
@ -121,7 +121,7 @@ func NewRotateLogConfig(logPath string, logFile string, option ...SetRotateLogCo
|
||||
|
||||
// formatConfig 格式化配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:23 下午 2021/1/2
|
||||
func formatConfig(c *RotateLogConfig) error {
|
||||
@ -188,7 +188,7 @@ const (
|
||||
|
||||
// defaultTimeEncoder 默认的时间处理
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:53 下午 2021/1/2
|
||||
func defaultTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
@ -200,7 +200,7 @@ func defaultTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
|
||||
// SecondTimeEncoder 秒级时间戳格式化
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:34 下午 2021/1/3
|
||||
func SecondTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
@ -209,7 +209,7 @@ func SecondTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
|
||||
// MsTimeEncoder 毫秒时间格式化方法
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:35 下午 2021/1/3
|
||||
func MsTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
@ -220,7 +220,7 @@ func MsTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
|
||||
// defaultEncodeDuration 默认的原始时间处理
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:56 下午 2021/1/2
|
||||
func defaultEncodeDuration(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
|
||||
@ -229,7 +229,7 @@ func defaultEncodeDuration(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
|
||||
|
||||
// OptionLogger 日志配置的选项
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:41 下午 2021/1/2
|
||||
type OptionLogger struct {
|
||||
@ -280,7 +280,7 @@ func WithEncoder(encoder zapcore.Encoder) SetLoggerOptionFunc {
|
||||
|
||||
// WithUseJsonFormat 日志是否使用json格式数据
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:30 上午 2021/1/3
|
||||
func WithUseJsonFormat(isJsonFormat bool) SetLoggerOptionFunc {
|
||||
@ -291,7 +291,7 @@ func WithUseJsonFormat(isJsonFormat bool) SetLoggerOptionFunc {
|
||||
|
||||
// WithMessageKey 使用message key
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:32 上午 2021/1/3
|
||||
func WithMessageKey(messageKey string) SetLoggerOptionFunc {
|
||||
@ -306,7 +306,7 @@ func WithMessageKey(messageKey string) SetLoggerOptionFunc {
|
||||
|
||||
// WithLevelKey 设置level key
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:33 上午 2021/1/3
|
||||
func WithLevelKey(levelKey string) SetLoggerOptionFunc {
|
||||
@ -321,7 +321,7 @@ func WithLevelKey(levelKey string) SetLoggerOptionFunc {
|
||||
|
||||
// WithTimeKey 设置time key ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:34 上午 2021/1/3
|
||||
func WithTimeKey(timeKey string) SetLoggerOptionFunc {
|
||||
@ -336,7 +336,7 @@ func WithTimeKey(timeKey string) SetLoggerOptionFunc {
|
||||
|
||||
// WithCallerKey 设置caller key
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:37 上午 2021/1/3
|
||||
func WithCallerKey(callerKey string) SetLoggerOptionFunc {
|
||||
@ -351,7 +351,7 @@ func WithCallerKey(callerKey string) SetLoggerOptionFunc {
|
||||
|
||||
// WithShortCaller 是否使用短caller格式
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:39 上午 2021/1/3
|
||||
func WithShortCaller(useShortCaller bool) SetLoggerOptionFunc {
|
||||
@ -362,7 +362,7 @@ func WithShortCaller(useShortCaller bool) SetLoggerOptionFunc {
|
||||
|
||||
// WithTimeEncoder 设置格式化时间方法
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:41 上午 2021/1/3
|
||||
func WithTimeEncoder(encoder zapcore.TimeEncoder) SetLoggerOptionFunc {
|
||||
@ -376,7 +376,7 @@ func WithTimeEncoder(encoder zapcore.TimeEncoder) SetLoggerOptionFunc {
|
||||
|
||||
// WithEncodeDuration 原始时间
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:42 上午 2021/1/3
|
||||
func WithEncodeDuration(encoder zapcore.DurationEncoder) SetLoggerOptionFunc {
|
||||
@ -390,7 +390,7 @@ func WithEncodeDuration(encoder zapcore.DurationEncoder) SetLoggerOptionFunc {
|
||||
|
||||
// GetEncoder 获取空中台输出的encoder
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:24 下午 2021/1/2
|
||||
func GetEncoder(option ...SetLoggerOptionFunc) zapcore.Encoder {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : logger...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-03 12:58 上午
|
||||
package logger
|
||||
@ -14,7 +14,7 @@ import (
|
||||
|
||||
// FormatJson 格式化输出json
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 1:06 上午 2021/1/3
|
||||
func FormatJson(src interface{}) string {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : error 定义日志处理过程中的各种错误
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-02 2:44 下午
|
||||
package logger
|
||||
@ -11,7 +11,7 @@ import "github.com/pkg/errors"
|
||||
|
||||
// CreateLogFileError 创建日志文件失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2:55 下午 2021/1/2
|
||||
func CreateLogFileError(err error, logFilePath string) error {
|
||||
@ -20,7 +20,7 @@ func CreateLogFileError(err error, logFilePath string) error {
|
||||
|
||||
// LogPathEmptyError 日志路径为空
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:03 下午 2021/1/2
|
||||
func LogPathEmptyError() error {
|
||||
@ -29,7 +29,7 @@ func LogPathEmptyError() error {
|
||||
|
||||
// CustomTimeIntervalError 自定义日志切割时间间隔错误
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:11 下午 2021/1/2
|
||||
func CustomTimeIntervalError() error {
|
||||
@ -38,7 +38,7 @@ func CustomTimeIntervalError() error {
|
||||
|
||||
// DealLogPathError 日志路径处理异常
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:31 下午 2021/1/2
|
||||
func DealLogPathError(err error, logPath string) error {
|
||||
@ -47,7 +47,7 @@ func DealLogPathError(err error, logPath string) error {
|
||||
|
||||
// LogSplitTypeError 日志切割类型错误
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:50 下午 2021/1/2
|
||||
func LogSplitTypeError(splitType TimeIntervalType) error {
|
||||
@ -56,7 +56,7 @@ func LogSplitTypeError(splitType TimeIntervalType) error {
|
||||
|
||||
// CreateIOWriteError 创建日志实例失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:20 下午 2021/1/2
|
||||
func CreateIOWriteError(err error) error {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : logger 日志文件
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-02 5:04 下午
|
||||
package logger
|
||||
@ -22,7 +22,7 @@ import (
|
||||
|
||||
// NewLogger 获取日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:05 下午 2021/1/2
|
||||
func NewLogger(loggerLevel zapcore.Level, splitConfig *RotateLogConfig, optionFunc ...SetLoggerOptionFunc) (*zap.Logger, error) {
|
||||
@ -78,7 +78,7 @@ func NewLogger(loggerLevel zapcore.Level, splitConfig *RotateLogConfig, optionFu
|
||||
|
||||
// NewConsoleLogger 获取控制台输出的日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:22 下午 2021/4/17
|
||||
func NewConsoleLogger(loggerLevel zapcore.Level, optionFunc ...SetLoggerOptionFunc) (*zap.Logger, error) {
|
||||
@ -115,7 +115,7 @@ type Logger struct {
|
||||
|
||||
// getWriter 获取日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:08 下午 2021/1/2
|
||||
func (l *Logger) getWriter() (io.Writer, error) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : logger_test 单元测试
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-02 4:59 下午
|
||||
package logger
|
||||
@ -19,7 +19,7 @@ import (
|
||||
|
||||
// Test_Logger ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:50 下午 2021/1/2
|
||||
func Test_Logger(t *testing.T) {
|
||||
@ -41,7 +41,7 @@ func Test_Logger(t *testing.T) {
|
||||
|
||||
// Test_FormatJson 测试json格式化输出
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 1:08 上午 2021/1/3
|
||||
func Test_FormatJson(t *testing.T) {
|
||||
@ -59,7 +59,7 @@ func Test_FormatJson(t *testing.T) {
|
||||
|
||||
// Test_Time 测试格式化纳秒时间戳
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:32 下午 2021/1/3
|
||||
func Test_Time(t *testing.T) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : gorm v2 版本接口实现
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-01 9:52 下午
|
||||
package wrapper
|
||||
@ -18,13 +18,13 @@ import (
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
logger2 "github.com/go-developer/gopkg/logger"
|
||||
logger2 "git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
// NewGormV2 获取日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:56 下午 2021/3/1
|
||||
func NewGormV2(loggerLevel zapcore.Level, consoleOutput bool, encoder zapcore.Encoder, splitConfig *logger2.RotateLogConfig, traceIDField string, skip int) (logger.Interface, error) {
|
||||
@ -47,7 +47,7 @@ func NewGormV2(loggerLevel zapcore.Level, consoleOutput bool, encoder zapcore.En
|
||||
|
||||
// Gorm v2 版本库日志实现
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:55 下午 2021/3/1
|
||||
type Gorm struct {
|
||||
@ -58,7 +58,7 @@ type Gorm struct {
|
||||
|
||||
// LogMode ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:08 下午 2021/3/1
|
||||
func (g *Gorm) LogMode(level logger.LogLevel) logger.Interface {
|
||||
@ -67,7 +67,7 @@ func (g *Gorm) LogMode(level logger.LogLevel) logger.Interface {
|
||||
|
||||
// Info 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:18 下午 2021/3/1
|
||||
func (g *Gorm) Info(ctx context.Context, s string, i ...interface{}) {
|
||||
@ -81,7 +81,7 @@ func (g *Gorm) Info(ctx context.Context, s string, i ...interface{}) {
|
||||
|
||||
// Warn ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:16 下午 2021/3/1
|
||||
func (g *Gorm) Warn(ctx context.Context, s string, i ...interface{}) {
|
||||
@ -95,7 +95,7 @@ func (g *Gorm) Warn(ctx context.Context, s string, i ...interface{}) {
|
||||
|
||||
// Error 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:18 下午 2021/3/1
|
||||
func (g *Gorm) Error(ctx context.Context, s string, i ...interface{}) {
|
||||
@ -109,7 +109,7 @@ func (g *Gorm) Error(ctx context.Context, s string, i ...interface{}) {
|
||||
|
||||
// Trace Trace 记录
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:19 下午 2021/3/1
|
||||
func (g *Gorm) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
|
||||
@ -136,7 +136,7 @@ func (g *Gorm) Trace(ctx context.Context, begin time.Time, fc func() (string, in
|
||||
|
||||
// getTraceID 获取traceID
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:11 下午 2021/3/1
|
||||
func (g *Gorm) getTraceID(ctx context.Context) string {
|
||||
@ -145,7 +145,7 @@ func (g *Gorm) getTraceID(ctx context.Context) string {
|
||||
|
||||
// GetGormSQL 获取tracefn
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:38 下午 2021/3/1
|
||||
func GetGormSQL(dbClient *gorm.DB) func() (string, int64) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : http_gin 使用gin框架时的,记录日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-01-03 3:43 下午
|
||||
package wrapper
|
||||
@ -10,16 +10,16 @@ package wrapper
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
logger2 "git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-developer/gopkg/logger"
|
||||
logger2 "github.com/go-developer/gopkg/logger"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// NewGinLogger 使用gin框架记录日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:45 下午 2021/1/3
|
||||
func NewGinLogger(loggerLevel zapcore.Level, consoleOutput bool, encoder zapcore.Encoder, splitConfig *logger.RotateLogConfig, extractFieldList []string, skip int) (*Gin, error) {
|
||||
@ -43,7 +43,7 @@ func NewGinLogger(loggerLevel zapcore.Level, consoleOutput bool, encoder zapcore
|
||||
|
||||
// Gin 包装gin实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:59 下午 2021/1/3
|
||||
type Gin struct {
|
||||
@ -53,7 +53,7 @@ type Gin struct {
|
||||
|
||||
// formatFieldList 格式化日志field列表
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:13 下午 2021/1/3
|
||||
func (gw *Gin) formatFieldList(ginCtx *gin.Context, inputFieldList []zap.Field) []zap.Field {
|
||||
@ -74,7 +74,7 @@ func (gw *Gin) formatFieldList(ginCtx *gin.Context, inputFieldList []zap.Field)
|
||||
|
||||
// Debug 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:14 下午 2021/1/3
|
||||
func (gw *Gin) Debug(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -84,7 +84,7 @@ func (gw *Gin) Debug(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// Info 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:28 下午 2021/1/3
|
||||
func (gw *Gin) Info(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -94,7 +94,7 @@ func (gw *Gin) Info(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// Warn 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:29 下午 2021/1/3
|
||||
func (gw *Gin) Warn(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -104,7 +104,7 @@ func (gw *Gin) Warn(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// Error 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:29 下午 2021/1/3
|
||||
func (gw *Gin) Error(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -114,7 +114,7 @@ func (gw *Gin) Error(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// Panic 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:29 下午 2021/1/3
|
||||
func (gw *Gin) Panic(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -124,7 +124,7 @@ func (gw *Gin) Panic(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// DPanic 日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:30 下午 2021/1/3
|
||||
func (gw *Gin) DPanic(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
@ -134,7 +134,7 @@ func (gw *Gin) DPanic(ginCtx *gin.Context, msg string, field ...zap.Field) {
|
||||
|
||||
// GetZapLoggerInstance 获取zap日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021/01/03 22:56:47
|
||||
func (gw *Gin) GetZapLoggerInstance() *zap.Logger {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : mysql客户端
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-01 9:20 下午
|
||||
package mysql
|
||||
@ -10,7 +10,7 @@ package mysql
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-developer/gopkg/logger/wrapper"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/logger/wrapper"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
@ -18,7 +18,7 @@ import (
|
||||
|
||||
// GetDatabaseClient 获取日志实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:49 下午 2021/3/1
|
||||
func GetDatabaseClient(conf *DBConfig, logConf *LogConfig) (*gorm.DB, error) {
|
||||
@ -49,7 +49,7 @@ func GetDatabaseClient(conf *DBConfig, logConf *LogConfig) (*gorm.DB, error) {
|
||||
|
||||
// buildConnectionDSN 构建建立连接的DSN
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:34 下午 2021/3/1
|
||||
func buildConnectionDSN(conf *DBConfig) string {
|
||||
|
@ -2,19 +2,19 @@
|
||||
//
|
||||
// Description : 数据定义
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-01 9:27 下午
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"github.com/go-developer/gopkg/logger"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// DBConfig 数据库连接的配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:32 下午 2021/3/1
|
||||
type DBConfig struct {
|
||||
@ -30,7 +30,7 @@ type DBConfig struct {
|
||||
|
||||
// LogConfig 日志配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:51 下午 2021/3/1
|
||||
type LogConfig struct {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 异常定义
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-01 9:42 下午
|
||||
package mysql
|
||||
@ -11,7 +11,7 @@ import "github.com/pkg/errors"
|
||||
|
||||
// ConnectionOpenError 数据库连接失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:43 下午 2021/3/1
|
||||
func ConnectionOpenError(err error) error {
|
||||
@ -20,7 +20,7 @@ func ConnectionOpenError(err error) error {
|
||||
|
||||
// CreateDBLogError 打开日志失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:53 下午 2021/3/1
|
||||
func CreateDBLogError(err error) error {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : redis 客户端
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-27 4:49 下午
|
||||
package redis
|
||||
@ -11,16 +11,16 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-developer/gopkg/convert"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/convert"
|
||||
|
||||
"github.com/go-developer/gopkg/logger"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
redisInstance "github.com/go-redis/redis/v8"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// defaultParseError ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:59 下午 2021/2/27
|
||||
func defaultParseError(err error) error {
|
||||
@ -44,7 +44,7 @@ func defaultParseError(err error) error {
|
||||
|
||||
// Options 连接选项,百分之百兼容第三方包的选项
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:57 下午 2021/2/27
|
||||
type Options struct {
|
||||
@ -63,7 +63,7 @@ type RealClient struct {
|
||||
|
||||
// NewClient 获取redis client实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:05 下午 2021/2/27
|
||||
func NewClient(config map[string]Options, parseErrorFunc func(err error) error) (ClientInterface, error) {
|
||||
@ -80,7 +80,7 @@ func NewClient(config map[string]Options, parseErrorFunc func(err error) error)
|
||||
|
||||
// Client 包装的redis client
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:52 下午 2021/2/27
|
||||
type Client struct {
|
||||
@ -91,7 +91,7 @@ type Client struct {
|
||||
|
||||
// init 初始化redis连接
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:31 下午 2021/2/27
|
||||
func (c *Client) init() error {
|
||||
@ -135,7 +135,7 @@ func (c *Client) init() error {
|
||||
|
||||
// getLogger ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 7:07 下午 2021/2/27
|
||||
func (c *Client) getLogger(conf *LoggerConfig) (*zap.Logger, error) {
|
||||
@ -152,7 +152,7 @@ func (c *Client) getLogger(conf *LoggerConfig) (*zap.Logger, error) {
|
||||
|
||||
// GetRedisClient 获取redis实例
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:16 下午 2021/2/27
|
||||
func (c *Client) GetRedisClient(flag string) (*RealClient, error) {
|
||||
@ -165,7 +165,7 @@ func (c *Client) GetRedisClient(flag string) (*RealClient, error) {
|
||||
|
||||
// log 记录redis请求日志
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:52 下午 2021/2/27
|
||||
func (c *Client) log(ctx *Context, realClient *RealClient, cmdResult redisInstance.Cmder, startTime int64, finishTime int64) {
|
||||
@ -183,7 +183,7 @@ func (c *Client) log(ctx *Context, realClient *RealClient, cmdResult redisInstan
|
||||
|
||||
// CommandProxy 执行命令的代理
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:41 下午 2021/2/27
|
||||
func (c *Client) CommandProxy(ctx *Context, flag string, cmd string, param ...interface{}) (interface{}, error) {
|
||||
@ -210,7 +210,7 @@ func (c *Client) CommandProxy(ctx *Context, flag string, cmd string, param ...in
|
||||
|
||||
// CommandProxyWithReceiver 执行命令,并解析结果
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:00 下午 2021/2/27
|
||||
func (c *Client) CommandProxyWithReceiver(ctx *Context, flag string, receiver interface{}, cmd string, param ...interface{}) error {
|
||||
@ -231,7 +231,7 @@ func (c *Client) CommandProxyWithReceiver(ctx *Context, flag string, receiver in
|
||||
|
||||
// ClientInterface 定义redis client的接口实现,方便单元测试数据mock
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:49 下午 2021/2/27
|
||||
type ClientInterface interface {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : redis...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-27 8:22 下午
|
||||
package redis
|
||||
@ -10,7 +10,7 @@ package redis
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/go-developer/gopkg/easymap"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/easymap"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@ -30,7 +30,7 @@ const (
|
||||
|
||||
// Context 请求上下文
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:25 下午 2021/2/27
|
||||
type Context struct {
|
||||
@ -44,7 +44,7 @@ type Context struct {
|
||||
|
||||
// NewContext 生成一个上下文
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:26 下午 2021/2/27
|
||||
func NewContext(flag string, of ...SetContextFunc) *Context {
|
||||
@ -87,7 +87,7 @@ type SetContextFunc func(rc *Context)
|
||||
|
||||
// WithCtx 设置context
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:30 下午 2021/2/27
|
||||
func WithCtx(ctx context.Context) SetContextFunc {
|
||||
@ -98,7 +98,7 @@ func WithCtx(ctx context.Context) SetContextFunc {
|
||||
|
||||
// WithGinCtx 设置gin上下文
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:34 下午 2021/2/27
|
||||
func WithGinCtx(ginCtx *gin.Context) SetContextFunc {
|
||||
@ -109,7 +109,7 @@ func WithGinCtx(ginCtx *gin.Context) SetContextFunc {
|
||||
|
||||
// WithExtra 设置扩展信息
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:36 下午 2021/2/27
|
||||
func WithExtra(extra easymap.EasyMap) SetContextFunc {
|
||||
@ -120,7 +120,7 @@ func WithExtra(extra easymap.EasyMap) SetContextFunc {
|
||||
|
||||
// WithRequestIDField 设置request_id参数名
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:41 下午 2021/2/27
|
||||
func WithRequestIDField(requestIDField string) SetContextFunc {
|
||||
@ -131,7 +131,7 @@ func WithRequestIDField(requestIDField string) SetContextFunc {
|
||||
|
||||
// WithRequestID ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:42 下午 2021/2/27
|
||||
func WithRequestID(requestID string) SetContextFunc {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : redis...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-27 5:13 下午
|
||||
package redis
|
||||
@ -11,7 +11,7 @@ import "github.com/pkg/errors"
|
||||
|
||||
// FlagNotFound flag不存在异常
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:15 下午 2021/2/27
|
||||
func FlagNotFound(flag string) error {
|
||||
@ -20,7 +20,7 @@ func FlagNotFound(flag string) error {
|
||||
|
||||
// LoggerInitFail 日志初始化失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 7:30 下午 2021/2/27
|
||||
func LoggerInitFail(flag string, err error) error {
|
||||
@ -29,7 +29,7 @@ func LoggerInitFail(flag string, err error) error {
|
||||
|
||||
// EmptyCmd 未设置要执行的命令
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:46 下午 2021/2/27
|
||||
func EmptyCmd() error {
|
||||
@ -38,7 +38,7 @@ func EmptyCmd() error {
|
||||
|
||||
// CommandExecuteFail 命令执行失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:58 下午 2021/2/27
|
||||
func CommandExecuteFail(err error) error {
|
||||
@ -47,7 +47,7 @@ func CommandExecuteFail(err error) error {
|
||||
|
||||
// ReceiverISNIL 数据接收者是空指针
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:05 下午 2021/2/27
|
||||
func ReceiverISNIL() error {
|
||||
@ -56,7 +56,7 @@ func ReceiverISNIL() error {
|
||||
|
||||
// ResultConvertFail 数据结果解析失败
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:07 下午 2021/2/27
|
||||
func ResultConvertFail(err error) error {
|
||||
|
@ -2,19 +2,19 @@
|
||||
//
|
||||
// Description : redis...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-27 5:26 下午
|
||||
package redis
|
||||
|
||||
import (
|
||||
"github.com/go-developer/gopkg/logger"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/logger"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// LoggerConfig 日志配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:26 下午 2021/2/27
|
||||
type LoggerConfig struct {
|
||||
@ -28,7 +28,7 @@ type LoggerConfig struct {
|
||||
|
||||
// LogFieldConfig 日志字段配置
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:20 下午 2021/2/27
|
||||
type LogFieldConfig struct {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : redis...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-27 10:14 下午
|
||||
package redis
|
||||
@ -18,7 +18,7 @@ import (
|
||||
|
||||
// TestCommandProxy ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:22 下午 2021/2/27
|
||||
func TestCommandProxy(t *testing.T) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 按需返回对外暴露的字段
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-10 6:38 下午
|
||||
package safe
|
||||
@ -15,7 +15,7 @@ import (
|
||||
|
||||
// Filter 按需输出数据
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:40 下午 2021/3/10
|
||||
func Filter(source []byte, filter []string) ([]byte, error) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : safe...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-10 10:07 下午
|
||||
package safe
|
||||
|
16
safe/ip.go
16
safe/ip.go
@ -2,26 +2,26 @@
|
||||
//
|
||||
// Description : 安全策略之,访问黑名单
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-07 11:34 下午
|
||||
package safe
|
||||
|
||||
import (
|
||||
"github.com/go-developer/gopkg/easymap"
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/easymap"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// IPBlack ip黑名单
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:35 下午 2021/3/7
|
||||
var IPBlack *ipBlack
|
||||
|
||||
// InitIPBlack 初始化ip黑名单
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:36 下午 2021/3/7
|
||||
func InitIPBlack(ipList []string) error {
|
||||
@ -31,7 +31,7 @@ func InitIPBlack(ipList []string) error {
|
||||
|
||||
// InitIPBlackWithSeg ip黑名单分片存储
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:37 下午 2021/3/7
|
||||
func InitIPBlackWithSeg(seg int, ipList []string) error {
|
||||
@ -53,7 +53,7 @@ type ipBlack struct {
|
||||
|
||||
// Add 添加黑名单IP
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:05 上午 2021/3/8
|
||||
func (ib *ipBlack) Add(ip string) {
|
||||
@ -62,7 +62,7 @@ func (ib *ipBlack) Add(ip string) {
|
||||
|
||||
// Del 删除一个黑名单IP ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:06 上午 2021/3/8
|
||||
func (ib *ipBlack) Del(ip string) {
|
||||
@ -71,7 +71,7 @@ func (ib *ipBlack) Del(ip string) {
|
||||
|
||||
// IsBlack 判断ip是否存在于和名单之中
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:07 上午 2021/3/8
|
||||
func (ib *ipBlack) IsBlack(ip string) bool {
|
||||
|
90
try/catch.go
Normal file
90
try/catch.go
Normal file
@ -0,0 +1,90 @@
|
||||
// Package try...
|
||||
//
|
||||
// Description : catch 的实现
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 10:10 下午
|
||||
package try
|
||||
|
||||
import "reflect"
|
||||
|
||||
// CatchHandler catch的处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:55 下午 2021/7/24
|
||||
type CatchHandler struct {
|
||||
err error // 异常
|
||||
hasDeal bool // 是否已处理
|
||||
}
|
||||
|
||||
// NeedDeal 是否需要处理 : 存在异常切异常没有处理过
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 9:57 下午 2021/7/24
|
||||
func (ch *CatchHandler) NeedDeal() bool {
|
||||
return nil != ch.err && !ch.hasDeal
|
||||
}
|
||||
|
||||
// HasError 判断是否有异常
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:00 下午 2021/7/24
|
||||
func (ch *CatchHandler) HasError() bool {
|
||||
return ch.err != nil
|
||||
}
|
||||
|
||||
// ErrorHasDeal 异常已经处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:01 下午 2021/7/24
|
||||
func (ch *CatchHandler) ErrorHasDeal() bool {
|
||||
return ch.hasDeal
|
||||
}
|
||||
|
||||
// Catch ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:29 下午 2021/7/24
|
||||
func (ch *CatchHandler) Catch(err error, handler func(err2 error)) ICatchHandler {
|
||||
if !ch.NeedDeal() {
|
||||
return ch
|
||||
}
|
||||
//如果传入的error类型和发生异常的类型一致,则执行异常处理器,并将hasCatch修改为true代表已捕捉异常
|
||||
if reflect.TypeOf(err) == reflect.TypeOf(ch.err) {
|
||||
handler(ch.err)
|
||||
ch.hasDeal = true
|
||||
}
|
||||
return ch
|
||||
}
|
||||
|
||||
// CatchAll ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:29 下午 2021/7/24
|
||||
func (ch *CatchHandler) CatchAll(handler func(err error)) FinalHandler {
|
||||
if !ch.NeedDeal() {
|
||||
return ch
|
||||
}
|
||||
handler(ch.err)
|
||||
ch.hasDeal = true
|
||||
return ch
|
||||
}
|
||||
|
||||
func (ch *CatchHandler) Finally(handlers ...func()) {
|
||||
// 遍历处理器,并在Finally函数执行完毕之后执行
|
||||
for _, handler := range handlers {
|
||||
defer handler()
|
||||
}
|
||||
err := ch.err
|
||||
//<7>如果异常不为空,且未捕捉异常,则抛出异常
|
||||
if err != nil && !ch.hasDeal {
|
||||
panic(err)
|
||||
}
|
||||
}
|
131
try/iTry.go
Normal file
131
try/iTry.go
Normal file
@ -0,0 +1,131 @@
|
||||
// Package try...
|
||||
//
|
||||
// Description : 各种接口定义
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 9:47 下午
|
||||
package try
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"runtime"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/easymap"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// ICatchHandler catch处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:12 下午 2021/7/24
|
||||
type ICatchHandler interface {
|
||||
Catch(e error, handler func(err error)) ICatchHandler
|
||||
CatchAll(handler func(err error)) FinalHandler
|
||||
FinalHandler
|
||||
}
|
||||
|
||||
// SystemError 系统异常
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:35 下午 2021/7/24
|
||||
type SystemError struct {
|
||||
error
|
||||
}
|
||||
|
||||
// FinalHandler final处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:12 下午 2021/7/24
|
||||
type FinalHandler interface {
|
||||
Finally(handlers ...func())
|
||||
}
|
||||
|
||||
// WithNormal 入口try函数, 普通的逻辑
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:43 下午 2021/7/24
|
||||
func WithNormal(f func()) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
switch r.(type) {
|
||||
case runtime.Error:
|
||||
t.err = r.(error)
|
||||
case error:
|
||||
t.err = r.(error)
|
||||
case string, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64:
|
||||
t.err = SystemError{SystemError{error: errors.New(fmt.Sprintf("%v", r))}}
|
||||
default:
|
||||
byteData, _ := json.Marshal(r)
|
||||
t.err = SystemError{error: errors.New(string(byteData))}
|
||||
}
|
||||
}
|
||||
}()
|
||||
f()
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithGin 带 gin context 的 try, 可集成gin框架
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:50 下午 2021/7/24
|
||||
func WithGin(ctx *gin.Context, f func(ctx *gin.Context)) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
t.err = r.(error)
|
||||
}()
|
||||
f(ctx)
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithData 带数据的try
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:52 下午 2021/7/24
|
||||
func WithData(data easymap.EasyMap, f func(data easymap.EasyMap)) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
t.err = r.(error)
|
||||
}
|
||||
}()
|
||||
f(data)
|
||||
}()
|
||||
return t
|
||||
}
|
||||
|
||||
// WithInterface 传入任意数据类型
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:53 下午 2021/7/24
|
||||
func WithInterface(data interface{}, f func(data interface{})) ICatchHandler {
|
||||
t := &CatchHandler{}
|
||||
defer func() {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
t.err = r.(error)
|
||||
}
|
||||
}()
|
||||
f(data)
|
||||
}()
|
||||
return t
|
||||
}
|
31
try/iTry_test.go
Normal file
31
try/iTry_test.go
Normal file
@ -0,0 +1,31 @@
|
||||
// Package try...
|
||||
//
|
||||
// Description : try...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-07-24 11:15 下午
|
||||
package try
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestWithNormal ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:16 下午 2021/7/24
|
||||
func TestWithNormal(t *testing.T) {
|
||||
f := func() {
|
||||
var m *url.URL
|
||||
fmt.Println(m.RawQuery)
|
||||
}
|
||||
WithNormal(f).CatchAll(func(err error) {
|
||||
fmt.Println("捕获异常 :" + err.Error())
|
||||
}).Finally(func() {
|
||||
fmt.Println("这里是final")
|
||||
})
|
||||
}
|
10
util/file.go
10
util/file.go
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 文件相关工具
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-04-26 6:00 下午
|
||||
package util
|
||||
@ -18,7 +18,7 @@ import (
|
||||
|
||||
// GetProjectPath 获取项目路径(可执行文件所在目录)
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:32 下午 2021/4/26
|
||||
func GetProjectPath() (string, error) {
|
||||
@ -37,7 +37,7 @@ func GetProjectPath() (string, error) {
|
||||
|
||||
// ReadYmlConfig 读取yml配置问价,并解析到指定的结构体中
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:35 下午 2021/4/26
|
||||
func ReadYmlConfig(filePath string, result interface{}) error {
|
||||
@ -56,7 +56,7 @@ func ReadYmlConfig(filePath string, result interface{}) error {
|
||||
|
||||
// ReadFileContent 读取文件内容
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:37 下午 2021/4/26
|
||||
func ReadFileContent(filePath string) ([]byte, error) {
|
||||
@ -78,7 +78,7 @@ func ReadFileContent(filePath string) ([]byte, error) {
|
||||
|
||||
// IsFileExist 判断文件是否存在
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:37 下午 2021/4/26
|
||||
func IsFileExist(filePath string) (bool, bool) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : util...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-02-24 11:04 下午
|
||||
package util
|
||||
@ -15,7 +15,7 @@ import (
|
||||
|
||||
// GetHashID ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:04 下午 2021/2/24
|
||||
func GetHashID(key interface{}) uint64 {
|
||||
@ -24,7 +24,7 @@ func GetHashID(key interface{}) uint64 {
|
||||
|
||||
// GetHashIDMod 获取hashID并取模
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:07 下午 2021/2/24
|
||||
func GetHashIDMod(key interface{}, shard int) int {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : util...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-09 5:56 下午
|
||||
package util
|
||||
@ -11,7 +11,7 @@ import "net"
|
||||
|
||||
// GetHostIP 获取本机IP地址
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:58 下午 2021/3/9
|
||||
func GetHostIP() string {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : 字符串相关的工具
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-09 6:00 下午
|
||||
package util
|
||||
@ -16,7 +16,7 @@ import (
|
||||
|
||||
// GenRandomString 获取随机长度的字符串
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:01 下午 2021/3/9
|
||||
func GenRandomString(source string, length uint) string {
|
||||
@ -38,7 +38,7 @@ func GenRandomString(source string, length uint) string {
|
||||
|
||||
// Md5 对字符串进行md5加密
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:01 下午 2021/3/9
|
||||
func Md5(str string) string {
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Description : util ...
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-03-14 11:11 下午
|
||||
package util
|
||||
@ -11,7 +11,7 @@ import "encoding/json"
|
||||
|
||||
// StructToMap 结构体转为map
|
||||
//
|
||||
// Author : go_developer@163.com<张德满>
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:12 下午 2021/3/14
|
||||
func StructToMap(data interface{}) (map[string]interface{}, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user