Analyse comparative des performances des fonctions Go
Les benchmarks sont un outil clé pour mesurer les performances d'une fonction ou d'un morceau de code. Il peut aider à identifier les goulots d’étranglement, à optimiser le code et à garantir l’évolutivité des applications. Go fournit un package testing
intégré pour effectuer des tests de référence. testing
包,用于执行基准测试。
设置基准测试
为了设置一个基准测试,需要在 testing
包中创建一个 Benchmark
函数。该函数的命名规则为 Benchmark<functionname></functionname>
.
import ( "testing" ) func BenchmarkExample(b *testing.B) { // 基准测试代码 }
b
参数是一个 testing.B 类型的指针,它提供了用于运行基准测试的各种方法。
运行基准测试
要运行基准测试,可以在命令行中使用 go test
命令,并指定 -bench
标志。
go test -bench=.
这将运行所有以 Benchmark
开头的函数作为基准测试。
测量结果
testing
包会收集基准测试的各种统计信息,包括:
这些结果可以帮助分析和优化代码。
实战案例:比较字符串相等
考虑比较两个字符串相等的两种常见的 Go 方法:
// 使用 == 操作符 func equals1(a, b string) bool { return a == b } // 使用 strings.EqualFold 函数 func equals2(a, b string) bool { return strings.EqualFold(a, b) }
为了比较它们的性能,可以编写一个基准测试函数:
func BenchmarkEquals(b *testing.B) { a := "example" b := "Example" for i := 0; i < b.N; i++ { equals1(a, b) } for i := 0; i < b.N; i++ { equals2(a, b) } }
运行此基准测试将显示 equals1
明显快于 equals2
。这是因为 ==
操作符进行位比较,而 strings.EqualFold
Benchmark
dans le package testing
. La règle de dénomination de cette fonction est Benchmark<functionname></functionname>
.🎜rrreee🎜b
Le paramètre est un pointeur de type testing.B, qui fournit l'utilisateur Diverses méthodes pour exécuter des tests de performance. 🎜🎜🎜Exécuter un benchmark 🎜🎜🎜Pour exécuter un benchmark, utilisez la commande go test
sur la ligne de commande et spécifiez l'indicateur -bench
. 🎜rrreee🎜Cela exécutera toutes les fonctions commençant par Benchmark
comme benchmarks. 🎜🎜🎜Mesures🎜🎜🎜 Le package testing
collecte diverses statistiques pour les benchmarks, notamment : 🎜equals2
. En effet, l'opérateur ==
effectue des comparaisons au niveau du bit, tandis que strings.EqualFold
effectue également des comparaisons de chaînes indépendantes de la casse. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!