展示HN:Go-mapper – 类似AutoMapper的Go结构体映射工具

4作者: davitostes8 个月前原帖
我在 C# 和 .NET 方面有很多工作经验,而在使用 Go 时,我非常想念的一个工具就是 AutoMapper。<p>因此,我开发了 go-mapper,这是一个轻量级的 Go 包,帮助在结构体之间进行映射——对于将 DTO 转换为领域模型等场景非常有用。<p>该工具使用 Go 泛型(1.18 及以上版本) 支持字段的浅拷贝 提供流畅的 API 进行自定义字段转换 可选的接口用于结构体级别的控制<p>示例:<p>type CreateUserDto struct { Name string Password string }<p>type User struct { Name string PasswordHash string }<p>mapper.CreateProfile(CreateUserDto{}, User{}, mapper.ForMember(func(u *User) any { return &amp;u.PasswordHash }, mapper.MapFrom(func(dto CreateUserDto) (string, error) { return bcrypt.GenerateFromPassword([]byte(dto.Password), bcrypt.DefaultCost) }), ), )<p>GitHub: <a href="https:&#x2F;&#x2F;github.com&#x2F;davitostes&#x2F;go-mapper">https:&#x2F;&#x2F;github.com&#x2F;davitostes&#x2F;go-mapper</a><p>我非常欢迎任何反馈、建议或贡献。谢谢!
查看原文
I’ve worked a lot with C# and .NET, and one tool I really missed when using Go was AutoMapper.<p>So I built go-mapper, a lightweight Go package that helps map between structs — useful for converting DTOs to domain models, etc.<p>Uses Go generics (1.18+) Supports shallow copy of fields Custom field transformations with fluent API Optional interface for struct-level control<p>Example:<p>type CreateUserDto struct { Name string Password string }<p>type User struct { Name string PasswordHash string }<p>mapper.CreateProfile(CreateUserDto{}, User{}, mapper.ForMember(func(u *User) any { return &amp;u.PasswordHash }, mapper.MapFrom(func(dto CreateUserDto) (string, error) { return bcrypt.GenerateFromPassword([]byte(dto.Password), bcrypt.DefaultCost) }), ), )<p>GitHub: <a href="https:&#x2F;&#x2F;github.com&#x2F;davitostes&#x2F;go-mapper">https:&#x2F;&#x2F;github.com&#x2F;davitostes&#x2F;go-mapper</a><p>I’d love any feedback, suggestions, or contributions. Thanks!