From 30bf687d1b445f4cf698d199bcc6288525adea81 Mon Sep 17 00:00:00 2001 From: Jane Haring <52415314+wwxiaoqi@users.noreply.github.com> Date: Fri, 23 Jan 2026 20:19:53 +0800 Subject: [PATCH] :technologist: replace reflect.DeepEqual with custom func for arg comparison. (#16884) --- kernel/task/queue.go | 86 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/kernel/task/queue.go b/kernel/task/queue.go index b80f0081e..1ae5124b3 100644 --- a/kernel/task/queue.go +++ b/kernel/task/queue.go @@ -91,7 +91,7 @@ func containTask(task *Task, tasks []*Task) bool { } for i, arg := range t.Args { - if !reflect.DeepEqual(arg, task.Args[i]) { + if !areArgsEqual(arg, task.Args[i]) { return false } } @@ -101,6 +101,90 @@ func containTask(task *Task, tasks []*Task) bool { return false } +// areArgsEqual 比较两个参数是否相等 +func areArgsEqual(a, b interface{}) bool { + + // 如果两个参数都为 nil + if a == nil && b == nil { + return true + } + if a == nil || b == nil { + return false + } + + // 快速处理常见的基本类型 + switch av := a.(type) { + case string: + if bv, ok := b.(string); ok { + return av == bv + } + case int: + if bv, ok := b.(int); ok { + return av == bv + } + case int64: + if bv, ok := b.(int64); ok { + return av == bv + } + case int32: + if bv, ok := b.(int32); ok { + return av == bv + } + case bool: + if bv, ok := b.(bool); ok { + return av == bv + } + case float64: + if bv, ok := b.(float64); ok { + return av == bv + } + case float32: + if bv, ok := b.(float32); ok { + return av == bv + } + case uint: + if bv, ok := b.(uint); ok { + return av == bv + } + case uint64: + if bv, ok := b.(uint64); ok { + return av == bv + } + case uint32: + if bv, ok := b.(uint32); ok { + return av == bv + } + case []string: + if bv, ok := b.([]string); ok { + if len(av) != len(bv) { + return false + } + for i := range av { + if av[i] != bv[i] { + return false + } + } + return true + } + case []int: + if bv, ok := b.([]int); ok { + if len(av) != len(bv) { + return false + } + for i := range av { + if av[i] != bv[i] { + return false + } + } + return true + } + } + + // 未处理的复杂类型,回退到 reflect.DeepEqual + return reflect.DeepEqual(a, b) +} + + func getCurrentTasks() (ret []*Task) { queueLock.Lock() defer queueLock.Unlock()