coding 注意事项(总结中)
Uber Go 语言代码风格指南可以参考下:https://www.cnblogs.com/ricklz/p/11670932.html
最近写代码,老是被吐槽,代码写的不好,细节处理的不好。
那么下面来总结下平时遇到的点,并且需要改进的地方。
一、命名不规范
1、经常遇到变量的名字写错
2、命名不地道,拼音就不要存在了,读代码的时候看到命名就知道这个函数和变量的作用
3、不要出现无脑的错错别字
4、对于每个注释我们也要认真的对待
虽然对于一些一眼就看明白用法的函数,我们不用加上文字的描述,但是函数一定要对应好
二、珍惜每一个参数变量的命名和使用
1、没用到的参数变量尽量不要去申请
param明显的没有用到,这时候我们就没有必要再去声明了,可以直接发个nil到函数里面。
2、对于一些数组的操作当我们知道要传入的值的时候可以直接初始化,不用刻意的append
如果改成下面的是不是就会优雅很多了呢
3、返回参数如果采用命名变量,那么就不要在 return 的时候,又带上其他变量。不要混用。容易出 bug。
1 2 3 4 5 6 7 8 9 | 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,但是下面又定义了
1 2 | var inputOrder proto.OrdersInput var goodsList []proto.OrderGoodsOutput |
用来作为函数的返回值,那么这就是容易出问题的点。
4、错误的判断应该尽早的判断尽早的返回,减少无用变量的申请
还是上面的例子
1 2 3 4 5 6 7 8 9 | 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 } |
我们可以看到
1 2 3 | if inputOrder.PrefixId <= 0 { return inputOrder, goodsList, apierror.ErrOrderPrefixIdIsNecessary } |
这个校验发生在每一次的调用,如果这个触发了,前面的变量的赋值就变的没有意义了
1 2 3 4 5 6 7 8 9 | 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 } |
我们可以 函数的开始部门就校验,然后在对变量进行赋值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能