zoukankan      html  css  js  c++  java
  • uber_go_guide解析(三)(规范)

    前言

    一主要讲的是容易忽略的错误,可能在build时都不会体现出来但是在使用时出现问题
    二主要讲的是一些可以提高代码效率的用法
    本篇则讲解一些规范,不是强制的但是根据规范会提高代码的可读性, 减少BUG 等

    正文

    一致性

    最重要的, 项目的参与者要保持代码规范的一致性.无论你的团队使用怎样的代码规范
    一致性的代码更容易维护、是更合理的、需要更少的学习成本、并且随着新的约定出现或者出现错误后更容易迁移、更新、修复 bug
    相反,一个单一的代码库会导致维护成本开销、不确定性和认知偏差。所有这些都会直接导致速度降低、 代码审查痛苦、而且增加 bug 数量
    将这些标准应用于代码库时,建议在 package(或更大)级别进行更改,子包级别的应用程序通过将多个样式引入到同一代码中,违反了上述关注点。

    相似的声明放在一组

    应当将相似的声明放在一组内

    常量/变量/类型声明皆是如此

    对于不是相似的,不要放在一组

    该规范在函数内也同样适用

    import分组

    对于import, 应当将导入的第三方模块与自己写的模块分开(go fmt提供了这样的功能)

    包名

    给包命名时,按照以下规则起名

    • 全部小写.没有大写或者下划线
    • 大多数使用起别名的情况下,不需要重命名
    • 简短与简洁
    • 不使用复数
    • 不要用“common”,“util”,“shared”或“lib”。这些是不好的,信息量不足的名称

    导入别名

    如果程序包名称与导入路径的最后一个元素不匹配,则必须使用导入别名

    当然,如果一切都很标准,则不需要起别名

    函数分组与排序

    • 函数应当按照粗略的调用顺序来排序
    • 同一个文件里的函数按照接收者分组
      因此,导出的函数应先出现在文件中,放在struct, const, var定义的后面。
      在定义类型之后,但在接收者的其余方法之前,可能会出现一个 newXYZ()/NewXYZ()
      由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现

    减少嵌套

    尽量减少代码的嵌套
    代码应通过尽可能先处理错误情况/特殊情况并尽早返回或继续循环来减少嵌套.减少嵌套多个级别的代码的代码量.

    不必要的 else

    如果在 if 的两个分支中都设置了变量,则可以将其替换为单个 if.

    顶层变量声明

    如果在函数外声明变量时, 已经可以明确变量的类型时无需再次主动声明类型

    对于未导出的顶层常量和变量,使用_作为前缀

    在未导出的顶级vars和consts, 前面加上前缀_,以使它们在使用时明确表示它们是全局符号。
    例外:未导出的错误值,应以err开头。
    基本依据:顶级变量和常量具有包范围作用域。使用通用名称可能很容易在其他文件中意外使用错误的值。

    结构体嵌入

    建立结构体时, 某个字段时嵌套的另一个结构体,那么将它与其他字段分开

    使用字段名初始化结构体

    在初始化结构体时, 一定要加上字段名

    原版说3个字段以内可以省略,我觉得不行

    本地变量声明

    本地变量声明时使用 :=
    如果是声明空切片这种使用 var 会增加可读性时则使用 var

    nil是一个slice

    要知道, nil是一个长度为0的 slice,所以要注意

    • 不要返回一个空的切片, 返回nil
    • 检查切片是否为空时使用 len(s) == 0 而不是 s == nil
    • 用var声明的切片可直接使用不需 make

    减少变量的生效范围

    如果变量是私有变量,尽量将变量的作用域变小

    避免参数意义不明确

    如果参数多不明白参数的意思可以使用 /* */ 方式在代码中打入注释

    字符串转义

    使用 ........ 来进行字符串的转义

  • 相关阅读:
    Pandas入门之十一:窗口函数
    Pandas入门之十:百分比与相关性
    Pandas入门之九:数据选择
    Pandas入门之八:字符串与文本数据
    Pandas入门之七:迭代
    Pandas入门之六:重建索引
    Pandas入门之五:自定义元素处理函数
    Pandas入门之四:统计描述
    Pandas入门之三:DataFrame
    Pandas入门之 二:Series
  • 原文地址:https://www.cnblogs.com/chnmig/p/12572962.html
Copyright © 2011-2022 走看看