Go temelleri
Güvenlik ve altyapı araçlarında sık kullanılan Go’yu sıfırdan öğrenir; küçük, hızlı ve hataları açık yazan programlar geliştirirsin.
Seviye 101 · 29 ders · 24 pratik lab
Dersler
Başlarken
- Go araç takımı: go run, go build ve ilk program: Go’yu kurar, go run ve go build ile ilk programını çalıştırıp tek dosyalık çalıştırılabilir çıktı üretirsin.
- Modüller ve paketler: go mod ile proje düzeni: go mod init ile modül oluşturur, kodu paketlere böler ve başka paketleri içe aktarırsın.
- Değişkenler, sabitler ve sıfır değerler: var, := ve const kullanır, her türün başlangıçta hangi sıfır değeri aldığını bilirsin.
- Sayısal türler ve tür dönüşümü: int, uint, float gibi türleri ayırt eder, dönüşümleri açıkça yapar ve taşmayı hesaba katarsın.
- Dizgiler, byte ve rune: Unicode ile çalışmak: Bir dizginin baytlardan ve karakterlerden oluşmasının farkını anlar, Türkçe harfli metni doğru işlersin.
- İşleçler ve öncelik sırası: Aritmetik, karşılaştırma ve mantıksal işleçleri öncelik sırasına dikkat ederek kullanırsın.
- Kısa görev: birim dönüştüren küçük program
Akış denetimi ve veri yapıları
- Koşullar: if ve switch: Karar yapılarını if kısa bildirimi ve switch ile yazar, gereksiz iç içe kodu azaltırsın.
- Döngüler: tek for, range ve etiketli break: Go’da tek döngü olan for’u klasik, koşullu ve range biçimlerinde kullanırsın.
- Diziler ve dilimler: Sabit boyutlu dizi ile esnek dilim arasındaki farkı bilir, dilim oluşturur ve kesersin.
- Dilimlerin içi: kapasite, append ve ortak bellek: append sonrası dilimlerin neden beklenmedik biçimde değiştiğini anlar, copy ile güvenli kopya alırsın.
- Haritalar (map): anahtar-değer verisi: Harita oluşturur, anahtar varlığını denetler, siler ve sıralı dolaşmak için anahtarları ayrıca sıralarsın.
- Sıralama: sort ve slices paketleri: Dilimleri ve yapı listelerini kendi ölçütüne göre sıralarsın.
- Yapılar (struct) ve alan etiketleri: İlişkili verileri struct ile gruplar, iç içe yapı kurar ve alan etiketlerinin ne işe yaradığını görürsün.
- Kısa görev: metindeki en sık sözcükleri say
İşlevler, hata ve arayüzler
- İşlevler ve çoklu dönüş değeri: Birden çok değer döndüren işlevler yazar, adlandırılmış dönüş ve değişken sayıda argüman kullanırsın.
- Anonim işlevler ve kapanışlar: İşlevleri değer gibi geçirir, dış değişkeni yakalayan kapanışlar yazarsın.
- İşaretçiler: değer mi, adres mi?: Bir değerin kopyası ile adresini ayırt eder, işaretçi alan işlevlerle yapıyı yerinde değiştirirsin.
- Metotlar ve arayüzler: Yapılara metot bağlar, arayüzlerle farklı türleri aynı davranışta kullanırsın.
- Hata değerleri: error, errors.Is ve errors.As: Hataları dönüş değeri olarak ele alır, sarmalar ve türüne göre ayırt edersin.
- defer, panic ve recover: Temizlik işlerini defer ile garanti eder, panic’in ne zaman uygun olduğunu ve recover ile nasıl toparlanacağını öğrenirsin.
- Kısa görev: arayüzle ortak davranış ve hata dönen doğrulayıcı
Gerçek programlar
- Dosya okumak ve yazmak: os ve bufio: Dosyayı satır satır okur, tamponlu yazar ve dosyaları defer ile kapatırsın.
- JSON kodlamak ve çözmek: encoding/json: Yapıları JSON’a çevirir, JSON’u yapıya okur ve beklenmeyen alanları denetlersin.
- flag paketiyle komut satırı aracı: Bayrak ve argüman alan, kullanım yardımı veren küçük bir komut satırı programı yazarsın.
- go test ile birim testleri: Tablo temelli testler yazar, go test ile çalıştırır ve kapsama oranını okursun.
- Girdi doğrulama ve sınırlı okuma: Dışarıdan gelen veriyi doğrular, okunacak veri boyutuna üst sınır koyarsın.
- Kısa görev: JSON yapılandırmasını okuyup doğrulayan araç
Bitirme
- Bitirme görevi: günlük dosyasını özetleyen Go aracı: Bayrak alan, günlüğü okuyan, olay sayılarını JSON olarak yazan ve testleri bulunan bir araç geliştirirsin.
Pratik lablar
- Sıcaklık dönüşüm tablosu basmak: Santigrat değerlerini Fahrenhayt'a çeviren fonksiyonu yaz ve sonucu bir ondalıkla biçimlendirilmiş tablo olarak döndür.
- Sıfır değerleri varsayılanla doldurmak: Ayar yapısında sıfır değerinde kalan alanları varsayılanlarla doldur; bilerek sıfır verilmiş alanı ayırt etmek için işaretçi alan kullan.
- Boyut dönüşümündeki taşmayı yakalamak: int64 bayt sayısını int32'ye çevirirken sessizce taşan kota hesabını düzelt; sınır değerlerde hata döndür ve rastgele testleri geç.
- Türkçe metinde harf saymak: Bayt uzunluğu yerine rün sayısını döndüren ve metni rün bazında ters çeviren iki fonksiyon yaz.
- Başlıktan adres parçası üretmek: strings.Builder ile başlığı küçük harfe çevirip Türkçe harfleri eşleyerek tireli adres parçası üret; ardışık ayırıcıları tekille.
- Metni rünü bölmeden kısaltmak: Bayt sınırına göre kesip bozuk karakter üreten kısaltma fonksiyonunu geçerli UTF-8 sınırında kesecek şekilde düzelt; geçersiz girdiyi de ele al.
- Kargo bölgesini switch ile belirlemek: Posta kodunun ilk iki hanesine göre kargo bölgesini ve ücretini döndüren fonksiyonu ifadesiz switch ile yaz.
- Izgara aramasında etiketli break kullanmak: İki boyutlu ızgarada ilk boş hücreyi bulunca iki döngüden birden çıkan aramayı etiketli break ile yaz.
- Döngü değişkeninin adresini saklama hatasını bulmak: range ile gezerken kopyanın adresini saklayıp hepsini aynı değere çeviren indirim kodunu bul ve dilim öğelerini yerinde güncelleyecek şekilde düzelt.
- Dilimi yerinde süzmek: Negatif ölçümleri yeni bellek ayırmadan dilimden çıkaran fonksiyonu yaz.
- append ile kapasite büyümesini izlemek: Baştan kapasite vererek yeniden ayırmaları ortadan kaldır ve ayırma sayısının sıfıra indiğini testing.AllocsPerRun ile göster.
- Ortak taban dizisinden doğan bozulmayı gidermek: Alt dilime ekleme yapınca asıl dilimin verisini ezen sayfalama kodunu üç indisli dilimleme ya da kopyayla düzelt ve rastgele testleri geç.
- Ürün adetlerini map ile saymak: Satış satırlarından ürün başına toplam adedi map ile hesapla ve olmayan ürün sorgusunda virgül-ok deyimini kullan.
- Çalışanları birden çok alana göre sıralamak: Çalışanları önce bölüme, sonra soyada göre slices.SortFunc ile sırala; sonuç her çalıştırmada aynı olmalı.
- Map sırasına güvenen raporu kararlı yapmak: Her çalıştırmada satır sırası değişen ve testi ara sıra kıran raporda anahtarları sıralayarak çıktıyı kararlı yap; yapı etiketleriyle JSON adlarını düzelt.
- Bölüm ve kalanı birlikte döndürmek: Bölüm, kalan ve hata döndüren fonksiyonu yaz; sıfıra bölmede hata değeri ver.
- Kapanışla sıra numarası üreteci: Önek alıp her çağrıda artan numaralı kimlik döndüren kapanış üret; iki üretecin birbirinden bağımsız saydığını test et.
- Değer alıcıda kaybolan güncellemeyi bulmak: Bakiye güncellemesi kaybolan hesap türünde değer ve işaretçi alıcı karışıklığını bul, tutarlı hale getir ve nil alıcı çağrısını da güvenli yap.
- Para türü için Stringer yazmak: Kuruş cinsinden tutulan para türüne String metodunu ekle; binlik ayırıcı ve iki ondalıkla yazdır.
- Hataları errors.Is ve errors.As ile ayırmak: Sarmalanmış hatalarda bulunamadı durumunu errors.Is ile, alan adını taşıyan doğrulama hatasını errors.As ile ayırt eden işleyiciyi yaz.
- Panikleyen eklentiyi recover ile sınırlamak: Bir eklenti panik yapınca tüm programı düşüren çalıştırıcıyı defer ve recover ile düzelt; paniği hataya çevir ve açık dosyaların kapandığını göster.
- Dosyadaki satır ve sözcükleri saymak: bufio.Scanner ile dosyanın satır ve sözcük sayısını hesaplayan fonksiyonu yaz ve dosyayı defer ile kapat.
- JSON ayarını okuyup bayraklarla ezmek: JSON ayar dosyasını bilinmeyen alanları reddederek çöz, flag ile verilen değerlerle ez ve geçersiz portu anlaşılır hatayla bildir.
- Sınırlı okuma ve tablo testleriyle girdiyi sağlamlaştırmak: Dosyanın tümünü belleğe alan yükleyiciyi io.LimitReader ile sınırla, aşırı uzun satırı reddet ve sınır durumlarını tablo güdümlü testlerle kapsa.
Kurs hakkında
Güvenlik ve altyapı araçlarında sık kullanılan Go’yu sıfırdan öğrenir; küçük, hızlı ve hataları açık yazan programlar geliştirirsin.
Ne öğreneceksin
- Başlarken
- Akış denetimi ve veri yapıları
- İşlevler, hata ve arayüzler
- Gerçek programlar
- Bitirme
Ön koşullar
Ön bilgi gerekmez; kurs sıfırdan başlar.
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 başlangıç düzeyindedir; her terim ilk geçtiği yerde açıklanı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.