一些开发心得总结

在实际的开发中会慢慢地受到大家的一些指导以及问题的提出,希望自己可以在工作学习生活中不断的总结下这些问题。
仅以此记录自己的经验教训(可能在其他人看起来很傻,很easy,但是进步就是由一点点的问题积累出来的,自己努力才是真,总可以从别人身上学习到什么,心态take easy ok?)

缓存

  • 关于缓存过期时间的设定;
    我们在实际的开发中可以不用把缓存的key-value的过期时间写死,可以写成一个相对动态的概念。即比如我们在缓存中要存一个token,而这个token的value过期时间为一天24小时,那么正常来说我们可能在请求接口获取token后把他存到缓存中,可能下意识的把过期时间设置为60 * 60* 24,那么这里可能会涉及到临界问题以及请求接口返回的token失效问题,处理办法首先肯定得增加重试机制,当我们发现请求失败后需要重新获取token来重试发送请求,这样能进一步的排除是由token失效导致的请求失败的几率。还有一种办法就是当我们能确定由接口请求来的token是确定在每天的某一个点失效的时候(比如token就是在凌晨失效),我们可以通过date()时间函数来获取当前日期的时间戳来加上60 * 60* 24再减去当前的时间戳,得到的结果设置为缓存失效时间,这样我们就能购动态的设定一个token的过期时间永远是当天的凌晨。

GO

  • 传入参数方面
    在开发接口实际的代码之前首先要做的就是对传入参数一定要进行参数校验,比如传入参数的类型是哪种数据类型,是指针类型还是数值类型。如果是指针类型,要先判断指针是否为空,指针指向不为空那么要判断指针指向的内容是否为空或者指向的数值类型是否在一定程度上对需求范围产生了越界问题。如果是数值类型要判断,传入的数值参数是否有效,这点和前面就有类似的含义了,比如字符串类型就判断是否为空,数值类型就判断是否数值范围越界等。
  • 返回值方面
    返回值方面要注意的无非就是一个函数返回值的所有可能性,因为go没有trycatch这种异常捕获处理机制,所以我们更需要在我们编写代码的过程中来考虑全所有参数可能存在的异常情况,比如指针是否为空、数组或切片长度是否为0、一个参数是否为0或者是否为负数等,我们要对这种可能出现问题的进行出错处理,当我们处理这些问题的时候,我们就要看我们返回值的类型都是什么,如果返回值的类型为指针,我们可能会指向为nil,当我们返回值为一个切片,我们要返回一个空切片或者一个nil切片,当要返回一个数值的时候,我们要返回0或者-1类似的值。
    注意:一般不会有return nil,nil这种返回情况

初始化

  • 初始化问题真的是体现细节的一个地方,虽然说go语言会自动帮你初始化,但是毕竟开发是自己做的事,还是要注意所有的细节呢,尤其是对一些连接的定义和初始化工作,最好不要放在for循环中去做,这样会占用资源的呢~

数据库

  • 在执行一些数据库的逻辑操作时一定要想清楚,操作产生的影响,其中包括操作成功和操作失败的影响以及在操作过程中有没有其他的影响。比如操作失败时,我们要进行回滚操作,那么回滚操作的条件是什么,比如一个发券操作,发券是一个一系列数据库执行操作,这一系列操作的成功设立了一个单独的flag标志位即success标记,而非根据在执行这些操作的过程中是否有错误来判断,即err!= nil条件判断。为什么修改呢?是因为在代码中当发放前以及发放后针对当前的发放总数大于额定总数时,我们会主动抛出一个错误而非是因为操作过程失败而代码抛出异常err,所以最终的err仍为空,但已经出问题了而之前的操作并没有回滚。
  • 在对数据库进行查操作的时候尽量不要distinct写进sql语句中,因为这种去重这种操作做在数据库层面会让数据库的查询变慢,尤其是面对大量数据的时候会在峰值进行性能影响
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值