如何用Go编写整洁代码:专业人士的7条规则

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么Go整洁代码不是奢侈,而是必需

\n\n

Go(或Golang)是一种乍看之下简单甚至乏味的语言。它没有泛型(直到1.18版本),没有类,没有虚拟机。但正是这种极简主义使其成为追求整洁代码的理想战场。如果你用Go编写代码,而你的项目开始变得像由goroutine和难以阅读的switch组成的意大利面条——你就失去了该语言的最大优势:开发速度和维护简便性。

\n\n

在本文中,我们将解析7条实用规则,帮助你编写惯用Go代码,不仅编译器能理解,你的同事(以及一个月后的你自己)也能看懂。开始吧!

\n\n

1. 正确的变量命名:简短且清晰

\n\n

在Go中,习惯使用简短但有意义的名称。与Java中ListOfUserOrders是常态不同,在Go中你会看到orders甚至os。为什么?因为Go是一种用于阅读代码的语言,而不是用于编写代码的语言。

\n\n

Go命名的主要规则

\n
    \n
  • 局部变量:对于显而易见的事物使用1-2个字母(i表示计数器,s表示字符串)。
  • \n
  • 包名:一个单词,小写字母,无下划线(http,fmt)。
  • \n
  • 导出标识符:以大写字母开头(GetUser)。
  • \n
  • 缩写:保持统一大小写(HTTP,URL,而不是Http或Url)。
  • \n
\n\n
// 差\nfunc GetUserDataFromDatabaseByID(userID string) (UserData, error) {\n    var userDataFromDb UserData\n    // ...\n    return userDataFromDb, nil\n}\n\n// 好\nfunc GetUser(id string) (User, error) {\n    var u User\n    // ...\n    return u, nil\n}
\n\n

提示:如果变量名超过2个单词——很可能你在过度复杂化。

\n\n

2. 格式化:信任gofmt

\n\n

在Go中没有“风格之争”。gofmt命令为你解决一切。这不是建议——这是标准。如果你不使用gofmt——你写的就不是Go,而是“Go方言”。

\n\n

gofmt做什么?

\n
    \n
  • 设置缩进(制表符,而非空格)。
  • \n
  • 删除多余的空行。
  • \n
  • 对齐注释。
  • \n
  • 删除未使用的导入(使用-s标志)。
  • \n
\n\n
// gofmt之前\nfunc  add (a int,b int) int{\nreturn a+b\n}\n\n// gofmt之后\nfunc add(a, b int) int {\n    return a + b\n}
\n\n

在任何现代编辑器中(VS Code,GoLand),gofmt会在保存时自动运行。如果没有——请配置它。这将节省数小时的代码审查时间。

\n\n

3. 错误处理:不要忽略,不要恐慌

\n\n

Go中没有异常(try-catch)。错误只是需要检查的值。如果你正确使用它,这是该语言最强大的方面之一。

\n\n

整洁错误处理的规则

\n
    \n
  • 始终检查error。不要使用_来跳过。
  • \n
  • 不要在库代码中使用panic。仅当程序无法继续运行时使用(例如,无法打开配置文件)。
  • \n
  • 使用fmt.Errorf("context: %w", err)包装错误(Go 1.13+)。
  • \n
\n\n
// 差\nfunc ReadConfig(path string) *Config {\n    data, _ := ioutil.ReadFile(path) // 忽略错误\n    var cfg Config\n    json.Unmarshal(data, &cfg)\n    return &cfg\n}\n\n// 好\nfunc ReadConfig(path string) (*Config, error) {\n    data, err := ioutil.ReadFile(path)\n    if err != nil {\n        return nil, fmt.Errorf("read config: %w", err)\n    }\n    var cfg Config\n    if err := json.Unma                

博客

书籍推荐