What Is New in Go 1.15
Go 1.15 delivers incremental but impactful improvements focused on tooling, runtime performance, and portability. This release polishes existing features rather than introducing major new syntax.
| Category | Key Changes |
|---|---|
| Tooling | Faster builds, smaller binaries, improved linker, Go command enhancements |
| Runtime & Compiler | More precise GC, optimizations for small allocations, new `tzdata` package |
| Ports | New `riscv64` port, updates to `linux/arm64` and `js/wasm` |
| Core Library | X.509 CommonName deprecation, new `time/tzdata` package, testing improvements |
How did the linker and build performance improve?
The linker saw significant reductions in both memory usage and CPU time. In practice, this translates to faster build times for large codebases and lower memory pressure during compilation.
Binary sizes were reduced by approximately 5-10% for typical Go programs. This was achieved through more aggressive optimization of Go-specific metadata and elimination of unused runtime functionality.
What garbage collection improvements were made?
Garbage collection became more precise, reducing the heap size by up to 5% for some applications. This matters because it directly lowers memory overhead for production services.
The compiler also optimized small object allocations. Allocations smaller than 128 bytes now have improved allocation speed, which benefits high-throughput services creating many small objects.
What's new with X.509 certificate validation?
Certificate verification now ignores the deprecated CommonName field on X.509 certificates unless no Subject Alternative Names are present. This change pushes toward modern security standards.
You might need to update certificates that only use CommonName. The crypto/x509 package provides clearer error messages to help identify these cases during the transition.
How does the new time/tzdata package work?
The new time/tzdata package allows embedding timezone database information directly into binaries.
This is crucial for systems that might not have a local timezone database available.
Import it with import _ "time/tzdata" to ensure your application has timezone data wherever it runs.
This solves deployment issues on minimal container images or embedded systems.
What platform support changes should I know about?
Go 1.15 adds preliminary support for RISC-V 64-bit architecture (linux/riscv64). This expands Go's
reach into emerging hardware platforms.
The js/wasm port now supports os.Pipe and delivers better performance. Linux ARM64 also
gained support for non-coherent memory systems, improving stability on newer hardware.
FAQ
Will my Go 1.14 code still work with Go 1.15?
Yes, Go 1.15 maintains the Go 1 promise of
compatibility. Your existing code should compile and run without changes, though some deprecated features may
generate new warnings.
Why is my binary smaller after upgrading to Go 1.15?
The linker became more efficient at
eliminating unused code and metadata. Most binaries see a 5-10% size reduction without any action on your part.
My certificate validation broke after upgrading - what happened?
Go 1.15 deprecated X.509
CommonName validation. Certificates must now use Subject Alternative Names. Check your certificates and update
them to include proper SAN fields.
How do I ensure my Go app has timezone data everywhere?
Add
import _ "time/tzdata" to your main package. This embeds the timezone database so your app works
even on systems without local tzdata files.
Should I use the new RISC-V port for production?
The RISC-V port is still experimental in Go
1.15. Use it for testing and development, but wait for more mature support before deploying to production
environments.