Skip to content

CodeByPinar/go-learning-lab-tr

Repository files navigation

Go Learning Lab

Bu repo, sifirdan baslayip uygulamali sekilde Go ogrenmek icin hazirlandi. Hedef, sadece syntax ogrenmek degil; ayni zamanda gercek proje duzeni, test bakisi ve API gelistirme aliskanligi kazanmaktir.

Bu Repo Neyi Amacliyor?

  1. Temelden ileriye sistematik bir yol sunar.
  2. Her dersi calistirilabilir kodla anlatir.
  3. Her derste birden fazla dosya ile moduler dusunmeyi ogretir.
  4. Her derste exercises.go altinda TODO tabanli aktif pratik verir.
  5. Son bolumde ciddi bir mini backend uygulamasi gelistirir.

Kimler Icin?

  1. Daha once hic Go yazmamis olanlar.
  2. Temel yazilim bilgisi olup Go'ya gecmek isteyenler.
  3. Backend/API odakli ogrenmek isteyenler.

On Kosullar

  1. Go kurulumu (go version komutu calismali).
  2. Terminal kullanimi (PowerShell yeterli).
  3. Basit seviyede kod editoru kullanimi.

Hizli Baslangic

  1. Proje kokune gel.
  2. Ilk dersi calistir:
go run ./00-core-concepts
  1. Tum dersleri sirayla toplu calistir:
powershell -ExecutionPolicy Bypass -File .\run-all.ps1
  1. Ciddi uygulamayi (To-Do API) tek basina calistir:
go run ./14-serious-app

Klasor Mantigi

Her ders klasorunde genellikle su yapi vardir:

  1. main.go: Derse giris ve calisabilir senaryo.
  2. helper dosyasi (or: *_helpers.go, models.go): Konunun parcali ve temiz kullanimi.
  3. exercises.go: TODO odakli aktif odev/pratik alani.

Bu yaklasim, tek dosyada karmasiklasmak yerine gercek projelerdeki moduler yapiyi erken asamada ogretir.

Derslerin Tam Yol Haritasi

  1. 00-core-concepts Konu: package main, import, Print/Println/Printf, temel kavramlar. Kazanım: Go dosya giris yapisini ve temel cikti fonksiyonlarini kavrarsin.

  2. 01-hello Konu: En basit calisir program, cikti ve temel akis. Kazanım: Programin calisma mantigina alisirsin.

  3. 02-variables Konu: var, :=, const, temel veri tipleri, input. Kazanım: Veri tutma ve kullanicidan veri alma akisini ogrenirsin.

  4. 03-conditionals Konu: if/else if/else ve switch. Kazanım: Karar mekanizmasi kurmayi ogrenirsin.

  5. 04-loops Konu: for dongusu, range, while benzeri kullanim. Kazanım: Tekrar eden islemleri kontrol etmeyi ogrenirsin.

  6. 05-functions Konu: Fonksiyon, parametre, return, coklu return. Kazanım: Kod tekrarini azaltan moduler yapi kurarsin.

  7. 06-slices-maps Konu: Slice, append, map, key kontrolu. Kazanım: En sik kullanilan veri yapilarini ogrenirsin.

  8. 07-structs Konu: Struct modelleme ve method. Kazanım: Gercek dunya verisini tiplerle modellemeyi ogrenirsin.

  9. 08-pointers Konu: Adres mantigi, pointer ile deger guncelleme. Kazanım: Fonksiyonlarda bellek referansi ile calismayi anlarsin.

  10. 09-errors Konu: error donus modeli, hata kontrolu. Kazanım: Go'nun hata yonetim felsefesini uygulamali gorursun.

  11. 10-files Konu: Dosyaya yazma ve dosyadan okuma. Kazanım: Kalici veriyle ilk temasini kurarsin.

  12. 11-json Konu: Struct <-> JSON donusumu. Kazanım: API ve veri degisimi icin kritik JSON altyapisini ogrenirsin.

  13. 12-goroutines Konu: Goroutine, channel, waitgroup. Kazanım: Eszamanli calisma temellerini kazanirsin.

  14. 13-http-api Konu: Handler, route, HTTP response, httptest. Kazanım: Port acmadan handler test etme disiplinini gorursun.

  15. 14-serious-app Konu: Gercek mini proje (To-Do REST API), katmanlar, CRUD, test. Kazanım: Uretime yakin bir backend akisini basariyla tamamlarsin.

