@@ -163,4 +163,85 @@ student:
163163 * SetEnabledAutoTypeConvert // auto type convert
164164 * IsEnabledAutoTypeConvert
165165 * SetEnabledMapperStructField // mapper struct field
166- * IsEnabledMapperStructField
166+ * IsEnabledMapperStructField
167+
168+ ## New Generic APIs (v0.8+)
169+
170+ Version 0.8 introduces a new set of generic mapping functions with better performance and simpler usage.
171+
172+ ### Performance
173+
174+ | Method | Old | New | Improvement |
175+ | --------| -----| -----| -------------|
176+ | Single mapping | 3,897 ns/op | 556 ns/op | ** 7x faster** |
177+ | Slice mapping (100 items) | 452,718 ns/op | 59,185 ns/op | ** 7.6x faster** |
178+ | Memory allocation | 400 B/op | 272 B/op | ** -32%** |
179+ | Allocations | 42 allocs/op | 4 allocs/op | ** -90%** |
180+
181+ ### New APIs
182+
183+ ``` go
184+ // Single mapping - direct return result
185+ dto := mapper.MapDirect [Source, Target ](source)
186+
187+ // Pointer version
188+ dto := mapper.MapDirectPtr [Source, Target ](&source)
189+
190+ // Slice mapping
191+ dtos := mapper.MapDirectSlice [Source, Target ](sources)
192+
193+ // Pointer slice mapping
194+ dtos := mapper.MapDirectPtrSlice [Source, Target ](&sources)
195+
196+ // With error handling
197+ dto , err := mapper.SafeMapDirect [Source, Target ](source)
198+
199+ // Slice with error handling
200+ dtos , err := mapper.SafeMapDirectSlice [Source, Target ](sources)
201+ ```
202+
203+ ### Example
204+
205+ ``` go
206+ package main
207+
208+ import (
209+ " fmt"
210+ " github.com/devfeel/mapper"
211+ )
212+
213+ type User struct {
214+ ID int64 ` mapper:"id"`
215+ Name string ` mapper:"name"`
216+ Age int ` mapper:"age"`
217+ }
218+
219+ type UserDTO struct {
220+ ID int64 ` json:"id"`
221+ Name string ` json:"name"`
222+ Age int ` json:"age"`
223+ }
224+
225+ func main () {
226+ // Single mapping
227+ user := User{ID: 1 , Name: " Tom" , Age: 20 }
228+ dto := mapper.MapDirect [User, UserDTO](user)
229+ fmt.Printf (" %+v \n " , dto)
230+
231+ // Slice mapping
232+ users := []User{
233+ {ID: 1 , Name: " Tom" , Age: 20 },
234+ {ID: 2 , Name: " Jerry" , Age: 25 },
235+ }
236+ dtos := mapper.MapDirectSlice [User, UserDTO](users)
237+ fmt.Printf (" %+v \n " , dtos)
238+ }
239+ ```
240+
241+ ### Benchmark Tests
242+
243+ Run benchmarks to verify performance:
244+
245+ ``` bash
246+ go test -bench=Benchmark_MapDirect -benchmem -count=3 ./...
247+ ```
0 commit comments