From 90cceca6e7eb72216bf5d20e8808ae648721315b Mon Sep 17 00:00:00 2001 From: Melbex De Leon Date: Mon, 30 May 2022 22:32:10 +0800 Subject: [PATCH] fix: reduce allocations when slice of values --- scan.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scan.go b/scan.go index a611a9ce..ef6849cd 100644 --- a/scan.go +++ b/scan.go @@ -237,6 +237,7 @@ func Scan(rows Rows, db *DB, mode ScanMode) { switch reflectValue.Kind() { case reflect.Slice, reflect.Array: var elem reflect.Value + recyclableStruct := reflect.New(reflectValueType) if !update || reflectValue.Len() == 0 { update = false @@ -261,7 +262,11 @@ func Scan(rows Rows, db *DB, mode ScanMode) { } } } else { - elem = reflect.New(reflectValueType) + if isPtr { + elem = reflect.New(reflectValueType) + } else { + elem = recyclableStruct + } } db.scanIntoStruct(rows, elem, values, fields, joinFields)