Go语言入门学习整理 (三)| 青训营笔记

104 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

一、重点内容:

1.1 知识要点有哪些?

  • 性能优化
  • 性能优化分析工具
  • 性能调优实战案例

二、详细知识点介绍:

2.1 性能优化

Go语言性能优化方案包括:

  • 合理使用goroutine和channel来提高并发性能。
  • 使用优化过的程序库来提升程序性能。
  • 避免不必要的内存分配和对象复制。
  • 尽可能使用Go 1.7之后及其以上版本,因为它们拥有更好的性能优化。
  • 尝试使用go-faster包,可以有效地提高Go语言性能。

当然,还有一些其他的Go语言性能优化方案,例如使用固定大小的内存块来改善反复分配的性能,使用cache friendly的数据结构来改善Go代码的性能,优化Go程序的内存布局,使用不同的编译器选项来改善Go程序的性能等等。

2.1.1 Benchmark

Go语言的Benchmark主要是用来测量Go代码的性能。它可以帮助Go开发者评估和优化Go代码的性能,比如跟踪性能瓶颈,计算函数耗时等。

2.1.2 Slice

Go语言 Slice是Go语言中一种动态数据结构,它允许用户在不申请新内存的情况下,创建可变大小的数组。Go中Slice本质上是一个智能指针,它指向一个底层数组,并拥有三个属性:切片长度、切片容量和底层数组指针。

2.1.3 Map

Go语言可以通过使用Map实现多种性能优化技术,例如快速搜索数据、快速更新数据等,具体步骤包括:

  • 将数据保存到Map中。
  • 使用Map中的键来快速查找数据。
  • 利用Map中的键-值结构来实现快速数据更新操作。
  • 使用特殊的Map类型,如sync.Map,来实现并发安全的访问。

2.1.4 字符串处理

Go语言可以利用字符串处理来实现性能优化,比如使用预编译正则表达式、复用StringBuilder对象、避免无效的字符串拼接、使用字符串池等。

2.1.5 atomic包

Go语言可以利用atomic包来进行性能优化,atomic包提供了简单而有效的原子操作,可以用来替换传统的锁机制。使用atomic包可以显著提高并发安全代码的性能,比如保证互斥访问,原子增加或减少变量值等。

2.2性能优化分析工具——pprof

pprof是Go语言中一个性能分析工具,它可以帮助开发者发现性能瓶颈、检查内存泄漏等问题。pprof可以生成可视化的分析报告,包括函数调用栈、CPU利用率、分配内存量、系统调用情况和goroutine中各参数信息等。

image.png 使用pprof工具首先需要对Go应用程序进行性能分析,然后根据分析报告找出瓶颈并进行优化。一般情况下,使用pprof的步骤如下:

  1. 使用go tool pprof 来生成性能分析报告。
  2. 使用top和web界面查看分析报告,找出性能瓶颈。
  3. 根据报告进行程序优化,提升Go代码性能。

2.3 性能调优实战案例

  • 业务服务优化
  • 基础库优化
  • Go语言优化

三、实践练习例子:

package main

import (
    "fmt"
    "strings"
)

func main(){
    var sb strings.Builder
    
    sb.WriteString("Hello")
    sb.WriteString(" World!")

    fmt.Println(sb.String())
}

使用Go语言的StringBuilder可以改善程序的性能,它可以有效地减少字符串的内存分配和内存拷贝,从而提升整体运行性能。

四、个人总结:

Go语言性能优化方案可以总结为以下几点:

  1. 首先要弄清Go语言的基础知识,以便进行性能分析;
  2. 然后利用一些优化工具和有效的代码结构来提高Go程序的执行效率;
  3. 接着,可以考虑利用标准库或者第三方开源库,有效地提升开发效率;
  4. 最后,要适当使用多线程编程,以有效地提升并行处理效率。

五、引用参考:

后端入门 - Go 语言原理与实践