Ders Calistirma Komutlari

go run ./00-core-concepts
go run ./01-hello
go run ./02-variables
go run ./03-conditionals
go run ./04-loops
go run ./05-functions
go run ./06-slices-maps
go run ./07-structs
go run ./08-pointers
go run ./09-errors
go run ./10-files
go run ./11-json
go run ./12-goroutines
go run ./13-http-api
go run ./14-serious-app

Ogrenme Rutini (Onerilen)

Her ders icin su donguyu uygula:

  1. main.go dosyasini bir kez oku.
  2. Dersi calistir ve ciktiyi gozlemle.
  3. helper dosyasini incele, mantigi cikar.
  4. exercises.go icindeki TODO alanlarini doldur.
  5. Degisiklikten sonra tekrar calistir.
  6. "Neden boyle?" sorusuna bir cumle cevap yaz.

Bu rutin, ezber yerine aktif problem cozme becerisi kazandirir.

Mini Gorevler ve TODO Yaklasimi

TODO alanlarinin amaci:

  1. Sadece okumayi degil, kodu degistirmeyi zorunlu kilmak.
  2. Her konuda en az bir kez "ben yaptim" hissi vermek.
  3. Hata mesajlarini okuyup duzeltme kasini gelistirmek.

Pratikte dikkat edilecekler:

  1. TODO satirini degistir.
  2. Programi calistir.
  3. Beklenen ve gercek ciktiyi karsilastir.
  4. Gerekirse duzeltip tekrar calistir.

Ciddi App (Ders 14) Notlari

Ders 14 icin ayrica su dosyayi incele:

  1. 14-serious-app/README.md

Orada su basliklar vardir:

  1. Endpoint listesi
  2. PowerShell ile canli API cagri ornekleri
  3. CRUD akisinin adim adim kullanimi

Ciddi App Sonraki Fazlar (Widget + Budget + Daha Fazlasi)

Bu bolum, Ders 14'teki To-Do API'yi gercek urun seviyesine tasimak icin ozellik yol haritasini verir.

Faz 1: Widget Modulu

Amac: Dashboard benzeri bir ekranda kucuk kartlar (widget) ile ozet bilgi gostermek.

Ornek Widget Turleri:

  1. todo-summary: Toplam gorev, tamamlanan gorev, bekleyen gorev.
  2. weekly-progress: Haftalik tamamlanma orani.
  3. overdue-items: Geciken gorev sayisi.

Ornek Endpoint Fikirleri:

  1. GET /widgets
  2. POST /widgets
  3. PATCH /widgets/{id}
  4. DELETE /widgets/{id}

Widget Model Fikri:

  1. id
  2. name
  3. type
  4. position
  5. config (JSON)

Faz 2: Budget Modulu

Amac: Gorevlere veya projelere maliyet/butce takibi eklemek.

Ornek Budget Senaryolari:

  1. Aylik toplam butce belirleme.
  2. Gorev bazli harcama girme.
  3. Butce limiti asimi uyarisi.

Ornek Endpoint Fikirleri:

  1. GET /budgets
  2. POST /budgets
  3. PATCH /budgets/{id}
  4. GET /budgets/{id}/summary

Budget Model Fikri:

  1. id
  2. name
  3. amountLimit
  4. spent
  5. currency
  6. periodStart
  7. periodEnd
  8. icon

Budget Iconlari (onerilen):

  1. wallet
  2. receipt
  3. cart
  4. home
  5. car
  6. heart
  7. gamepad
  8. briefcase
  9. graduation-cap
  10. plane

Not: icon alaninda metin tabanli ikon anahtari tutulur (or: "wallet"). UI katmani bu anahtari kullanarak ilgili SVG/ikon komponentini render eder.

Ornek Budget JSON:

{
	"name": "Aylik Market",
	"amountLimit": 8000,
	"spent": 2450,
	"currency": "TRY",
	"periodStart": "2026-03-01",
	"periodEnd": "2026-03-31",
	"icon": "cart"
}

Ornek endpoint kullanim fikri (icon dahil):

  1. POST /budgets body icinde "icon" alani zorunlu veya opsiyonel olabilir.
  2. PATCH /budgets/{id} ile sadece icon degistirilebilir.
  3. GET /budgets cevabinda her kaydin icon anahtari doner.

