go-profiler-notes
gotests
go-profiler-notes | gotests | |
---|---|---|
14 | 10 | |
3,483 | 4,861 | |
0.4% | - | |
1.5 | 0.0 | |
about 2 months ago | 8 months ago | |
Jupyter Notebook | Go | |
Creative Commons Attribution Share Alike 4.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
go-profiler-notes
- The Busy Developer's Guide to Go Profiling, Tracing and Observability
-
Dwarf-Based Stack Walking Using eBPF
Thanks!
As @brancz mentioned, Delve uses DWARF unwind information to produce backtraces (they are stored in the .debug_frame section for Go).
You are right, Go enabled frame pointers for all architectures as of 1.17 [0]. This is enabled to allow profilers to work well, without having to use to techniques such as the one we describe in our post.
When it gets funny is that there's `gopclntab`, a 3rd option in Go to unwind stacks, used by `panic` and I believe other parts of the runtime. If you are interested in more details, Felix Geisendörfer's repo contains way more details [1]
[0]: https://go.dev/doc/go1.17
[1]: https://github.com/DataDog/go-profiler-notes/blob/main/stack...
- Resources to Learn Profiling and Benchmarking
- go-profiler-notes/README.md at main · DataDog/go-profiler-notes
- Fantastic Symbols and Where to Find Them - Part 1
-
Share your must-know Go development tips
this is a good read about pprof https://github.com/DataDog/go-profiler-notes/blob/main/guide/README.md
- The Busy Developers's Guide to Go Profiling, Tracing and Observability
gotests
-
Russ Cox: Go Testing by Example
A huge time-saver for me when generating table-driven test boilerplate in Go has been using gotests[0] to generate the template.
If you use VSCode with the Go extension it's already available there as a command "Go: Generate Unit Tests for Function/Package".
[0] https://github.com/cweill/gotests
-
Table-driven tests are overrated.
I believe vscode does it using gotests (https://github.com/cweill/gotests), so people can probably use it outside of vscode too.
-
[gopher.nvim] Plugin for golang development
What can do this plugin? - Modify struct tags. - Run go get, go mod & go generate commands inside of nvim. - Implement interface by impl. - Generate tests by gotests. - Install required tools for plugin working(by go install).
-
What is the hardest part of the load/performance testing?
I was just thinking about some smart solutions. For example generating test plan and fake data by inspecting current changes on the code and db schema. Just like this https://github.com/cweill/gotests but for performance test plans.
-
Take on a better unit test style
Did you encounter gotests when you were doing your research? It's a table test generation tool that generates test code using t.Run(). I do wish it could generate tests using testify, because I frequently end up rewriting the code in the inner loop, but I still use it because it's better than I am about ensuring there's a test for all functions I write.
-
Patterns for unit testing in Go?
I use https://github.com/cweill/gotests to generate the test scaffolding.
- Share your must-know Go development tips
- gotests
- ¿Como estructurar tu aplicación en Go?
-
Learn Go in ~5mins
You can save yourself a minute and generate the test case boilerplate for your with https://github.com/cweill/gotests :)
What are some alternatives?
fgprof - 🚀 fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together.
ginkgo - A Modern Testing Framework for Go
parca - Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.
gomock - GoMock is a mocking framework for the Go programming language.
parca-agent - eBPF based always-on profiler auto-discovering targets in Kubernetes and systemd, zero code changes or restarts needed!
selenoid - Selenium Hub successor running browsers within containers. Scalable, immutable, self hosted Selenium-Grid on any platform with single binary.
goimpl.nvim - Generate stub for interface on a type
go-sqlmock - Sql mock driver for golang to test database interactions
nvim
go-fuzz - Randomized testing for Go
collect - collect all pprof profiles with one command
Mmock - Mmock is an HTTP mocking application for testing and fast prototyping