go设置任意属性

基本定义

// 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)

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。