Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
What Is Go and Why Does It Exist? Go's Philosophy, Toolchain and When to Choose It, for C# Developers
Go is a small, natively compiled language that carries its runtime inside the binary, born at Google as an answer to slow builds and complexity in large codebases. A two-endpoint Bookstore service as a single 9.9 MB Windows .exe that starts in 10 ms and uses 12 MB, a comparison table with ASP.NET Core, go build/vet/fmt/fix/doc, cross-compiling, the six-month release policy and when to choose Go.
Go Fundamentals: Types, Zero Values, Slices, Maps, Pointers and Control Flow
In Go a slice is a small header made of a pointer, len and cap, and sub-slices share the same backing array, which is why a filter working on books[:0] corrupts the original catalog. The zero value philosophy, constants with iota, strings vs bytes vs runes and the len trap with Turkish characters, append growing capacity, nil maps and random map order, pointers and Go 1.26's new(expr), the 1.22 loop variable and nil slices turning into null in JSON.
Go Generics and Iterators: Type Parameters, Constraints, range-over-func and Generic Methods
In Go a constraint is a type set: unless you write ~int64, a named type such as Money cannot be passed to a generic function that asks for int64. Pagination in Bookstore with a generic Page[T], cmp.Ordered and comparable, how Go differs from C# generics (no variance, GC shape stenciling), an iter.Seq iterator that groups books by author, the yield trap, a comparison with the LINQ mindset, and Go 1.27's generic methods.