Uber Go 语言代码风格指南可以参考下:https://www.cnblogs.com/ricklz/p/11670932.html

最近写代码,老是被吐槽,代码写的不好,细节处理的不好。

那么下面来总结下平时遇到的点,并且需要改进的地方。

一、命名不规范

1、经常遇到变量的名字写错

coding 注意事项(总结中)

 2、命名不地道,拼音就不要存在了,读代码的时候看到命名就知道这个函数和变量的作用

 3、不要出现无脑的错错别字

coding 注意事项(总结中)

4、对于每个注释我们也要认真的对待

coding 注意事项(总结中)

 

 虽然对于一些一眼就看明白用法的函数,我们不用加上文字的描述,但是函数一定要对应好

二、珍惜每一个参数变量的命名和使用

1、没用到的参数变量尽量不要去申请

 

 param明显的没有用到,这时候我们就没有必要再去声明了,可以直接发个nil到函数里面。

coding 注意事项(总结中)

 

  

2、对于一些数组的操作当我们知道要传入的值的时候可以直接初始化,不用刻意的append

 coding 注意事项(总结中)

 

 如果改成下面的是不是就会优雅很多了呢

 coding 注意事项(总结中)

 

3、返回参数如果采用命名变量,那么就不要在 return 的时候,又带上其他变量。不要混用。容易出 bug。

func (h *PrefixAppliesHandler) DoOrder(id flake.ID, orderGoods []proto.OrderGoodsInput) (outOrder proto.OrdersInput, outGoodsList []proto.OrderGoodsOutput, err error) {
   var inputOrder proto.OrdersInput
   var goodsList []proto.OrderGoodsOutput
   inputOrder.GoodsInfo = orderGoods
   inputOrder.PrefixId = id
   inputOrder.State = proto.OrderStatePaying
   if inputOrder.PrefixId <= 0 {
     return inputOrder, goodsList, apierror.ErrOrderPrefixIdIsNecessary
   }

我们可以看到上面的函数返回值的形参定义的是 outOrder, outGoodsList , err,但是下面又定义了 

 var inputOrder proto.OrdersInput
 var goodsList []proto.OrderGoodsOutput

用来作为函数的返回值,那么这就是容易出问题的点。

4、错误的判断应该尽早的判断尽早的返回,减少无用变量的申请

还是上面的例子

func (h *PrefixAppliesHandler) DoOrder(id flake.ID, orderGoods []proto.OrderGoodsInput) (outOrder proto.OrdersInput, outGoodsList []proto.OrderGoodsOutput, err error) {
   var inputOrder proto.OrdersInput
   var goodsList []proto.OrderGoodsOutput
   inputOrder.GoodsInfo = orderGoods
   inputOrder.PrefixId = id
   inputOrder.State = proto.OrderStatePaying
   if inputOrder.PrefixId <= 0 {
     return inputOrder, goodsList, apierror.ErrOrderPrefixIdIsNecessary
   }

我们可以看到

 if inputOrder.PrefixId <= 0 {
     return inputOrder, goodsList, apierror.ErrOrderPrefixIdIsNecessary
   }

这个校验发生在每一次的调用,如果这个触发了,前面的变量的赋值就变的没有意义了

func (h *PrefixAppliesHandler) DealOrderInformation(PrefixId flake.ID, orderGoods []proto.OrderGoodsInput) (outOrder proto.OrdersInput, outGoodsList []proto.OrderGoodsOutput, err error) {
   // 前缀校验
   if PrefixId <= 0 {
      return outOrder, outGoodsList, apierror.ErrOrderPrefixIdIsNecessary
   }
   // 校验价格
   if len(orderGoods) <= 0 {
      return outOrder, outGoodsList, apierror.ErrOrderPriceIncorrect
   }

 

我们可以 函数的开始部门就校验,然后在对变量进行赋值

 

相关文章: