From a85b8c7a02e57075b355c49b6ee0eb63f04aa8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BE=E9=87=8C=28barry=29?= Date: Mon, 11 Jul 2022 21:48:26 +0800 Subject: [PATCH 1/3] add skip error --- merge.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/merge.go b/merge.go index 4b47d0b..be9adf2 100644 --- a/merge.go +++ b/merge.go @@ -9,10 +9,13 @@ package mergo import ( + "errors" "fmt" "reflect" ) +var Skip = errors.New("mergo: skip custom transformer") + func hasMergeableFields(dst reflect.Value) (exported bool) { for i, n := 0, dst.NumField(); i < n; i++ { field := dst.Type().Field(i) @@ -82,7 +85,10 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co if config.Transformers != nil && !isReflectNil(dst) && dst.IsValid() { if fn := config.Transformers.Transformer(dst.Type()); fn != nil { err = fn(dst, src) - return + // Allow users to judge by the type of DST and SRC, and skip the check + if err != Skip { + return + } } } From 999fbf9ead19c089ba640fd672f3b4278e91d52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BE=E9=87=8C=28barry=29?= Date: Mon, 11 Jul 2022 22:02:02 +0800 Subject: [PATCH 2/3] fix skip error --- merge.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/merge.go b/merge.go index be9adf2..2c04c88 100644 --- a/merge.go +++ b/merge.go @@ -14,7 +14,7 @@ import ( "reflect" ) -var Skip = errors.New("mergo: skip custom transformer") +var ErrSkip = errors.New("mergo: skip custom transformer") func hasMergeableFields(dst reflect.Value) (exported bool) { for i, n := 0, dst.NumField(); i < n; i++ { @@ -86,7 +86,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co if fn := config.Transformers.Transformer(dst.Type()); fn != nil { err = fn(dst, src) // Allow users to judge by the type of DST and SRC, and skip the check - if err != Skip { + if err != ErrSkip { return } } From 2ee2ab6c79918ce50a110a72ffe0bbf245b3bde2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BE=E9=87=8C=28barry=29?= Date: Mon, 11 Jul 2022 22:03:11 +0800 Subject: [PATCH 3/3] fix skip error --- merge.go | 1 + 1 file changed, 1 insertion(+) diff --git a/merge.go b/merge.go index 2c04c88..fee1b7e 100644 --- a/merge.go +++ b/merge.go @@ -14,6 +14,7 @@ import ( "reflect" ) +// ErrSkip Allow users to judge by the type of DST and SRC, and skip the check var ErrSkip = errors.New("mergo: skip custom transformer") func hasMergeableFields(dst reflect.Value) (exported bool) {