The Go integration is still in early development, and only some
go test CLI flags are supported.
See the compatibility section for more information on how to ensure your benchmarks work with CodSpeed.If you have any feedback, please reach out to us via
Discord or
email our support.go test and the testing package as you normally would. When
running your benchmarks in CI with CodSpeed, your benchmarks will automatically
be built and the reports will be sent to CodSpeed.
Creating benchmarks
You can just use thetesting package to write benchmarks in Go. If the
benchmarks are working with go test, then they will also automatically be
detected by CodSpeed without any additional configuration.
Here’s an example of a simple Fibonacci function benchmark:
fib_test.go
We recommend using b.Loop() as it's more precise and efficient.Still, for i := 0; i < b.N; i++ is also supported for backward compatibility
(before Go 1.24):Testing the benchmarks locally
To run the benchmarks with CodSpeed locally, you need to install thecodspeed
runner:
go test command with CodSpeed:
Running the benchmarks in your CI
To generate performance reports, you need to run the benchmarks in your CI. This allows CodSpeed to automatically run benchmarks and warn you about regressions during development. Here is an example of a GitHub Actions workflow that runs the benchmarks and reports the results to CodSpeed on every push to themain branch and every
pull request:
.github/workflows/codspeed.yml
Next steps
Benchmarking a Go Gin API
Build a Gin HTTP API, write Golang benchmarks, and run them with CodSpeed in
consistent CI environments
Example repository with benchmarks
The example GitHub repository for this Gin Gonic API with benchmarks.
Walltime instrument
Learn more about the Walltime instrument and how to use it.
Dive in performance changes
Learn more about profiling and how to read flame graphs.
Recipes
Sharding benchmarks in parallel CI jobs
If your benchmarks are taking too much time to run under the CodSpeed action, you can run them in parallel to speed up the execution. To parallelize your benchmarks, simply add filters to thego test command to
only run a subset of benchmarks in each job.
CompatibilityWe only support the following flags for
go test:-bench(required)