Go语言——【高质量编程 | 代码规范】

news2024/11/28 12:48:39

在这里插入图片描述

作者:非妃是公主
专栏:《Golang》
博客主页:https://blog.csdn.net/myf_666
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩
在这里插入图片描述

文章目录

  • 一、高质量编程
    • 定义
  • 二、代码规范
    • 1. 代码格式
    • 2. 注释
    • 3. 命名规范
      • Ⅰ. variable
      • Ⅱ. function
      • Ⅲ. package
      • Ⅳ. 命名规范——核心
    • 4. 控制流程
      • Ⅰ. 避免嵌套,保持正常流程清晰
      • Ⅱ. 尽量保持正常代码路径为最小缩进
      • Ⅲ. 控制流程-核心
    • 4. 错误和异常处理
      • Ⅰ. 简单错误
      • Ⅱ. 错误的Wrap和Unwrap
      • Ⅲ. 错误判定
      • Ⅳ. panic
      • Ⅴ. recover
      • Ⅵ. 错误处理——小结
  • the end……

一、高质量编程

定义

高质量编程,就是指编写的代码能够达到正确可靠的同时,具备简洁清晰、结构明了等特点,可以让团队成员很快的上手。具体来说,有以下几点:

  • 简单性
    • 消除多余的复杂性,以简单清晰的逻辑编写代码。
    • 团队其它成员不理解的代码,无法修复改进。
  • 可读性
    • 代码是写给人看的,而不是机器。
    • 编写可维护代码的第一步,就是确保代码可读。
  • 生产力:
    • 在团队开发过程中,整体的工作效率非常重要。

以上就是我们的目标,总结一下,我们想获得简单、可读,同时可以提高团队生产力的代码,那么,通过以下代码规范可以达到。

二、代码规范

1. 代码格式

代码格式,就是代码的缩进、分行、空格等等。其实,官方给我们提供了相关的标准,当我们使用goland进行编程的时候,即写完一段代码后,就可以通过ctrl+alt+l快捷键,进行一键调整代码格式。

如下图:

在这里插入图片描述

2. 注释

注释,是代码中很重要的一个规范,大多数时候我们都在关注代码实现,但是注释的重要性容易被忽视。

但是,我其实是重视代码注释的,因为一直以来也想着提高自己的代码质量。给大家看一下我写的代码:

在这里插入图片描述

我的注释是不是看起来还算是整洁?(大佬轻喷,毕竟我以前一直这样的注释写得还算是很棒的)但是,学习了Go语言的代码规范后,我发现Go语言的注释有着很大的讲究。下面我们一起来看一看。

  • 解释代码作用
  • 解释代码是如何做的
  • 解释代码实现的原因
  • 解释代码出错的情况

其实,注释主要是为代码增加一些额外的信息,包括上下文信息等。我们可以通过阅读代码很明显就可以得到的信息,就不需要加进注释,如果加进去,就叫做冗余

举几个例子:

好的注释:

在这里插入图片描述

因为对于这个公共符号,我们可以很容易地看出一些额外信息,比如这个函数到底要打开什么……

不好的注释:

在这里插入图片描述

不好的原因很简单,因为这个注释我们从命名中就可以得到(这个表是否已经满了),并不是额外信息。

好的注释:

在这里插入图片描述

解释了代码是如何实现的。

不好的注释:

在这里插入图片描述

只利用了一个process表示代码的实现,没有额外信息,很不好!

现在再去看我最初写的代码就很容易明白了,注释的内容都是可以很容易从代码中得到的“废话”。而真正有用的额外信息,却很少很少……

一些优秀的注释,如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 命名规范

Ⅰ. variable

  • 简洁胜于冗长
  • 缩略词全大写,当位于变量开头且不需要导出时(导出指:公有变量,我们见到的大多数变量都是私有变量,通过接口进行操作,很少有公有变量直接操作的,这样不安全),使用全小写。
    • 例如ServeHTTP,而不是ServeHttp
    • 使用XMLHTTPRequest或者xmlHTTPRequest(取决于该变量是否是公有变量)。
  • 变量距离其被使用的地方越远,则需要携带越多的上下文信息。
    • 全局变量在其名字中需要更多的上下文信息,使得其在不同地方可以轻易辨认出其含义。

