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
}

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

最新文章

  1. Linux shell相关
  2. 【bzoj1828】[Usaco2010 Mar]
  3. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q125-Q126)
  4. 如何用js检测手机是否安装某个app
  5. NOI 2013 矩阵游戏
  6. mvc4.5更改为mvc4.0方法总结
  7. Java中对象比较的方法
  8. TiDB之mac上搭建及调试技巧
  9. 总结AWS使用要点
  10. FAQ常见问题解答---搭建hubot
  11. SpringMVC 允许跨域访问 也可以选择限制指定IP 允许访问 对象的数据传输
  12. Linux内核分析——第七章 链接
  13. js 去除金额的千位分隔符
  14. git中工作区,缓存区,本地库,远程库的简要区别
  15. mysql root情况
  16. XML 的4种解析方式
  17. java数字转换成文字方法
  18. C# MemCached分布式缓存
  19. 区块链,Ethereum-Wallet
  20. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

热门文章

  1. 【opencv系列02】OpenCV4.X图像读取与显示
  2. 使用Servlet和JSp在浏览器上实现对数据库表的增删改查(新手)
  3. Callable的Future模式
  4. 2020kali浏览器汉化等配置
  5. 扯一扯基于4046系IC的锁相电路设计
  6. Asp.Net Core 中IdentityServer4 实战之角色授权详解
  7. Django 模型笔记
  8. OpenCV-Python 轮廓:入门 | 二十一
  9. Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序
  10. ES6语法:函数新特性(一)