展示HN:Go-mapper – 类似AutoMapper的Go结构体映射工具
我在 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 &u.PasswordHash },
mapper.MapFrom(func(dto CreateUserDto) (string, error) {
return bcrypt.GenerateFromPassword([]byte(dto.Password), bcrypt.DefaultCost)
}),
),
)<p>GitHub: <a href="https://github.com/davitostes/go-mapper">https://github.com/davitostes/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 &u.PasswordHash },
mapper.MapFrom(func(dto CreateUserDto) (string, error) {
return bcrypt.GenerateFromPassword([]byte(dto.Password), bcrypt.DefaultCost)
}),
),
)<p>GitHub: <a href="https://github.com/davitostes/go-mapper">https://github.com/davitostes/go-mapper</a><p>I’d love any feedback, suggestions, or contributions. Thanks!