From the article
VictoriaMetrics Observability Blog
Author
- Adam Yates
- Aditya Kulkarni
- Adrian Bridgwater
- Agustín Gallego
- Alex Woodie
- Alexander Marshalov
- Aliaksandr Valialkin
- Aman Agarwal
- Antony Savvas
- Artem Navoiev
- Bill Tanner
- Cer6erus
- Claudio Masolo
- David Marshall
- Denys Holius
- Derek Foster
- Diana Todea
- Dima Lazerka
- Dmytro Kozlov
- Emily Foster
- Fintech Herald
- Fred Navruzov
- Gary Flood
- Gonzalo García Labat
- Ivan Yatskevich
- Jaime Hampton
- Jan Sokol
- Jason Bloomberg
- Jason English
- Jean-Jerome Schmidt-Soisson
- Jesús Espino
- Joab Jackson
- John Seekins
- Jose Gomez-Selles
- Julien Menan
- Karan Virdi
- Laveesh Kocher
- Leigh McGowran
- Lindsay Clark
- Marc Sherwood
- Mark Baker
- Martijn Van Best
- Martin Veitch
- Mathias Palmersheim
- Michelle Sebek
- Nick Gibson
- Nikolay Khramchikhin
- Pablo Fernandez
- Phuong Le
- Rafal Szypulka
- Renato Losio
- Richard Speed
- Roman Khavronenko
- Vadim Alekseev
- Vadim Rutkovsky
- Yurii Kravets
- Zakhar Bessarab
- Zhu Jiekun
No matching authors found.
Category
- Benchmark
- Community
- Company News
- Customer Stories
- Developer Experience
- Distributed Tracing
- Events
- Go
- Go @ VictoriaMetrics
- High Cardinality
- Kubernetes
- Monitoring
- Observability
- Open Source Tech
- OpenTelemetry
- OTLP
- Performance
- PostgreSQL
- Product News
- Tech Talk
- Time Series Database
- VictoriaLogs
- VictoriaMetrics
- VictoriaTraces
No matching categories found.
Filter: Go
Blog posts

gRPC in Go: Streaming RPCs, Interceptors, and Metadata
Go’s gRPC implementation uses code generation to create type-safe client and server interfaces. Streaming RPCs allow sending multiple messages over a single connection, perfect for real-time updates and continuous data flows. Interceptors provide middleware-like functionality for authentication, logging, and error handling without modifying your core service logic.

Practical Protobuf - From Basic to Best Practices
Different Protobuf types dramatically impact your binary size—sint32 encoding needs just 1 byte for negative numbers while int32 wastes 10 bytes, repeated fields can balloon with large tag numbers, and poor type choices can triple your network traffic. Learn the exact patterns to optimize your Protobuf messages for production.

How Protobuf Works—The Art of Data Encoding
Protocol Buffers is faster and smaller than JSON, but the interesting part is understanding why. This article breaks down the encoding techniques that make Protobuf efficient, backed by benchmark results and practical examples

How HTTP/2 Works and How to Enable It in Go
HTTP/2 solves head-of-line blocking at the application layer by multiplexing multiple streams over a single TCP connection. While HTTP/1.1 requires requests to be processed sequentially, HTTP/2 allows parallel processing through independent streams, each with its own ID. The Go standard library supports HTTP/2 out of the box when using HTTPS, and with some configuration, it can work over plain HTTP too

From net/rpc to gRPC in Go Applications
The net/rpc package in Go demonstrates basic RPC concepts by establishing TCP connections between clients and servers, using sequence numbers to match requests with responses, and supporting both gob (Go-specific) and JSON codecs for data serialization. While net/rpc is simpler and limited to Go services by default, gRPC offers advanced features like HTTP/2 streaming, cross-language support, and better performance

Weak Pointers in Go: Why They Matter Now
Through the weak package, you can create these special pointers that automatically become nil when their target memory gets collected. While they’re a bit trickier to use than regular pointers, they’re super useful for things like canonicalization maps and memory-efficient caching. The implementation is pretty clever too, using an 8-byte indirection object to make garbage collection more efficient.

Go Runtime Finalizer and Keep Alive
Go’s runtime package provides two intriguing features: Finalizers and KeepAlive, which help manage object lifecycle in unique ways. Finalizers let you attach cleanup functions to objects that run when they’re garbage collected. Meanwhile, KeepAlive serves as a tool to prevent premature object collection, especially when dealing with resources that need to stay alive longer than the compiler might expect.

Go sync.Once is Simple... Does It Really?
The sync.Once is probably the easiest sync primitive to use, but there’s more under the hood than you might think. It’s also a good opportunity to understand how it works by juggling both atomic operations and mutexes.

Go I/O Closer, Seeker, WriterTo, and ReaderFrom
Still, we haven’t really covered some other important interfaces, like Closer, Seeker, and a few others. And honestly, if you’re learning Go, you probably don’t want to leave those in the blind spot.