天天看点

Uber Go 风格指南中文版uber_go_guide_cnUber Go语言编码规范

uber_go_guide_cn

Uber Go语言编码规范

Uber是世界领先的生活出行服务提供商,也是Go语言的早期adopter,根据Uber工程博客的内容,大致可以判断出Go语言在Uber内部扮演了十分重要的角色。Uber内部的Go语言工程实践也是硕果累累,有大量Go实现的内部工具被Uber开源到github上,诸如被Gopher圈熟知的zap、jaeger等。2018年年末Uber将内部的Go风格规范开源到github,经过一年的积累和更新,该规范已经初具规模,并受到广大Gopher的关注。本文是该规范的中文版本,并”夹带“了部分笔者的点评,希望对国内Gopher有所帮助。

目录

  • 介绍
  • 指导原则

      - 指向interface的指针

      - 接收器(receiver)与接口

      - 零值Mutex是有效的

      - 在边界处拷贝Slices和Maps

      - 使用defer做清理

      - Channel的size要么是1,要么是无缓冲的

      - 枚举从1开始

      - 错误类型

      - 错误包装(Error Wrapping)

      - 处理类型断言失败

      - 不要panic

      - 使用go.uber.org/atomic

  • 性能

      - 优先使用strconv而不是fmt

      - 避免字符串到字节的转换

  • 规范

      - 相似的声明放在一组

      - import组内的包导入顺序

      - 包名

      - 函数名

      - 导入别名

      - 函数分组与顺序

      - 减少嵌套

      - 不必要的else

      - 顶层变量声明

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

      - 结构体中的嵌入

      - 使用字段名初始化结构体

      - 本地变量声明

      - nil是一个有效的slice

      - 小变量作用域

      - 避免裸参数

      - 使用原始字符串字面值,避免转义

      - 初始化结构体引用

      - 格式化字符串放在Printf外部

      - 命名Printf样式的函数

  • 模式

      - 测试Tables

      - 功能选项

说明:由于csdn 页面布局问题。请移步github查看具体内容

#  uber_go_guide_cn