Faz 3: Uygulamayi Guclendiren Ek Ozellikler

  1. Authentication (JWT): Kullanici girisi ve token tabanli koruma.
  2. Authorization (Role-Based): Admin/user yetki ayrimi.
  3. Persistent DB: SQLite veya Postgres ile kalici veri.
  4. Pagination + Filtering: Buyuk veri setlerinde hizli listeleme.
  5. Validation Layer: Girdi kurallarini merkezi yonetim.
  6. Logging + Request ID: Hata ayiklama ve izlenebilirlik.
  7. Metrics + Health Checks: Uptime ve performans takibi.
  8. Docker + Compose: Tek komutla lokal calisma ortami.
  9. CI Pipeline: Test, lint ve build otomasyonu.
  10. OpenAPI/Swagger: API dokumantasyonunu otomatik uretme.

Faz 4: Proje Yapisi Iyilestirme

Onerilen klasorleme:

  1. cmd/app
  2. internal/handler
  3. internal/service
  4. internal/repository
  5. internal/model
  6. internal/middleware

Bu yapi, buyuyen kod tabaninda bakimi kolaylastirir ve sorumluluklari net ayirir.

Faz 5: Test Stratejisi

  1. Unit test: Service/repository fonksiyonlari.
  2. Handler test: httptest ile endpoint dogrulama.
  3. Integration test: Veritabani ile uc-uca test.
  4. Contract test: API response semasi kontrolu.

Hedef: Ozellik ekledikce test kapsaminin azalmasi degil, artmasi.

Test Komutlari

Sadece ciddi uygulama testleri:

go test ./14-serious-app

Tum workspace testleri:

go test ./...

Siklikla Yapilan Hatalar

  1. package adinin farkli yazilmasi (ayni klasorde tum .go dosyalari ayni package olmali).
  2. Import edilen paketin kullanilmamasi (Go derleyicisi kullanilmayan importu kabul etmez).
  3. JSON field adlarinin struct tag ile eslesmemesi.
  4. Pointer kullanirken deger yerine adres gondermeyi unutmak.
  5. Channel kapanis mantigini yanlis kurmak (deadlock riski).

Go Sozluk (Kapsamli)

Temel terimler:

  1. variable (degisken): Degeri degisebilen veri alani.
  2. const (sabit): Sonradan degistirilemeyen deger.
  3. package main: Calistirilabilir uygulama paketi.
  4. import: Baska paketleri dosyaya dahil etme.
  5. func: Tekrar kullanilabilir kod blogu.
  6. return: Fonksiyondan deger dondurme.

Kontrol akisi:

  1. if / else: Kosullu calisma bloklari.
  2. switch: Birden fazla durumu temiz kontrol etme yapisi.
  3. for: Go'daki tek dongu yapisi.
  4. range: Slice/map/string gibi yapilar ustunde dolasma yardimcisi.

Veri yapilari ve modelleme:

  1. slice: Dinamik boyutlu liste.
  2. map: Anahtar-deger veri yapisi.
  3. struct: Ilgili alanlari tek tipte toplama yapisi.
  4. method: Bir tipe bagli fonksiyon.
  5. pointer: Bir degiskenin bellek adresi.

Guvenilir kod yazimi:

  1. error: Hata bilgisini deger olarak tasima yaklasimi.
  2. validation: Gelen verinin kurallara uygunlugunu kontrol etme.
  3. test: Kodun beklenen davranisini otomatik dogrulama.

Eszamanlilik:

  1. goroutine: Hafif eszamanli calisma birimi.
  2. channel: Goroutine'ler arasi veri iletim kanali.
  3. waitgroup: Birden fazla goroutine'in bitisini bekleme araci.

Web/API:

  1. HTTP handler: Gelen HTTP istegini isleyen fonksiyon.
  2. JSON: Veri alisverisi icin metin formati.
  3. REST API: HTTP uzerinden kaynak tabanli servis yaklasimi.
  4. CRUD: Create, Read, Update, Delete temel veri islemleri.

Son Not

Bu labin en guclu tarafi, her konuyu hemen koda dokerek ilerletmesidir. En hizli gelisim icin her derste exercises.go dosyasini mutlaka kendin degistirip tekrar calistir.

About

Sıfırdan başlayıp uygulamalı örneklerle Go öğrenmek için hazırlanmış kapsamlı bir laboratuvar: temel kavramlar, veri yapıları, fonksiyonlar, eşzamanlılık, HTTP API geliştirme ve gerçek bir To-Do REST API projesi içerir.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors