From 46cd05728d7d6c8fefa81e1ef03748ba89bdcadc Mon Sep 17 00:00:00 2001 From: helei Date: Tue, 21 Jul 2026 23:50:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20Pluck=20?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E5=B7=A5=E5=85=B7=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提取 slice 中每个元素的指定字段值,返回新的切片。 - 泛型实现,支持任意类型 T 和返回类型 R - 空切片返回非 nil 的空切片,避免调用方进行 nil 检查 Co-Authored-By: Claude Opus 4.8 (1M context) --- tools/array.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/array.go b/tools/array.go index f3a8f46..6c52316 100644 --- a/tools/array.go +++ b/tools/array.go @@ -466,3 +466,14 @@ func MapKeys[K comparable, V any](m map[K]V) []K { } return keys } + +func Pluck[T any, R any](slice []T, extractor func(T) R) []R { + if len(slice) == 0 { + return []R{} // 返回空切片而非 nil,避免 nil 检查 + } + result := make([]R, len(slice)) + for i, item := range slice { + result[i] = extractor(item) + } + return result +} From 78e2732a55c71c823c384631be57ed65e6f98b9e Mon Sep 17 00:00:00 2001 From: helei Date: Mon, 27 Jul 2026 09:24:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Float64tostring=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: helei --- tools/any2any.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/any2any.go b/tools/any2any.go index 9f0de29..38d770c 100644 --- a/tools/any2any.go +++ b/tools/any2any.go @@ -735,7 +735,11 @@ func Float64tostring(f float64) string { if f == math.Trunc(f) { return strconv.FormatInt(int64(f), 10) } - return strconv.FormatFloat(f, 'f', 6, 64) + // 用 15 位精度,然后用 TrimRight 去零 + s := strconv.FormatFloat(f, 'f', 15, 64) + s = strings.TrimRight(s, "0") + s = strings.TrimRight(s, ".") + return s } // StrToFloat64 字符串转 float 64