几个命名规范与否的小示例,如下:

在这里插入图片描述

在这里插入图片描述

Ⅱ. function

  • 函数名不携带报名的上下文信息,因为报名和函数名总是成对出现。

在这里插入图片描述

  • 函数名应尽量简短
  • 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义。
  • 当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息。

Ⅲ. package

  • 只由小写字母组成。不包含大写字母和下划线等字符
  • 简短并包含一定的上下文信息。例如schemetask等。
  • 不要与标准库同名。例如不要使用sync或者strings

应尽量满足的规则:

  • 不使用变量名作为报名。例如使用bufio而不是buf。
  • 使用单数而不是负数。例如使用encoding而不是encodings。
  • 谨慎地使用缩写。例如使用fmt在不破坏上下文的情况下比format更加简短。

Ⅳ. 命名规范——核心

  • 降低阅读理解代码的成本
  • 重点考虑上下文信息,设计简洁清晰的名称。

4. 控制流程

Ⅰ. 避免嵌套,保持正常流程清晰

在这里插入图片描述

Ⅱ. 尽量保持正常代码路径为最小缩进

在这里插入图片描述

在这里插入图片描述

Ⅲ. 控制流程-核心

  • 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支。
  • 正常流程代码沿着屏幕向下移动。
  • 提升代码可维护性和可读性。
  • 故障问题大多出现在复杂的条件语句和循环语句中。

4. 错误和异常处理

错误处理这部分内容由于在项目中遇到的较少,理解并不是很深入,暂且记录在这里吧~

Ⅰ. 简单错误

在这里插入图片描述

Ⅱ. 错误的Wrap和Unwrap

在这里插入图片描述

Ⅲ. 错误判定

在这里插入图片描述

在这里插入图片描述

Ⅳ. panic

在这里插入图片描述

Ⅴ. recover

在这里插入图片描述
在这里插入图片描述

Ⅵ. 错误处理——小结

在这里插入图片描述

the end……

Go语言——【高质量编程 | 代码规范】部分的内容到这里就要结束啦~~

到此既是缘分,欢迎您的点赞评论收藏关注我,不迷路,我们下期再见!!

😘😘😘 我是Cherries,一位计算机科班在校大学生,写博客用来记录自己平时的所思所想!
💞💞💞 内容繁杂,又才疏学浅,难免存在错误,欢迎各位大佬的批评指正!
👋👋👋 我们相互交流,共同进步!

:本文由非妃是公主发布于https://blog.csdn.net/myf_666,转载请务必标明原文链接:https://blog.csdn.net/myf_666/article/details/129009764

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scratch资料

Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化,积木化、可视化的编程语言。 什么是模块化、积木化&…

箭牌家居首次亮相AWE展会,大秀智慧生活新提案

作者 | 曾响铃 文 | 响铃说 2023年作为全面贯彻党的二十大精神开局之年,同时也是后疫情时代的第一年,以科技创新驱动社会发展成为当下首要任务。 特别是科技强国战略的实施落地,对推动经济社会高质量发展有着不可或缺的作用。所谓需求产生…

线性表之单链表(详解)

🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录 🍥前言🍉链表1. 链表的概念及结构2. 链…

肝一肝设计模式【二】-- 工厂模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 文章目录 系列文章目录前言一、简单工厂模式二、工厂方法模式三、抽象工厂模式写在最后 前言 在实际开发过程中,构建对象往往使用new的方式来构建,但随着…

Nginx搭建以及使用(linux)

1.概念 Nginx是一个高性能的HTTP和反向代理服务器,它可以用来处理静态文件,负载均衡,反向代理等功能。 Nginx的来历是这样的:它是由俄罗斯人伊戈尔赛索耶夫为Rambler.ru站点开发的,第一个公开版本发布于2004年…

java的构造方法

构造方法是 Java中最重要的方法,也是 Java语言中最基本的方法,它直接影响程序的结构。java中不允许重复使用构造方法,但可以重复使用构造函数。 1. Java中只有构造函数可以使用被调用方提供的参数(如: int)…

作为一名8年测试工程师,因为偷偷接私活被····

接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后…

Linux进程通信——共享内存

