转换器
Golang 结构之间的简单类型转换器。
这个包试图匹配一个结构上的属性名称和类型来进行转换。
使用方法
假设你有一个DTO需要转换为一个Model:
package main
import (
"fmt"
"github.com/VictorRibeiroLima/converter"
)
type User struct {
ID uint
UserName string
Password string
IsAdmin bool
}
type CreateUserDto struct {
UserName string
Password string
}
如果DTO和Model不完全匹配,你就无法进行转换:
func main() {
var user User
dto := CreateUserDto{
UserName: "LukeSlywalker",
Password: "benKenoby1977",
}
user = (User)(dto)//cannot convert dto (variable of type CreateUserDto) to User
fmt.Println(user)
}
这就是为什么制作了这个包,以实现这些简单的转换:
func main() {
var user User
dto := CreateUserDto{
UserName: "LukeSlywalker",
Password: "benKenoby1977",
}
converter.Convert(&user, dto)
fmt.Println(user) //{0 LukeSlywalker benKenoby1977 false}
/*
User{
ID: 0,
UserName: "LukeSlywalker",
Password: "benKenoby1977",
IsAdmin: false
}
*/
}
高级用法
让我们更深入地了解一下这些使用情况。
如果你有一个嵌套结构在你的模型和DTO里面,让我们把一些指针也扔在里面(GORM用它来做数据库的NOT NULL字段)怎么办?
package main
import (
"fmt"
"github.com/VictorRibeiroLima/converter"
)
type Address struct {
ID uint
Country string
City string
Street string
}
type User struct {
ID uint
UserName *string
Password *string
IsAdmin bool
Address Address
}
type AddressDto struct {
Country string
City string
Street string
}
type CreateUserDto struct {
UserName string
Password string
Address AddressDto
}
func main() {
var user User
address := AddressDto{
Country: "Jundland Wastes",
City: "Great Chott salt flat",
Street: "Lars homestead",
}
dto := CreateUserDto{
UserName: "LukeSlywalker",
Password: "benKenoby1977",
Address: address,
}
converter.Convert(&user, dto)
fmt.Println(user)
/*
User{
ID: 0,
UserName: 0xc000010250,
Password: 0xc000010260,
IsAdmin: false,
Address: {
ID 0,
Country: "Jundland Wastes",
City: "Great Chott salt flat",
Street: "Lars homestead",
}
}
*/
}
- (user.UserName user.Password) will not be pointers to (dto.UserName dto.Password)
你也可以这样做:
- 数组到数组
- 片断到片断
- 指针到值
- 值到指针
- 指针到指针
- 结构片到另一结构片的转换
- 结构的指针的片断到另一个结构的值的片断
你会明白的