go设置任意属性

2020-09-14  本文已影响0人  快感炮神

基本定义

// User  用户
type User struct {
    ID int  // id
    Gender int  // 性别
    Name string  // 名字
}

// NewUser 构造函数
// 利用可变参数传入属性方法
func NewUser(fs ...UserAttrFunc) *User {
    user := new(User)
    UserAttrFuncs(fs).apply(user)
    return user
}

属性处理

// UserAttrFunc 设置用户属性
type UserAttrFunc func(*User)
// UserAttrFuncs 属性设置方法切片
type UserAttrFuncs []UserAttrFunc

func (u UserAttrFuncs) apply(user *User) {
    for _, f := range u {
        f(user)
    }
}

// WithUserGender 设置性别
func WithUserGender(gender int) func(*User) {
    return func(user *User) {
        user.Gender = gender 
    }
}

// WithUserName 设置名字
func WithUserName(name string) func(*User) {
    return func(user *User) {
        user.Name=name
    }
}

调用

u: = Object.NewUser(
    Object.WithUserGender(1),
    Object.WithUserName("jingjing"),
)
fmt.Println(u)

优点是逼格高了,缺点是代码多了

上一篇 下一篇

猜你喜欢

热点阅读