Google 开源项目风格指南 (中文版)

概述

本指南是由国内程序员翻译维护的 Google 开源项目风格指南中文版,涵盖 C++、Objective-C、Python、JSON、Shell 和 JavaScript 六种语言的编程规范。指南不仅列出规则,更解释背景 rationale,帮助开发者理解为何如此设计。

目录结构

  • 第1章:Google 开源项目风格指南 (中文版) 总览
  • 第2章:C++ 风格指南
  • 第3章:Objective-C 风格指南
  • 第4章:Python 风格指南
  • 第5章:Shell 风格指南
  • 第6章:Javascript 风格指南

关键要点(以 C++ 为例)

头文件

  • 头文件应做到自包含(self-contained),除非用于纯文本插入(.inc)。
  • 使用 #define 保护,命名格式:<PROJECT>_<PATH>_<FILE>_H_。
  • 尽量避免前置声明,除非必要;前置声明可能隐藏依赖并导致编译时问题。
  • 内联函数仅限于体积小(≤10 行)的函数,避免滥用导致代码膨胀。

作用域

  • 鼓励在 .cc 文件中使用匿名命名空间或 static 以避免全局命名空间污染。
  • 禁止在头文件中使用命名空间别名(除非显式标记)。
  • 禁止在 std 命名空间中声明任何内容。

类

  • 构造函数中不应调用虚函数,也不应尝试报告非致命错误;考虑使用 Init() 方法或工厂函数。
  • 单参数构造函数和转换运算符应显式声明 explicit,以防止隐式类型转换。
  • 复制构造函数和复制赋值运算符应声明为 delete 或私有,以防止不希望的复制。

其他语言要点概览

  • Objective-C:类似 C++ 的命名空间与作用域规则,使用前缀避免命名冲突。
  • Python:遵循 PEP 8,强调一致性和可读性;使用 4 空格缩进;模块、类、函数命名约定。
  • Shell:使用 POSIX 兼容的写法;变量使用下划线;错误处理采用 set -euo pipefail。
  • JavaScript:使用 JSDoc 进行类型注释;采用单引号字符串;避免 with 和 eval;使用 goog.scope 缩短命名空间。

应用建议

  1. 在项目初期采纳本指南,可通过配置编辑器插件(如 clang-format, yapf, eslint)自动检查。
  2. 进行代码审查时,重点检查头文件的自包含性、命名空间使用及内联函数的合理性。
  3. 指南中的“规则特例”章节提供了何时可以偏离规则的指导,保持灵活性。

与其他知识的关联

  • 与《Effective C++》中的条款(如条款 30:使用 explicit 防止隐式转换)相呼应。
  • 与 Google 的开源项目实际代码库(如 Chromium, Protobuf)中的风格保持一致。
  • 对于内部项目,可将本指南作为基础,结合团队实际情况进行裁剪。

行动点

  • 将本指南的 C++ 章节转化为项目的 .clang-format 配置。
  • 在团队 Wiki 中链接此指南,并标记为必读材料。
  • 下次代码审查时,重点检查头文件是否使用了 #define 保护及前置声明的合理性。