golang构造函数的最佳实践-FOP模式

向量数据库大模型云通信

今年活下去就是最好的岁月静好

  1. 前言

golang构造函数的初始化相信大家信手拈来,但是如果写出可扩展的,向后兼容且容易维护的构造函数,那是相当不容易的。那么这篇文章我将带领大家学习这项新的技能。picture.image

  1. 不好的写法

  
type Student struct {  
 Name string  
}  
  
func NewStudent(name string) *Student {  
 return &Student{  
  Name: name,  
 }  
}  

可以看到当有一个属性name的时候构造函数挺简单的,但是后面需求变更了,要增加一个age属性,那么这个时候你就得修改Student结构体和构造函数,这样非常不利于扩展和维护, 那么怎么解决呢? picture.image

  1. 函数选项模式彻底搞定它

懂得人都懂,不懂的人会懂,接下来开始炫技了,请大家带上瓜子和板凳静听我娓娓道来。闲话不多说,直接上干货:

  
type Student struct {  
    Name string  
    Age int  
}  
  
//定义类型函数  
type StudentOption func(*Student)  
  
//创建带有age的构造函数  
func WithAge(age int) StudentOption{  
    return func(s *Student){  
        s.Age = age  
    }  
}  
  
//创建带有默认值的构造函数   
func NewStudent(name string, options ...StudentOption) *Student{  
    student := &Student{Name:name, Age:5}  
    for _,o :=range options{  
        o(student)  
    }  
    return student  
}  

看到了吗, 我滴个乖乖 ,如此优雅的写法第一次见,那照这么说当我增加第三个属性sex的时候,那就再写一个WithSex就行了,不会改动之前已有的逻辑,这样当我实例化的时候NewStudent(“lisi”, WithAge(6),WithSex("男"))就行了,这样很方便不是吗,是的,我现在很明确告诉你非常方便。picture.image

  1. 小结

Functional Options Pattern(简称FOP模式)这种函数选项模式既保持了兼容性,而且每增加1个新属性只需要1个With函数即可,大大减少了修改代码的风险,所以这种秀操作为什么还不在项目中实践呢?picture.image

  1. 关注公众号

微信公众号:堆栈future

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论