共享内存 共享内存原理与概念函数接口的介绍与使用shmgetshmctlshmatshmdt通信 共享内存的特点共享内存的内核结构 system V消息队列(了解)system V——初识信号量信号量的预备概念理解信号量信号量的接口与结构 IPC资源的组织方式 共享内存 原理与概念…

在 Edge 中安装 Tampermonkey 的步骤

以下是在 Edge 中安装 Tampermonkey 的步骤: 目录 1. 打开 Edge 浏览器,进入 Tampermonkey 官网:[https://www.tampermonkey.net/](https://www.tampermonkey.net/)。2. 点击页面上方的“下载”按钮,选择“Microsoft Edge”选项。…

2.2.2 redis,memcached,nginx网络组件

课程目标: 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用:io检测 是否就绪 io操作 1. int clientfd accept(listenfd, &addr, &…

BigInteger和BigDecimal

BigInteger 当一个整数很大,大到long都无法保存,就可以使用BigInteger这个类 使用方法:new import java.math.BigInteger;//记得引包 BigInteger bigInteger new BigInteger("33333333333399999999999");//用字符串传入 System…

STM32物联网实战开发(6)——PWM驱动LED灯

PWM驱动LED灯 之前是使用标准库函数配置引脚输出PWM控制呼吸灯,因为开发板上的蜂鸣器是有源的,所以这次还是用来确定LED灯,这次使用的是HAL库,用CubeMX软件初始化PWM功能 PWM输出原理 Period:周期,单位是秒…

10个最流行的向量数据库【AI】

矢量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。 每个向量都有一定数量的维度,范围从几十到几千不等,具体取决于数据的复杂性和粒度。 推荐:用 NSDT场景设计器 快速搭建3D场景。 矢量数据库&…

手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)

短信验证码登录功能 项目分析核心代码1.外部js库调用2.HTML容器构建3.javaScript业务逻辑验证4.后端验证逻辑 总结 短信验证码是通过发送验证码到手机的一种有效的验证码系统,作为比较准确和安全地保证购物的安全性,验证用户的正确性的一种手段&#xff…

Redux的基本使用,从入门到入土

目录 一、初步使用Redux 1.安装Redux 2.配置状态机 二、Redux的核心概念 1.工作流程 2.工作流程 三、优化Redux 1.对action进行优化 2.type常量 3.reducer优化 四、react-redux使用 1.安装react-redux 2.全局注入store仓库 3.组件关联仓库 五、状态机的Hook 1.u…

Day958.代码的分层重构 -遗留系统现代化实战

代码的分层重构 Hi,我是阿昌,今天学习记录的是关于代码的分层重构的内容。 来看看如何重构整体的代码,也就是如何对代码分层。 一、遗留系统中常见的模式 一个学校图书馆的借书系统。当时的做法十分“朴素”,在点击“借阅”按钮…

如何使用osquery在Windows上实时监控文件?

导语:Osquery是一个SQL驱动操作系统检测和分析工具,它由Facebook创建,支持像SQL语句一样查询系统的各项指标,可以用于OSX和Linux操作系统。 Osquery是一个SQL驱动操作系统检测和分析工具,它由Facebook创建,…

不得不说的行为型模式-责任链模式

目录 责任链模式: 底层原理: 代码案例: 下面是面试中可能遇到的问题: 责任链模式: 责任链模式是一种行为型设计模式,它允许多个对象在一个请求序列中依次处理该请求,直到其中一个对象能够…

【VM服务管家】VM4.0平台SDK_2.5 全局工具类

目录 2.5.1 全局相机:全局相机设置参数的方法2.5.2 全局相机:获取全局相机列表的方法2.5.3 全局通信:通信管理中设备开启状态管理2.5.4 全局通信:接收和发送数据的方法2.5.5 全局变量获取和设置全局变量的方法 2.5.1 全局相机&…

经典重装上阵,更好用的中小手游戏鼠标,雷柏V300W上手

日常办公、玩游戏都需要用到鼠标,特别是对于游戏玩家来说,一款手感好、易定制的鼠标,绝对是游戏上分的利器。早先雷柏出过一款V300鼠标,距今已有10年历史,当时是很受欢迎,最近南卡又出了一款复刻版的V300W&…