Go eşzamanlılık ve HTTP servisleri
Goroutine ve kanallarla işleri paralel yürütür, güvenli varsayılanlarla çalışan, düzgün kapanan bir HTTP servisi yazarsın.
Seviye 201 · 19 ders · 15 pratik lab
Dersler
Eşzamanlılık
- Goroutine’ler: hafif eşzamanlı işler: go anahtar sözcüğüyle işleri eşzamanlı başlatır ve ana programın neden beklemesi gerektiğini görürsün.
- Kanallar: goroutine’ler arası iletişim: Kanalla veri gönderip alır, kanalı kapatır ve tamponlu kanalla tamponsuz kanalı ayırt edersin.
- Tamponlu kanallar, kapatma ve range ile okuma
- select ile çoklu kanal ve zaman aşımı: Birden çok kanalı aynı anda bekler, zaman aşımı ekler ve takılı kalan işi önlersin.
- sync.WaitGroup ve Mutex: ortak veriyi korumak: Goroutine’lerin bitmesini beklemeyi ve ortak değişkeni kilitle korumayı öğrenirsin.
- İşçi havuzu ve boru hattı desenleri: Sınırlı sayıda işçiyle çok sayıda işi dağıtır ve aşamalı veri hattı kurarsın.
- context ile iptal ve süre sınırı: Uzun süren işleri context ile iptal eder, süre sınırı koyar ve sızan goroutine’leri önlersin.
- Yarış durumlarını bulmak: go test -race: Aynı veriye eşzamanlı erişimden doğan hataları yarış denetleyicisiyle tespit edip giderirsin.
- Kısa görev: dosyaları paralel özetleyen araç
HTTP servisleri
- net/http ile ilk sunucu: Standart kütüphaneyle bir HTTP sunucusu başlatır, işleyici yazar ve yanıt durum kodlarını belirlersin.
- Yönlendirme ve JSON API: Yola ve yönteme göre ayrılan uç noktalar kurar, JSON okuyup yazan bir API geliştirirsin.
- Ara katman: günlükleme ve kurtarma: Her isteğe uygulanan ara katman yazar, istek günlüğü tutar ve çöken işleyiciyi toparlarsın.
- Statik dosyalar ve html/template ile güvenli sayfa
- HTTP istemcisi ve zaman aşımları: Başka servislere istek atarken zaman aşımı ve yanıt gövdesi kapatma gibi zorunlu ayarları yaparsın.
- Güvenli HTTP varsayılanları: istek boyutu, süreler, başlıklar: Sunucuya okuma süresi, gövde boyutu sınırı ve güvenlik başlıkları ekleyerek kötü niyetli ya da aşırı yüke karşı sertleştirirsin.
- httptest ile işleyicileri test etmek
- Düzgün kapanış: devam eden istekleri bitirmek: Kapatma sinyalini yakalar, sürmekte olan istekleri tamamlayıp sunucuyu temiz kapatırsın.
- Kısa görev: sağlık ve sürüm uç noktası olan küçük servis
Bitirme
- Bitirme görevi: işçi havuzlu site denetim servisi: Kendi sitelerinin durumunu paralel denetleyip sonucu HTTP ile sunan, düzgün kapanan bir servis yazarsın.
Pratik lablar
- İşleri goroutine'lere dağıtıp beklemek: Dosya boyutlarını ayrı goroutine'lerde hesapla, WaitGroup ile bekle ve sonuçları kanal üzerinden topla.
- Kanalı kapatıp range ile tüketmek: Üreticinin işi bitince kanalı kapatmadığı için asılı kalan programı düzelt ve tüm öğelerin tam bir kez işlendiğini test et.
- select ile zaman aşımı ve yedek yanıt: İki kaynaktan ilk gelen yanıtı döndüren, süre dolunca yedek değere düşen ve geride goroutine bırakmayan fonksiyonu yaz.
- Ziyaret sayacını Mutex ile korumak: Eşzamanlı artışlarda eksik sayan map tabanlı sayacı sync.Mutex ile koru ve go test -race çıktısının temizlendiğini göster.
- Yarış algılayıcının bulduğu önbellek hatasını onarmak: Okuma sırasında kilitsiz erişen önbellekte yarış raporunu oku, okuma ve yazma yollarını RWMutex ile düzelt.
- Denetle-sonra-yap yarışını kapatmak: Stok denetimi ile düşümü arasında kilidi bırakan ve eksi stoğa düşen kodu tek kritik bölgede topla; bin eşzamanlı siparişte stok eksiye inmemeli.
- Sabit sayıda işçiyle iş kuyruğu: Dört işçili havuzla sahte küçük resim işlerini işle ve sonuçları girdi sırasıyla döndür.
- Boru hattını context ile iptal etmek: Üç aşamalı boru hattına context ekle; ilk hatada tüm aşamalar dursun ve hiçbir goroutine kanalda asılı kalmasın.
- Dosyaları süre sınırıyla paralel özetlemek: Bir dizindeki dosyaların SHA-256 özetini işçi havuzuyla hesapla; süre dolunca kısmi sonucu ve bitmeyen dosyaların listesini döndür.
- Sağlık ve sürüm uç noktaları yazmak: net/http ile durum ve sürüm bilgisini JSON döndüren iki uç nokta yaz; yanlış metoda 405 ver.
- Kayıt ve kurtarma ara katmanı yazmak: İstek süresini ve durum kodunu kaydeden, panikleyen işleyicide 500 döndürüp sunucuyu ayakta tutan ara katman zincirini yaz.
- Şablondaki kaçışsız çıktıyı kapatmak: Kullanıcı yorumlarını text/template ile basan sayfayı html/template'e taşı; betik içeren yorumun zararsız metin olarak göründüğünü httptest ile kanıtla.
- HTTP istemcisine zaman aşımı eklemek: Varsayılan istemciyle sonsuza dek bekleyen denetleyiciye zaman aşımı ekle ve yanıt gövdesini her yolda kapat.
- Sunucuya boyut ve süre sınırları koymak: İstek gövdesini MaxBytesReader ile sınırla, okuma ve yazma zaman aşımlarını ayarla ve güvenlik başlıklarını ekleyip httptest ile doğrula.
- Açık istekleri bitirerek kapanmak: Sinyal gelince yeni bağlantıyı reddeden, süren istekleri süre sınırı içinde bitiren kapanışı ekle ve yarım kalan yanıt olmadığını testle göster.
Kurs hakkında
Goroutine ve kanallarla işleri paralel yürütür, güvenli varsayılanlarla çalışan, düzgün kapanan bir HTTP servisi yazarsın.
Ne öğreneceksin
- Eşzamanlılık
- HTTP servisleri
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.