golang 代码扩展
来源:互联网 发布:js判断是否为空 empty 编辑:程序博客网 时间:2024/06/08 04:01
在写业务逻辑的时候如何写可扩展的代码?之后加功能怎么不影响原来的代码?-------------------以下是具体的应用------------------------------//用户需要符合某些规则才能购买产品//1.在某个时间段,2.产品订单金额大于一个数//实现代码如下//定义结构体(规则相关的参数)type Rule struct {Key stringTimeStart stringTimeEnd stringOrderAmount int}//map关系var muxRule map[string]func(rule *Rule) error//定义register,有新的规则则需要调用一下这个函数进行注册func registerBuy(key string, f func(rule *Rule) error) {if muxRule == nil {muxRule = make(map[string]func(rule *Rule) error)}if _, exist := muxRule[key]; exist {fmt.Println("handler exist")}muxRule[key] = f}//factory,调用实际方法,返回结果func factoryBuy(rule *Rule) error {return muxRule[rule.Key](rule)}func Test_rule(t *testing.T) {//实现规则一rule1 := &Rule{Key:"rule1",TimeStart:"2010-01-01 OO:00:00",TimeEnd:"2020-01-01 OO:00:00",}opRule1 := func(rule *Rule) error {if rule.TimeStart > time.Now().Format("2006-01-02 15:04:05") || rule.TimeEnd < time.Now().Format("2006-01-02 15:04:05") {return errors.New("time is invalid")}return nil}//实现规则二rule2 := &Rule{Key:"rule2",OrderAmount:100,}//设传入参数用户购买金额为10amount := 10opRule2 := func(rule *Rule) error {if rule.OrderAmount != amount {return errors.New("orderAmount is invalid")}return nil}registerBuy("rule1",opRule1)registerBuy("rule2",opRule2)ret1 := factoryBuy(rule1)ret2 := factoryBuy(rule2)if ret2 != nil || ret1 != nil {fmt.Printf("ret %v\n",ret1)fmt.Printf("ret %v\n",ret2)}else {fmt.Println("OK!")}}输出结果:orderAmount is invalid
阅读全文
0 0
- golang 代码扩展
- Golang 模块扩展
- cmdline-扩展golang std.flag
- golang-代码规范
- 【GOLANG】http请求代码
- 开始编写Golang代码
- GDB调试golang代码
- golang随机抽奖代码
- Golang 代码程序案例
- golang代码案例
- golang常用代码块
- golang多进程测试代码
- golang: 官博译文:可测试的 Golang 代码示例
- golang初探之安装与代码组织
- 统计代码行数工具 用golang实现
- Golang 计算目录中代码的行数
- golang日志中心取日志代码分享
- golang项目邮件发送模块代码分享
- 【Android笔记-7】Fragment碎片
- C-Free 5.0之头文件路径设置问题
- SpringBoot集成Rabbit使用TopicRabbit指定发送集合
- 最简单的checkbox全选反选操作
- UVA 1203 Argus
- golang 代码扩展
- SpringBoot整合多数据源xml方式
- Parallel.For()和普通的for性能比较
- Spring boot 两种热部署方式 springloader 和 devtools
- jsp中嵌入iframe,因为请求域名相同导致session失效
- (原创)ContentProvider内容提供者入门
- Java网络编程——Socket
- 服务篇二---文件服务器smaba
- Mybatis框架常见面试题