Go 1.22’den itibaren standart kütüphanede daha iyi routing desteği sunuluyor
- Önceden routing işlemleri elle yapılıyordu, ancak artık
mux.HandleFunc kullanılarak daha basit şekilde routing yapılabiliyor
- Login middleware eklenerek güvenlik artırılabiliyor
Yerleşik router’da dikkat edilmesi gereken nokta: sondaki slash nedeniyle yönlendirme
/records/ yolu oluşturulursa /records isteği /records/ adresine yönlendirilir
- Bu nedenle POST isteğinin gövdesi silinip istek GET’e dönüşebilir
- Çözüm olarak
POST /records/ yerine POST /records gibi API endpoint’leri kullanmak gerekir
sqlc ile veritabanı sorgu kodunun otomatik üretilmesi
- ORM öğrenmeden SQL sorguları yazmayı sağlayan
sqlc aracı keşfedildi
- SQL sorguları yazıldığında bunlar otomatik olarak Go koduna dönüştürülüyor
- ORM dokümantasyonuna bakmadan gerekli SQL sorgularını kolayca yazmak mümkün
sqlite optimizasyon ipuçları
- Veritabanına yazma için ayrı bir nesne kullanın ve
db.SetMaxOpenConns(1) ayarını uygulayın
- Okuma hızını artırmak için yazma ve okuma amaçlı ayrı DB nesneleri kullanın
- JOIN gerektirmeyen iki tabloyu ayrı veritabanlarına koyup bağımsız bağlantılarla kullanmak mümkün
Go 1.19’da GC bellek sınırı ayarlama
- 256MB veya 512MB gibi görece düşük belleğe sahip VM’lerde tüm Go projelerini çalıştırınca uygulamanın sürekli OOM nedeniyle kapanması sorunu yaşandı
- Garbage collector’ın varsayılan ayarı, mevcut heap boyutunun 2 katına kadar bellek ayrılmasına izin veriyor
- Go 1.19’da, uygulama belirli bir bellek kullanımına ulaştığında GC çalıştırılmasını söyleyen bir yöntem eklendi
- GC bellek sınırı 250MB olarak ayarlandıktan sonra OOM kapanmalarının sıklığı azaldı
export GOMEMLIMIT=250MiB
Go ile web sitesi yapma nedenleri
- Tek bir statik binary olarak dağıtım yapmak kolaydır
- Production’da kullanılabilecek yerleşik bir web sunucusu vardır; WSGI vb. kurmaya gerek yoktur
- Go toolchain’inin kurulumu ve kullanımı kolaydır
- HTTP yanıtı göndermek basittir, bu da projeyi bakım açısından kolaylaştırır
- Standart kütüphanede
net/http bulunduğu için ek kütüphane kurmadan web sitesi yapılabilir
- Sistem seviyesindeki işler de kolayca yapılabilir
- Her şey projeyi kolay yönetilebilir kılacak şekilde tasarlanmış gibi görünüyor
Hâlâ çözülemeyen sorunlar
- Go’da henüz çok yapılmamış şeyler var
- HTML template render etme
- Gerçek bir login sistemi uygulama
- CSRF uygulama
- Genel olarak güvenlik açısından hassas özelliklerin nasıl uygulanacağı iyi bilinmediği için login/CSRF gerektiren projelere başlanmıyor
Go’nun yeni özelliklerini görmek güzel
- Bu yazıda bahsedilen iki Go özelliği (
GOMEMLIMIT ve routing) son birkaç yıl içinde eklendi
- Yeni Go sürümlerinin release note’larına daha fazla dikkat etmek gerekiyor gibi görünüyor
2 yorum
sqlcgerçekten harika.Hacker News görüşleri
embedpaketinden bahsedilmemesi üzücüContexteklemek iyi olursqlcbazı önemli kısıtlar ve küçük kullanım zorlukları içeriyor; kullanmadan önce issue listesini kontrol etmekte fayda varGOMAXPROCSdoğru ayarlanmalıGOMEMLIMITkullanmak GC konusunda daha az endişe duymanızı sağlayabilirhtml/templategarip ve birçok sorunu var, bu yüzden kullanmamak daha iyiTempltercih ediliyormuxkullanmaya alışmıştım ama yeni sürüm özelliklerine dikkat etmemiştimnilsorunu yüzünden basit işler bile karmaşıklaşıyorBEGIN CONCURRENTkullanılabilir