Google:12 条 Golang 最佳实践

miaogaolin · · 7943 次点击    
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
这是直接总结好的 12 条: 1. 先处理错误避免嵌套 2. 尽量避免重复 3. 先写最重要的代码 4. 给代码写文档注释 5. 命名尽可能简洁 6. 使用多文件包 7. 使用 `go get` 可获取你的包 8. 了解自己的需求 9. 保持包的独立性 10. 避免在内部使用并发 11. 使用 Goroutine 管理状态 12. 避免 Goroutine 泄露 ## 最佳实践 这是一篇翻译文章,为了使读者更好的理解,会在原文翻译的基础增加一些讲解或描述。 来在维基百科: ``` "A best practice is a method or technique that has consistently shown results superior to those achieved with other means" 最佳实践是一种方法或技术,其结果始终优于其他方式。 ``` 写 Go 代码时的技术要求: - 简单性 - 可读性 - 可维护性 ## 样例代码 需要优化的代码。 ```go type Gopher struct { Name string AgeYears int } func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) { err = binary.Write(w, binary.LittleEndian, int32(len(g.Name))) if err == nil { size += 4 var n int n, err = w.Write([]byte(g.Name)) size += int64(n) if err == nil { err = binary.Write(w, binary.LittleEndian, int64(g.AgeYears)) if err == nil { size += 4 } return } return } return } ``` 看看上面的代码,自己先思索在代码编写方式上怎么更好,我先简单说下代码意思是啥: - 将 `Name` 和 `AgeYears` 字段数据存入 `io.Writer` 类型中。 - 如果存入的数据是 `string` 或 `[]byte` 类型,再追加其长度数据。 如果对 `binary` 这个标准包不知道怎么使用,就看看我的另一篇文章[《快速了解 “小字端” 和 “大字端” 及 Go 语言中的使用》](https://mp.weixin.qq.com/s/fATns17paqbmG8Ikb3ZedA)。 ## 先处理错误避免嵌套 ```go func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) { err = binary.Write(w, binary.LittleEndian, int32(len(g.Name))) if err != nil { return } size += 4 n, err := w.Write([]byte(g.Name)) size += int64(n) if err != nil { return } err = binary.Write(w, binary.LittleEndian, int64(g.AgeYears)) if err == nil { size += 4 } return } ``` 减少判断错误的嵌套,会使读者看起来更轻松。 针对这 12 条详细讲解,直接前往:[>> 走起](https://mp.weixin.qq.com/s/JD5C2XadveECwdcUtIqoog)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7943 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传