美文网首页
go设置任意属性

go设置任意属性

作者: 快感炮神 | 来源:发表于2020-09-14 14:10 被阅读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)
    
    

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

    相关文章

      网友评论

          本文标题:go设置任意属性

          本文链接:https://www.haomeiwen.com/subject/djzaektx.html