Go alıştırmaları
Her alıştırmada küçük ama gerçek bir sorunu Go ile çözer, testleri geçen ve hataları düzgün ele alan kod yazmayı alışkanlık hâline getirirsin.
Seviye 201 · 17 ders · 18 pratik lab
Dersler
Dizgiler ve koleksiyonlar
- Alıştırma: dağınık metni temizlemek ve normalleştirmek
- Alıştırma: CSV dosyasından toplam ve ortalama
- Alıştırma: kayıtları haritayla gruplamak
- Alıştırma: yinelenenleri atıp kararlı sıralamak
- Kısa görev: iki envanter listesinin farkını çıkar
Hatalar, arayüzler ve testler
- Alıştırma: hatayı sarmalayıp bağlam eklemek
- Alıştırma: bellek ve dosya deposu için tek arayüz
- Alıştırma: tablo tabanlı testlerle doğrulayıcı
- Alıştırma: genel türlerle Filter ve Map yardımcıları
- Kısa görev: IP ve CIDR girdilerini doğrulayan paket
Dosyalar, zaman ve eşzamanlılık
- Alıştırma: klasör ağacında büyük dosyaları bulmak
- Alıştırma: farklı biçimdeki zaman damgalarını ayrıştırmak
- Alıştırma: yarışsız eşzamanlı sayaç
- Alıştırma: saniyede sınırlı iş çalıştırmak
- Alıştırma: JSON akışını dönüştürüp süzmek
- Kısa görev: büyüyen günlük dosyasını izleyen tail benzeri araç
Bitirme
- Bitirme görevi: kullanıcı ve izin dökümünden denetim raporu
Pratik lablar
- Telefon listesini tek biçime getirmek: Farklı yazılmış telefon numaralarını tek biçime çevir ve geçersiz olanları ayrı listede döndür.
- CSV'den şube ortalamalarını çıkarmak: encoding/csv ile Ayçiçeği Gıda'nın satış dosyasını oku; şube başına toplam ve ortalamayı hesapla, bozuk satırları satır numarasıyla bildir.
- İki envanter dökümünü kararlı sırayla karşılaştırmak: Eski ve yeni envanterden eklenen, silinen ve değişen kayıtları bul; yinelenenleri ayıkla ve çıktıyı kararlı sırada üret.
- Hataya bağlam ekleyerek sarmalamak: Dosya okuma hatalarını %w ile hangi dosya ve hangi adım bilgisini ekleyerek sarmala ve errors.Is'in hâlâ çalıştığını test et.
- Tek arayüzle iki depolama: Bellek içi ve dosya tabanlı depoları aynı arayüzün arkasına al ve ikisini aynı test paketiyle sına.
- Jeneriklerle gruplama ve indirgeme yardımcıları: Tür parametreli GroupBy ve Reduce yardımcılarını yaz; kısıtları doğru seç ve mevcut üç kopyala-yapıştır fonksiyonu bunlarla değiştir.
- Kullanıcı adı doğrulayıcısını tabloyla sınamak: Uzunluk ve izinli karakter kurallarını denetleyen doğrulayıcıyı ve tablo güdümlü testlerini yaz.
- IP adresinin ağ aralığında olup olmadığını denetlemek: net/netip ile verilen adresin izinli aralıklardan birine girip girmediğini döndür; geçersiz girdide anlamlı hata ver.
- IP ve CIDR doğrulama paketi yazmak: IPv4, IPv6, aralık ve çakışan ağ denetimlerini yapan paketi yaz; örnek fonksiyonlar ve sınır durumlarını kapsayan testlerle teslim et.
- Dizin ağacındaki en büyük dosyaları bulmak: filepath.WalkDir ile ağacı gez ve en büyük on dosyayı boyut sırasıyla döndür.
- Farklı biçimli zaman damgalarını ayrıştırmak: Üç farklı biçimde gelen zaman damgalarını sırayla dene, UTC'ye çevir ve hiçbirine uymayanı hatayla bildir.
- Büyüyen günlük dosyasını izlemek: Dosyaya eklenen satırları izleyen aracı yaz; dosya kırpıldığında ya da yenisiyle değiştirildiğinde baştan okumaya geçsin ve satır kaçırmasın.
- Yarışsız eşzamanlı sayaç: Yüz goroutine'in artırdığı sayacı atomic ile yaz ve sonucun her koşuda tam olduğunu -race ile doğrula.
- İşleri saniyede sınırlı sayıda çalıştırmak: time.Ticker ile saniyede en çok beş iş başlatan zamanlayıcıyı yaz ve iptal edildiğinde ticker'ı durdurduğunu göster.
- Büyük JSON akışını bellek dostu süzmek: Devasa JSON dizisini json.Decoder ile öğe öğe oku, koşula uyanları dönüştürüp yaz ve bellek kullanımının girdi boyutundan bağımsız kaldığını ölç.
- Müşteri başına patlamalı hız sınırı: Her müşteri için saniyelik sınırı ve kısa patlama payı olan bir sınırlayıcı yaz; uzun süre görülmeyen müşterilerin kayıtları temizlensin ve yarış denetleyicisi temiz çıksın.
- Son tarihe kalan süreyi hesaplamak: Verilen son tarihe kalan süreyi gün ve saat olarak yazan fonksiyonu yaz; geçmiş tarihler için gecikme süresi gösterilsin ve şimdiki zaman parametre olarak alınsın.
- Saat dilimine göre bir sonraki çalışma anını bulmak: Belirli bir saat diliminde her gün aynı yerel saatte çalışan işin bir sonraki çalışma anını hesapla; yaz saati geçişlerinde atlanan ve yinelenen saatler testlerde denetlenir.
Kurs hakkında
Her alıştırmada küçük ama gerçek bir sorunu Go ile çözer, testleri geçen ve hataları düzgün ele alan kod yazmayı alışkanlık hâline getirirsin.
Ne öğreneceksin
- Dizgiler ve koleksiyonlar
- Hatalar, arayüzler ve testler
- Dosyalar, zaman ve eşzamanlılık
- 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.