Eğitim İçeriği
1. Go'ya Giriş
- Go (Golang) nedir?
- Go'nun tarihi ve tasarım felsefesi
- Web ve sistem programlama dil olarak Go
- Temel özellikler:
- Statik tiplendirme
- Basitlik ve okunabilirlik
- Hızlı derleme
- Gömülü eşzamanlılık (concurrency)
- Çöp toplayıcısı (Garbage collection)
- Çapraz platform derleme
- Go'nun yaygın kullanım senaryoları
- Go'nun avantajları ve kısıtlamaları
- C/C++, JavaScript, Ruby, Python ve Java ile karşılaştırma
- Go ekosistemini anlama
- Go standart kütüphanesi genel bakış
- Go modülleri ve bağımlılık yönetimi
- Go uygulamasının anatomisi
- Uygulama: Basit bir Go programını inceleme ve çalışma
2. Go Geliştirme Ortamının Kurulması
- Go'nun yüklenmesi
- Go araç zincirini (toolchain) anlama
- Ortam değişkenlerinin yapılandırılması
- Bir IDE veya kod editörü seçimi
- Go ile komut satırı kullanımı
- Go çalışma alanının oluşturulması
- Go proje yapısının anlaşılması
- Go Modülleri ile proje başlatma
go mod initkullanımıgo getile bağımlılık yönetimi- Bağımlılıkların güncellenmesi ve denetlenmesi
gofmtile kaynak kod biçimlendirmego runile program çalıştırmago buildile uygulama oluşturma- Go uygulamalarının yüklenmesi
- Çapraz derleme (Cross-compiling)
- Uygulama: Bir konteyner içinde Go projesi oluşturma ve yapılandırma
3. Go Değişkenleri, Sabitleri ve Tipleri
- Değişken beyan etme
- Açık ve çıkarılmış tipler
- Kısa değişken beyanları
- Sabitler
- Sıfır değerleri
- Değişkenlerin kapsamı ve ömrü
- İlkel veri tipleri:
- Tamsayılar
- Kayan noktalı sayılar
- Karmaşık sayılar
- Booleenler
- Dizgiler (String)
- Tip dönüşümleri
- Unicode ve UTF-8 ile çalışma
- Rune ve baytlar
- Birden fazla değişken ataması
- Tip güvenliğini anlama
- Alıştırma: Küçük bir komut satırı veri işleme programı oluşturma
4. Operatörler ve İfadeler
- Aritmetik operatörler
- Karşılaştırma operatörleri
- Mantıksal operatörler
- Atama operatörleri
- Artırma ve azaltma
- Operatör önceliği
- Tamsayı ve kayan nokta hesaplamalarıyla çalışma
- Yaygın tip dönüşüm hatalarından kaçınma
- Alıştırma: Hesaplama ve doğrulama mantığı uygulama
5. Tarihler, Saatler ve Biçimlendirme
timepaketini kullanma- Tarih oluşturma ve değiştirme
- Mevcut saati getirme
- Saat dilimleri ve konumlar
- Tarih ve saat ayrıştırma (Parsing)
- Tarih ve saat biçimlendirme
- Süre hesaplama
- Unix zaman damgalarıyla çalışma
- Zaman aşımı yönetimi
- Alıştırma: Uygulamaya zaman damgaları ve süre hesaplamaları ekleme
6. Diziler, Dilimler, Haritalar ve Yapılar
Diziler (Arrays)
- Dizi beyan etme
- Dizileri başlatma
- Diziler üzerinde yinelendirme (Iteration)
- Çok boyutlu diziler
Dilimler (Slices)
- Dilimler ve diziler arasındaki farkı anlama
- Dilim oluşturma
- Öğe ekleme
- Dilim kopyalama
- Dilim uzunluğu ve kapasitesi
- Dilimden dilim çıkarma
- Yaygın dilim tuzakları
Haritalar (Maps)
- Harita oluşturma
- Girdi ekleme ve kaldırma
- Anahtarın var olup olmadığını kontrol etme
- Haritalar üzerinde yinelendirme
- Karmaşık veri içeren haritalar
Yapılar (Structs)
-
Yapıları tanımlama
-
Yapı alanları
-
Yapıları başlatma
-
İç içe geçmiş yapılar
-
İsimsiz yapılar
-
Yapı yöntemleri (Metotları)
-
JSON yapı etiketleri
-
Uygulama: Yapılar, dilimler ve haritalar kullanarak kullanıcıları, ürünleri ve uygulama verilerini modelleme
7. Koşullu Mantık ve Döngüler
ififadelerielseveelse if- Koşullar içinde değişken beyanları
fordöngüleri- Sonsuz döngüler
- Döngü koşulları
breakvecontinuerangeile yinelendirme- İç içe geçmiş döngüler
switchifadeleri- İfade tabanlı switch'ler
- Birden fazla vaka
- Varsayılan vakalar
- Tip switch'leri
- Alıştırma: Uygulama doğrulama ve işleme mantığı uygulama
8. Fonksiyonlar
- Fonksiyon tanımlama
- Fonksiyon parametreleri
- Dönüş değerleri
- Birden fazla dönüş değeri
- İsimlendirilmiş dönüş değerleri
- Değişken uzunluklu fonksiyonlar (Variadic)
- İsimsiz fonksiyonlar
- Fonksiyon değerleri
- Kapanışlar (Closures)
- Özyineleme (Recursion)
- Fonksiyonları argüman olarak geçirme
- Hata döndüren fonksiyonlar
- Küçük, yeniden kullanılabilir fonksiyonlar tasarlama
- Alıştırma: Mevcut kodu yeniden kullanılabilir fonksiyonlara dönüştürme
9. İşaretçiler ve Bellek Kavramları
- İşaretçi nedir?
- Adres alma ve referans alma operatörleri
- İşaretçiler ve fonksiyon parametreleri
- İşaretçi alıcıları (Receiver)
- Yapılara işaretçiler
- Null işaretçiler (Nil)
- İşaretçilerin ne zaman kullanılacağı
- Değer ile referans anlambilimi
- Go'nun bellek yönetimi ve çöp toplayıcısını anlama
- Yaygın işaretçi hataları
- Uygulama: İşaretçiler kullanarak uygulama verilerini değiştirme
10. Go ile Web Uygulaması Oluşturma
- Go'nun web yeteneklerine genel bakış
net/httppaketine giriş- HTTP sunucusu oluşturma
- HTTP istek ve yanıtları
- HTTP yöntemleri
- İstek URL'leri ve sorgu parametreleri
- HTTP başlıkları
- HTTP durum kodları
- Yönlendirme (Routing) temelleri
- Yöneticiler (Handler) oluşturma
- Form verisi işleme
- Statik dosyalar sunma
- HTML şablonları ile çalışma
- Şablon değişkenleri ve kontrol yapıları
- Web uygulaması yapılandırma
- Uygulama: Temel bir Go web sunucusu oluşturma
11. RESTful Web Hizmeti Oluşturma
- REST mimarisi temelleri
- API uç noktaları tasarımı
- GET, POST, PUT, PATCH ve DELETE
- JSON ile çalışma
- JSON kodlama ve çözdürme
- İstek doğrulaması
- HTTP durum kodları
- Hata yanıtları
- Sorgu parametreleri ve yol parametreleri
- API yanıt yapıları
- Yöneticileri iş mantığından ayırma
- Uygulama: CRUD REST API'si oluşturma
12. Go Çalışma Zamanı, Derleme ve Proje Yapıları
- Go derleyicisini anlama
- Go derleme süreci
go rungo buildgo installgo test- Derleme bayrakları (flags)
- Ortama özel yapılandırma
- Farklı işletim sistemleri ve mimariler için derleme
- Bağımsız (standalone) binary dosyaları üretme
- Uygulama yapılandırmasını yönetme
- Alıştırma: Uygulamayı birden fazla platform için derleme
13. Dosyalar ve Web ile Çalışma
- Dosyaları açma ve kapatma
- Dosya okuma
- Dosya yazma
- Dizin oluşturma
- Dosya meta verisi
- Tamponlu G/Ç (I/O)
- Akışlarla (streams) çalışma
- JSON dosyalarını okuma ve yazma
- HTTP istemcileri
- Giden HTTP istekleri yapma
- HTTP istemcisi hatalarını işleme
- Zaman aşımı ve iptal
- API yanıtlarını işleme
- Uygulama: Dış bir API'den veri alma ve yerel olarak kalıcılaştırma
14. Hata Yönetimi ve Hata Ayıklama
- Go'nun hata yaklaşımı
- Fonksiyonlardan hata döndürme
- Hataları kontrol etme
- Özel hatalar oluşturma
- Hataları sarmalama (Wrapping)
- Hatalara bağlam ekleme
errors.Isveerrors.As- Panic ve kurtarma (Recovery)
panicne zaman kullanılmalı?- Yaygın Go sorunlarını ayıklama
- Uygulama etkinliğini günlükleme
- Go hata ayıklama araçlarını kullanma
- Alıştırma: Bilerek tanıtılmış uygulama hatalarını teşhis etme ve düzeltme
15. Arayüzler ve Soyutlama
- Arayüz nedir?
- Yerleşik arayüz uygulaması
- Arayüz tanımlama
- Arayüz değerleri
- Boş arayüzler /
any - Tip iddiaları (Assertions)
- Tip switch'leri
- İşaretçi ile değer uygulamaları arasındaki fark
- Küçük arayüzler tasarlama
- Bağımlılık tersine çevirme
- Test için arayüz kullanımı
- Uygulama bağlamağını (coupling) azaltma
- Uygulama: Örnek web uygulamasına arayüzleri tanıtma
16. Paketler ve Proje Örgütlenmesi
- Paket oluşturma
- Paket adlandırma kuralları
- Dışa açılmış ve dışa açılmamış tanımlayıcılar
- Paket içe aktarma
- Paket başlatma
- Uygulama katmanlarını düzenleme
- Dahili paketler
- Go Modülleri ile bağımlılık yönetimi
- Anlamsal sürümleme (Semantic versioning)
- Üçüncü taraf paketleri kullanma
- Dairesel bağımlılıklardan kaçınma
- Bakımı kolay Go projeleri tasarımı
- Alıştırma: Uygulamayı ayrı paketlere dönüştürme
17. Goroutine'lerle Eşzamanlılık
- Eşzamanlılık nedir?
- Goroutine'ler
- Goroutine başlatma
- Hafif eşzamanlı çalışmayı anlama
- Aenkronizasyon zorlukları
- Paylaşılan durum
- Yarış koşulları (Race conditions)
sync.WaitGroupkullanımı- Kilitler (Mutexes) ve okuma/yazma kilitleri
- Atomik işlemler
- Uygulama: Sıralı bir görevi eşzamanlı işleme dönüştürme
18. Kanallar
- Kanalları anlama
- Değer gönderme ve alma
- Tamponlu ve tamponsuz kanallar
- Bloklama davranışı
- Kanalları kapatma
- Kanallar üzerinde yinelendirme
- Yönlü kanallar
- Kanal tabanlı iletişim
- Select ifadeleri
- Zaman aşımı ve iptal
- İşçi havuzu (Worker-pool) desenleri
- Üretici/tüketici desenleri
- Uygulama: Eşzamanlı bir işçi sistemi oluşturma
19. Bağlam (Context) ve İstek Yönetimi
- Bağlamların web uygulamalarında neden önemli olduğu
context.Context- İstek kapsamlı bağlam
- İptal
- Son tarihler (Deadlines)
- Zaman aşımı
- Bağlamı uygulama katmanları boyunca yayma
- Veritabanı veya HTTP işlemlerini iptal etme
- Bağlam kötü kullanımından kaçınma
- Alıştırma: Web uygulamasına istek iptali ve zaman aşımı ekleme
20. Go Uygulamalarını Test Etme
- Otomasyonlu testlerin neden önemli olduğu
- Birim testi yazma
testingpaketi- Test fonksiyonları
- Test adlandırma kuralları
- Tablo sürücülü testler
- Hataları test etme
- HTTP yöneticilerini test etme
- HTTP test sunucuları
- Test sabitleri (Fixtures)
- Test kapsama alanı
- Referans testleri (Benchmarks)
- Örnek testler
- Mock veya sahte nesnelerle arayüzleri test etme
- Uygulama: Örnek uygulama için bir test paketi oluşturma
21. Performans Optimizasyonu
- Go uygulama performansını anlama
- Darboğazları belirleme
- İşlemci ve bellek performansı
- Verimli veri yapıları
- Gereksiz atamaların azaltılması
- Dizgiler, baytlar ve tamponlar
- Goroutine yönetimi
- Aşırı eşzamanlılıktan kaçınma
- Önbellekleme stratejileri
- Veritabanı ve ağ hususları
- Uygulamaları profil analizi (profiling)
- Referans testleri ve performans testleri
- Go profil analizi araçlarını kullanma
- Alıştırma: Bilerek verimsiz yapılandırılmış bir uygulamanın profil analizi yapma ve optimize etme
22. Güvenlik ve Sağlam Web Uygulaması Uygulamaları
- Kullanıcı girdisini doğrulama
- HTTP isteklerinin güvenli işlenmesi
- Yaygın web güvenlik açıklarını önleme
- Güvenli hata yönetimi
- Kimlik doğrulama ve yetkilendirme kavramları
- Gizlilik ve yapılandırma yönetimi
- Güvenli HTTP iletişimi
- Günlüklerde hassas bilgilerin bulunmasını önleme
- Bağımlılık yönetimi ve güncellemeler
- Kaynak sınırları ve istek zaman aşımı
- Alıştırma: Örnek API'yi inceleyip güçlendirme
23. Uygulama Günlüklemesi ve Gözlemlenebilirlik
- Günlükleme temelleri
- Yapılandırılmış günlükleme
- Günlük seviyeleri
- İstek günlükleme
- Hata günlükleme
- İlişkilendirme ve istek kimlikleri
- Uygulama davranışını izleme
- Temel metrikler
- Sağlık kontrolü uç noktaları
- Üretim sorunlarını teşhis etme
- Uygulama: Yapılandırılmış günlükleme ve sağlık kontrolleri ekleme
24. Go Uygulamasını Konteynerleştirme
- Neden konteyner kullanılmalı?
- Go uygulamaları ve konteynerleştirme
- Dockerfile yazma
- Çok aşamalı derleme (Multi-stage builds)
- Minimel çalışma zamanı görüntüsü oluşturma
- Ortam değişkenleri ile yapılandırma yönetimi
- Konteyner ağları
- Uygulama portlarını açma
- Uygulamayı konteyner içinde çalıştırma
- Konteynerleştirilmiş uygulamayı test etme
- Uygulama: Örnek Go uygulamasını üretim hazır konteyner olarak paketleme
25. Dağıtım
- Uygulamayı üretim için hazırlama
- Üretim binary dosyalarını oluşturma
- Ortam yapılandırması
- Konteyner tabanlı dağıtım
- Dagıtım mimarisi
- Ters vekiller (Reverse proxies)
- HTTPS/TLS hususları
- Uygulama sağlık kontrolleri
- Yumuşak kapanma (Graceful shutdown)
- İşletim sistemi sinyallerini işleme
- Go web uygulamalarını ölçeklendirme
- Yatay dikey ölçeklendirme
- Temel dağıtım sorun giderme
- Uygulama: Örnek web uygulamasını dağıtma
26. Zirve Projesi: Tamamlanmış Go Web Uygulaması
Katılımcılar, kavramları bir araya getirerek tamamlanmış bir uygulama geliştirir.
Proje şunları içerebilir:
- Go Modülleri ile proje başlatma
- Paket örgütlenmesi
- HTTP yönlendirme
- REST API uç noktaları
- JSON istek ve yanıt işleme
- Girdi doğrulaması
- Hata yönetimi
- Arayüzler
- Eşzamanlı işleme
- Dış API ile iletişim
- Dosya veya veritabanı kalıcılığı
- Otomasyonlu testler
- Günlükleme
- Performans hususları
- Konteynerleştirme
- Üretim yapılandırması
- Dagıtım
27. İnceleme ve En İyi Uygulamalar
- Go sözdizimi temellerinin tekrarı
- Go kodlama kuralları
- İdiomatik Go yazma
- Kodu basit tutma
- Verimli paket tasarımı
- Hata yönetimi en iyi uygulamaları
- Arayüz tasarım ilkeleri
- Eşzamanlılık en iyi uygulamaları
- Test stratejileri
- Performans hususları
- Bakım kolaylığı ve okunabilirlik
- Yeni Go geliştiricilerin yaptığı yaygın hatalar
- Go geliştirmeye devam etmek için önerilen yaklaşımlar
28. Sonuç
- Temel kavramların tekrarı
- Tamamlanmış web uygulamasının tekrarı
- Sorular ve tartışma
- Yaygın gerçek dünya senaryolarının sorun giderme
- Go geliştirmesi için önerilen sonraki adımlar
- Ek Go kütüphaneleri ve ekosistem kaynakları
- Üretim kalitesinde Go hizmetleri oluşturma için ek fırsatlar
Kurs İçin Gerekli Önbilgiler
- Genel programlama ilkeleri hakkında bilgi
Hedef Kitle
- Geliştiriciler
Danışanlarımızın Yorumları (5)
Eğitmen, asla önceden kabul etmediğim konuda kendisini uzman olarak kanıtladı. Endüstri standartları hakkında çok faydalı bilgiler sağladı.
Giuseppe
Eğitim - Learning Go Programming
Yapay Zeka Çevirisi
Yaptığımız el ile alıştırmaların miktarını çok beğendim. Ben kişisel olarak şeyleri yaparak öğrenirim, bu yüzden Francesco'nun pek çok el ile alıştırma sunması iyi oldu. Slaytlardan bir kaç kavramı anlamakta zorlandım ama gerçekten ellerime geçip dilin bazı temel özelliklerini uyguladığında bana daha iyi anlaşıldı.
Adam Fitzhugh - OpticoreIT
Eğitim - Learning Go Programming
Yapay Zeka Çevirisi
tempo, eğitmenin biraz daha zor soruları yardımcı olma ve sürme yeteneği.
Andrei Mihai - Viasat
Eğitim - Learning Go Programming
Yapay Zeka Çevirisi
Radu'nun derin bilgisi ve benim için hızı ayarlama.
Adeel Ahmad - Coefficient Data Ltd
Eğitim - Learning Go Programming
Yapay Zeka Çevirisi
Eğitmenin esnekliği. Gerçekten kursu spesifik ihtiyaçlarımıza göre düzenledi.
Daniel Kurner - Daimler TSS
Eğitim - Learning Go Programming
Yapay Zeka Çevirisi