Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Go Nedir, Neden Var? C# Geliştiricisi için Go'nun Felsefesi, Toolchain'i ve Ne Zaman Seçilir
Go, Google'da büyük codebase'lerin yavaş build'ine ve karmaşıklığına cevap olarak doğmuş, az özellikli, native koda derlenen ve runtime'ı binary'nin içinde taşıyan bir dil. İki endpoint'li Bookstore servisinin Windows için 9,9 MB'lık tek .exe olması, 10 ms'de açılıp 12 MB kullanması, ASP.NET Core ile karşılaştırma tablosu, go build/vet/fmt/fix/doc, cross-compile, altı aylık release politikası ve Go'yu ne zaman seçmen gerektiği.
Go Temelleri: Tipler, Zero Value, Slice, Map, Pointer ve Kontrol Akışı
Go'da slice; pointer, len ve cap'ten oluşan küçük bir header'dır ve alt slice'lar aynı backing array'i paylaşır, bu yüzden books[:0] üzerinde çalışan bir filtre orijinal kataloğu bozar. Zero value felsefesi, iota ile sabitler, string/byte/rune farkı ve Türkçe karakterde len tuzağı, append'in kapasiteyi büyütmesi, nil map ve rastgele map sırası, pointer ve Go 1.26'nın new(expr)'i, 1.22 döngü değişkeni ve nil slice'ın JSON'da null olması.
Go Generics ve Iterator'lar: Type Parameter, Constraint, range-over-func ve Generic Method'lar
Go'da constraint bir tip kümesidir: ~int64 yazmadığın sürece Money gibi isimli bir tip int64 isteyen generic fonksiyona verilemez. Bookstore'da generic Page[T] ile sayfalama, cmp.Ordered ve comparable, C# generics'ten farklar (variance yok, GC shape stenciling), iter.Seq ile kitapları yazara göre gruplayan iterator, yield tuzağı, LINQ zihniyetiyle kıyas ve Go 1.27'nin generic method'ları.