高质量编程及编码规范|青训营

57 阅读5分钟

如何用 Go 编写程序

安装 Go:
  • 首先从官方网站(golang.org/ )下载并安装 Go 语言的发布版本(笔者第一篇文章有介绍,参见csdn)。然后参考csdn设置好GOPATH 和 PATH 环境变量。
文本编辑器:
  • 例如 goland(推荐)、Visual Studio Code(报用)、Sublime Text、Atom(这两个没听过,但是如果前面几个不好用就试试这个) 等。编辑器要可以使用 Go 的语法高亮和自动补全功能。
创建项目结构:
  • 在工作目录下创建一个新的文件夹来作为项目的根目录。一般来说是将源代码文件放在一个与项目名相同的目录下,然后在根目录中创建其他文件和目录,例如 testsdocscmd 等。
code(此为动词):
  • 使用文本编辑器创建一个新的 Go 源代码文件(.go 扩展名结尾)。在文件中,写程序逻辑,包括变量声明、函数定义、数据结构等。
构建和运行:
  • 在终端(cmd)中导航到项目根目录(这一步很难,因为细节特别多,建议直接用编辑器中的go run功能),并运行 go build 命令来构建可执行文件。
使用包管理器:
  • Go 提供了内置的包管理器 Go Modules,可以管理项目依赖。使用 go mod init 命令初始化项目模块,使用 go get 命令来获取和安装所需的依赖包。
运行测试:
  • Go语言支持编写单元测试和集成测试。在项目中创建一个名为 *_test.go 的文件来编写各种测试。使用 go test 命令来运行测试并验证程序的正确性。
笔者推荐
  • 这里的test代码从github上面克隆,推荐一个软件GitHub Desktop

image.png

如何编写更简洁清晰的代码

变量和函数名(要有意义):
  • 比如time,不能像在学校的那个abc。尽量让变量有具体中文含义
函数长度和复杂度控制:
  • 尽量保持函数短小且只做一件事情。每个函数都专注于解决一个具体的问题。
避免冗余:
  • 重复的代码容易引入 bug,并增加维护的工作量。通过提取重复代码到函数或使用循环来避免冗余。
注释:
  • 在关键代码段使用注释来解释代码的意图和设计决策。日后再看能想得起来。
空白行和缩进:
  • 正确使用缩进来展示代码的层次结构。
**减少嵌套和条件语句:
  • 尽量减少嵌套层级和使用函数提前返回来简化条件逻辑。
错误处理机制:
  • Go 的错误处理机制是通过返回值实现的,良好的错误处理可以提高代码的可靠性。使用错误返回值来传递错误信息,并在关键位置处理错误。

常用 Go 语言程序优化手段

并发:
  • Go 语言天生支持并发编程,通过使用 goroutine 和 channel,可以将任务并行执行,提高程序的处理能力和响应性能。
优化算法和数据结构:
  • 选择高效的算法和数据结构可以减少程序的时间和空间开销。根据具体问题的需求,选择最适合的数据结构和算法来提高程序性能。
避免过度分配内存:
  • Go 语言的垃圾回收器会自动管理内存,但过度分配内存会增加垃圾回收的负担。使用合适的容器大小和对象池来避免不必要的内存分配。
原生库和优化工具:
  • Go 语言提供了丰富的标准库,其中许多是经过高度优化的。使用标准库中的函数和包来替代自己实现的功能,以获得更好的性能。另外,Go 还提供了一些性能分析工具,例如 pprof,可以帮助定位和解决性能瓶颈。
并行处理IO操作:
  • 在进行IO密集型操作时,使用并发处理提高程序的吞吐量。通过使用 goroutine 和适当的并发模型(例如 Worker Pool),同时处理多个IO操作,减少等待时间。

熟悉 Go 程序性能分析工具

pprof:
  • 分析程序的 CPU 和内存使用情况。在代码中插入 pprof 的性能采样点,可以生成 CPU 和内存的运行时分析数据,并使用 pprof 工具进行可视化和分析。
go tool trace:
  • 分析程序的运行时间线和goroutine的调度情况。帮助发现程序的瓶颈和性能问题。
go test -bench:
  • Go 的测试框架支持基准测试,通过运行基准测试可以评估特定函数或代码块的性能。使用 go test -bench 命令可以运行基准测试,并生成性能报告。
Go 性能分析器:
  • 一些第三方工具和库提供了更高级的性能分析功能,如火焰图生成工具、堆分析工具等。

了解工程中性能优化的原则和流程

确定性能目标:
  • 明确性能指标和目标,例如响应时间、吞吐量等。根据实际需求来评估和优化性能。
基准测试和性能剖析:
  • 使用工具和技术收集性能数据,如基准测试、性能剖析和监测。借助这些数据,分析和识别性能瓶颈。