使用 Golang 编写高质量代码
介绍
讨论如何编写高质量代码与讨论最佳云提供商是同一类型的对话。有大量不同的理论、观点和猜测。但编写代码有一点是肯定的——它必须包含一些关键组件,包括:
- 确认不存在重大错误(至少存在几个错误是不可避免的)
- 清晰、简洁的语法
- 该语言遵循最佳实践。
- 某种文档。
关于每一项最佳实践的指南很可能超过 20,000 字,我敢肯定你不会有兴趣阅读。相反,本指南将介绍四种常用方法,以确保你使用 Golang 编写高质量的代码。
要遵循本指南,您应该具备:
- 了解 Golang。虽然您不必是专家,但这不是一篇关于 Go 基础知识的博客文章。
- 了解开发实践(linting、语法高亮等)
语法检查
您是否曾经编写过可以运行的代码,但不知道它是否按应有的方式编写?例如,也许您查看了其他人编写代码的方式,并想知道“为什么我的代码看起来不一样?”问题是,您不知道您编写的代码或其他代码是否正确。
这只是 linting 发挥作用的一个例子。
计算机科学中的Linting或linter由几个关键部分组成:
- 检查错误
- 检查错误
- 检查文体错误和语法最佳实践
- 可疑构造(有关语法错误、未使用的声明变量、弃用的函数、间距和格式等的警告)
流行的 Go 语言 Linter
有几种非常流行的通用 linter,但有一种在整个 Go 社区中广泛使用的、专为 Go 创建的 linter,称为 Golint。您可以在 GitHub 上找到Golint。
Golint 示例
在使用 Golint 之前,您必须安装它。
go get -u golang.org/x/lint/golint
安装 Golint 后,您可以针对现有的 Go 文件运行它。例如,您可以针对以下代码运行 Golint。
package Test
import (
"fmt"
)
func Demo() {
one := "one"
two := "one"
fmt.Println(one)
fmt.Println(two)
}
要针对上述代码运行 Golint,请运行以下命令。
golint my_test.go
在下面的屏幕截图中,您可以看到 Golint 已经发现了包名称的问题。
虽然这不会使 Go 代码失败,但从语法角度来看,应该进行更改以遵循最佳实践。
IDE 支持
IDE是集成开发环境,这意味着它们通常用于一种或多种编程语言,并对其支持的语言提供适当的支持。
IDE 的一些主要功能包括:
- 源代码编辑器
- 调试器
- 编译器
- 语法高亮显示错误
- 自动完成函数、方法等。
尽管有很多 IDE,但有一个在 Golang 领域非常流行。
戈兰
JetBrains 以开发适用于几乎所有语言的出色 IDE 而闻名。GoLand 就是其中之一。
GoLand 是专用于 Golang 的 IDE。GoLand 不仅是跨平台的,而且还具有以下几个关键功能:
- 使用语法高亮实时检测错误
- 代码补全
- 调试
- 开箱即用的 Git 支持
文档
如果没有文档,没人知道发生了什么。让我们来看一个完全不相关的场景。假设你买了一件家具,但没有正确的说明,甚至更糟的是,说明非常简略,毫无帮助。
您可能可以将其拼凑起来,但从中获得的体验将很糟糕。您很可能不会再从该供应商那里购买任何东西。
对于代码来说同样如此。
如果您正在创建一个开源项目或想要向您所在的团队提出建议,但没有任何数据或文档,则没有任何内容可以展示。这只是您头脑中的一个好主意,但没有人知道它会有多好。
幸运的是,Golang 有一个很棒的方法,可以使用 Godoc 文档工具几乎自动编写文档。Godoc 为 Go 程序提取并生成文档。
安装 Godoc
要安装 Godoc,请运行以下命令。
golang.org/x/tools/cmd/godoc
使用 Godoc
要使用 Godoc,您可以在终端上运行以下命令。
godoc -http=:6060
然后你可以访问[localhost:6060](https://localhost:6060)你将看到以下文档:
- 标准库
- 第三方库
- 你编写的包
创建文档
要创建文档,请在函数、类型、常量、变量或完整包的声明前直接写上常规注释。
有关创建文档的更多信息,我建议查看此处的官方 Go 文档。
测试
最后但同样重要的是测试。有一句话适用于任何编程语言:
如果没有测试,代码就不存在。
编写代码并在本地测试是许多开发人员使用的一种做法,但几乎在任何情况下都无济于事。一旦您在本地测试的代码提交到源代码管理并被其他人拿到,您在本地运行的测试现在就没有任何价值了。
如果没有测试,你的代码就只是一个谜。
测试类型
测试主要有三种方法:
- 单元测试
- 集成测试
- 模拟测试
单元测试测试您期望代码执行的某些方面。例如,假设您有一个函数,它在运行时将 1 + 1 相加。这意味着预期结果是 2。单元测试将测试该函数并确保结果为 2。
集成测试揭示集成组件之间的缺陷和交互,例如针对两个函数等单元进行测试。
模拟测试执行几乎真实的实现,但只是假装而已。还有一些模拟测试会创建一个真实的资源,然后立即将其删除,以确保它不会只是挂在那里。例如,假设您有一个 Terraform 资源,用于在 Azure 中创建一个资源组。在实现代码之前,您想知道它是否真的有效。模拟测试将运行,创建资源,确认它存在,然后为您删除该资源,这样它就不会只是挂在那里。
使用 Golang 进行测试
在很多编程语言中,你必须从第三方获取测试包。对于 Go,标准库中有一个测试包,它的名字就是testing。因为测试包在标准库中,所以你不需要安装任何东西。
下面是一个测试示例。
package Test
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestDemo(t *testing.T) {
one := "one"
two := "one"
assert.Equal(t, one, two, "the two variables should be the same value")
}
测试是为了确保变量一和变量二是相同的值。要运行测试,您可以在测试所在的同一目录中使用go test命令。
结论
无论您从事什么工作,最佳实践的理念肯定不会总是千篇一律。不同组织中的不同人对最佳实践的含义有不同的看法。作为开发人员,您能做的最好的事情就是确保尽一切努力不仅教育他人,而且还以清晰简洁的方式解释实现质量的过程。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~