Go

Resilient file uploading with Go

UB5.132
Marius Kleidl
<p>File uploads are a ubiquitous and fundamental part of modern applications. While simple at first, they become increasingly challenging as file sizes grow. Users expect reliable data transfers, even when uploading multi-gigabyte files over unreliable mobile networks.</p> <p>Conventional file uploads over HTTP fail unrecoverably when the underlying connection is interrupted. Resumable uploads, on the other hand, allow an application to continue uploading a file exactly where it left off. This preserves previously transferred data and greatly improves the user experience.</p> <p><a href="https://github.com/tus/tusd">Tusd</a> is an open-source file-upload server written in Go that makes it easy to add resumable uploads to any application - even those written in languages other than Go.</p> <p>This talk explores why Go is a natural fit for such use cases. In particular, we dive into how contexts help coordinate concurrent, long-running HTTP requests, how the net/http package provides fine-grained control over request handling, and how Go’s tooling assists in testing various failure scenarios.</p> <p>Additional links: - Tus homepage: https://tus.io/ - Tusd upload server: https://github.com/tus/tusd</p>

Additional information

Live Stream https://live.fosdem.org/watch/ub5132
Type devroom
Language English

More sessions

2/1/26
Go
Maartje Eyskens
UB5.132
<p>What is new since Go 1.25. In this talk we'll bring you up to date with all upcoming changes to the Go language and the community! Go 1.26 will be released in February 2026, we will be taking a look to all upcoming features as well as give an update on important changes in Go 1.235 This includes traditionally updates about the language, tooling, libraries, ports and most importantly the Go Community.</p>
2/1/26
Go
Victor Lyuboslavsky
UB5.132
<p>Most Go codebases begin as straightforward layered monoliths, but years of growth often turn those layers into a web of hidden coupling, unclear ownership, and hard-to-predict side effects. Small changes start requiring deep context, and compile and test times slowly creep up, turning routine work into risky work. Rewrites promise a clean slate but rarely succeed in practice. What the Go community lacks are real examples of large open source Go projects that have successfully evolved toward a ...
2/1/26
Go
Jesús Espino
UB5.132
<p>Go’s runtime has always prided itself on efficient, low-latency garbage collection. But modern hardware brings new challenges. More cores, bigger caches, and heavier workloads. In this talk, we’ll start by exploring how Go’s current garbage collector and memory allocator work together to manage memory. Then we’ll dive into the new GreenTea GC, an experimental redesign that cleans memory in groups (“spans”) instead of object-by-object. You’ll learn how it works, why it matters, ...
2/1/26
Go
Valentyn Yukhymenko
UB5.132
<p>Reflection is a form of metaprogramming that often feels like magic — letting you inspect and manipulate your code at runtime. But there's no magic here at all — just clever engineering that makes your programs simpler and more flexible.</p> <p>In this talk, we'll take a look at how reflection actually works under the hood in Go. We'll explore how types and values are represented at runtime, what really happens when you call <code>reflect.ValueOf</code> or <code>reflect.TypeOf</code>, and ...
2/1/26
Go
Christian Simon
UB5.132
<h2>The Problem</h2> <p>Go's pprof tells you <em>where</em> your CPU time is spent, but not <em>why</em> the CPU is slow. Is it cache misses? Branch mispredictions? These hardware-level performance characteristics are invisible to pprof but critical for optimisation.</p> <h2>The Solution</h2> <p>perf-go bridges this gap by leveraging Linux's <code>perf</code> tool and CPU Performance Monitoring Units (PMUs) to expose hardware performance counters for Go programs. It translates perf's low-level ...
2/1/26
Go
Ronna Steinberg
UB5.132
<p>Go 1.25 introduced <code>testing/synctest</code>, a package that brings deterministic scheduling and control over concurrency during tests. For developers who struggle with flaky tests, hidden data races, or hard-to-reproduce timing issues, synctest offers a powerful solution: it lets you run concurrent code in a bubble, so you can efficiently explore interleavings, force edge cases, and prove correctness.</p> <p>In this talk, we’ll explore the motivation behind synctest, and dive into the ...
2/1/26
Go
Akihiro Suda
UB5.132
<p>Open source is under attack. Most notably the xz/liblzma backdoor incident (CVE-2024-3094) has shown how even trusted and widely adopted libraries can be compromised. Also, since February 2025, the Go language community has been observing an enormous amount of malicious Go modules being published with fake GitHub stars and very plausible contents.</p> <p>This session introduces gomodjail, an experimental tool that “jails” Go modules by applying syscall restrictions using seccomp and ...