• coding 注意事项(总结中)


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

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

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

    一、命名不规范

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

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

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

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

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

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

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

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

      

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

     

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

     

    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
       }
    

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

  • 相关阅读:
    2-7
    2-6
    2-5
    2-4
    2-3
    2-1
    2-2
    1-1
    5-7
    第六章例6-1
  • 原文地址:https://www.cnblogs.com/ricklz/p/11645679.html
Copyright © 2020-2023  润新知