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.
- Temelden ileriye sistematik bir yol sunar.
- Her dersi calistirilabilir kodla anlatir.
- Her derste birden fazla dosya ile moduler dusunmeyi ogretir.
- Her derste exercises.go altinda TODO tabanli aktif pratik verir.
- Son bolumde ciddi bir mini backend uygulamasi gelistirir.
- Daha once hic Go yazmamis olanlar.
- Temel yazilim bilgisi olup Go'ya gecmek isteyenler.
- Backend/API odakli ogrenmek isteyenler.
- Go kurulumu (go version komutu calismali).
- Terminal kullanimi (PowerShell yeterli).
- Basit seviyede kod editoru kullanimi.
- Proje kokune gel.
- Ilk dersi calistir:
go run ./00-core-concepts- Tum dersleri sirayla toplu calistir:
powershell -ExecutionPolicy Bypass -File .\run-all.ps1- Ciddi uygulamayi (To-Do API) tek basina calistir:
go run ./14-serious-appHer ders klasorunde genellikle su yapi vardir:
- main.go: Derse giris ve calisabilir senaryo.
- helper dosyasi (or: *_helpers.go, models.go): Konunun parcali ve temiz kullanimi.
- exercises.go: TODO odakli aktif odev/pratik alani.
Bu yaklasim, tek dosyada karmasiklasmak yerine gercek projelerdeki moduler yapiyi erken asamada ogretir.
-
00-core-concepts Konu: package main, import, Print/Println/Printf, temel kavramlar. Kazanım: Go dosya giris yapisini ve temel cikti fonksiyonlarini kavrarsin.
-
01-hello Konu: En basit calisir program, cikti ve temel akis. Kazanım: Programin calisma mantigina alisirsin.
-
02-variables Konu: var, :=, const, temel veri tipleri, input. Kazanım: Veri tutma ve kullanicidan veri alma akisini ogrenirsin.
-
03-conditionals Konu: if/else if/else ve switch. Kazanım: Karar mekanizmasi kurmayi ogrenirsin.
-
04-loops Konu: for dongusu, range, while benzeri kullanim. Kazanım: Tekrar eden islemleri kontrol etmeyi ogrenirsin.
-
05-functions Konu: Fonksiyon, parametre, return, coklu return. Kazanım: Kod tekrarini azaltan moduler yapi kurarsin.
-
06-slices-maps Konu: Slice, append, map, key kontrolu. Kazanım: En sik kullanilan veri yapilarini ogrenirsin.
-
07-structs Konu: Struct modelleme ve method. Kazanım: Gercek dunya verisini tiplerle modellemeyi ogrenirsin.
-
08-pointers Konu: Adres mantigi, pointer ile deger guncelleme. Kazanım: Fonksiyonlarda bellek referansi ile calismayi anlarsin.
-
09-errors Konu: error donus modeli, hata kontrolu. Kazanım: Go'nun hata yonetim felsefesini uygulamali gorursun.
-
10-files Konu: Dosyaya yazma ve dosyadan okuma. Kazanım: Kalici veriyle ilk temasini kurarsin.
-
11-json Konu: Struct <-> JSON donusumu. Kazanım: API ve veri degisimi icin kritik JSON altyapisini ogrenirsin.
-
12-goroutines Konu: Goroutine, channel, waitgroup. Kazanım: Eszamanli calisma temellerini kazanirsin.
-
13-http-api Konu: Handler, route, HTTP response, httptest. Kazanım: Port acmadan handler test etme disiplinini gorursun.
-
14-serious-app Konu: Gercek mini proje (To-Do REST API), katmanlar, CRUD, test. Kazanım: Uretime yakin bir backend akisini basariyla tamamlarsin.
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-appHer ders icin su donguyu uygula:
- main.go dosyasini bir kez oku.
- Dersi calistir ve ciktiyi gozlemle.
- helper dosyasini incele, mantigi cikar.
- exercises.go icindeki TODO alanlarini doldur.
- Degisiklikten sonra tekrar calistir.
- "Neden boyle?" sorusuna bir cumle cevap yaz.
Bu rutin, ezber yerine aktif problem cozme becerisi kazandirir.
TODO alanlarinin amaci:
- Sadece okumayi degil, kodu degistirmeyi zorunlu kilmak.
- Her konuda en az bir kez "ben yaptim" hissi vermek.
- Hata mesajlarini okuyup duzeltme kasini gelistirmek.
Pratikte dikkat edilecekler:
- TODO satirini degistir.
- Programi calistir.
- Beklenen ve gercek ciktiyi karsilastir.
- Gerekirse duzeltip tekrar calistir.
Ders 14 icin ayrica su dosyayi incele:
- 14-serious-app/README.md
Orada su basliklar vardir:
- Endpoint listesi
- PowerShell ile canli API cagri ornekleri
- CRUD akisinin adim adim kullanimi
Bu bolum, Ders 14'teki To-Do API'yi gercek urun seviyesine tasimak icin ozellik yol haritasini verir.
Amac: Dashboard benzeri bir ekranda kucuk kartlar (widget) ile ozet bilgi gostermek.
Ornek Widget Turleri:
- todo-summary: Toplam gorev, tamamlanan gorev, bekleyen gorev.
- weekly-progress: Haftalik tamamlanma orani.
- overdue-items: Geciken gorev sayisi.
Ornek Endpoint Fikirleri:
- GET /widgets
- POST /widgets
- PATCH /widgets/{id}
- DELETE /widgets/{id}
Widget Model Fikri:
- id
- name
- type
- position
- config (JSON)
Amac: Gorevlere veya projelere maliyet/butce takibi eklemek.
Ornek Budget Senaryolari:
- Aylik toplam butce belirleme.
- Gorev bazli harcama girme.
- Butce limiti asimi uyarisi.
Ornek Endpoint Fikirleri:
- GET /budgets
- POST /budgets
- PATCH /budgets/{id}
- GET /budgets/{id}/summary
Budget Model Fikri:
- id
- name
- amountLimit
- spent
- currency
- periodStart
- periodEnd
- icon
Budget Iconlari (onerilen):
- wallet
- receipt
- cart
- home
- car
- heart
- gamepad
- briefcase
- graduation-cap
- 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):
- POST /budgets body icinde "icon" alani zorunlu veya opsiyonel olabilir.
- PATCH /budgets/{id} ile sadece icon degistirilebilir.
- GET /budgets cevabinda her kaydin icon anahtari doner.
- Authentication (JWT): Kullanici girisi ve token tabanli koruma.
- Authorization (Role-Based): Admin/user yetki ayrimi.
- Persistent DB: SQLite veya Postgres ile kalici veri.
- Pagination + Filtering: Buyuk veri setlerinde hizli listeleme.
- Validation Layer: Girdi kurallarini merkezi yonetim.
- Logging + Request ID: Hata ayiklama ve izlenebilirlik.
- Metrics + Health Checks: Uptime ve performans takibi.
- Docker + Compose: Tek komutla lokal calisma ortami.
- CI Pipeline: Test, lint ve build otomasyonu.
- OpenAPI/Swagger: API dokumantasyonunu otomatik uretme.
Onerilen klasorleme:
- cmd/app
- internal/handler
- internal/service
- internal/repository
- internal/model
- internal/middleware
Bu yapi, buyuyen kod tabaninda bakimi kolaylastirir ve sorumluluklari net ayirir.
- Unit test: Service/repository fonksiyonlari.
- Handler test: httptest ile endpoint dogrulama.
- Integration test: Veritabani ile uc-uca test.
- Contract test: API response semasi kontrolu.
Hedef: Ozellik ekledikce test kapsaminin azalmasi degil, artmasi.
Sadece ciddi uygulama testleri:
go test ./14-serious-appTum workspace testleri:
go test ./...- package adinin farkli yazilmasi (ayni klasorde tum .go dosyalari ayni package olmali).
- Import edilen paketin kullanilmamasi (Go derleyicisi kullanilmayan importu kabul etmez).
- JSON field adlarinin struct tag ile eslesmemesi.
- Pointer kullanirken deger yerine adres gondermeyi unutmak.
- Channel kapanis mantigini yanlis kurmak (deadlock riski).
Temel terimler:
- variable (degisken): Degeri degisebilen veri alani.
- const (sabit): Sonradan degistirilemeyen deger.
- package main: Calistirilabilir uygulama paketi.
- import: Baska paketleri dosyaya dahil etme.
- func: Tekrar kullanilabilir kod blogu.
- return: Fonksiyondan deger dondurme.
Kontrol akisi:
- if / else: Kosullu calisma bloklari.
- switch: Birden fazla durumu temiz kontrol etme yapisi.
- for: Go'daki tek dongu yapisi.
- range: Slice/map/string gibi yapilar ustunde dolasma yardimcisi.
Veri yapilari ve modelleme:
- slice: Dinamik boyutlu liste.
- map: Anahtar-deger veri yapisi.
- struct: Ilgili alanlari tek tipte toplama yapisi.
- method: Bir tipe bagli fonksiyon.
- pointer: Bir degiskenin bellek adresi.
Guvenilir kod yazimi:
- error: Hata bilgisini deger olarak tasima yaklasimi.
- validation: Gelen verinin kurallara uygunlugunu kontrol etme.
- test: Kodun beklenen davranisini otomatik dogrulama.
Eszamanlilik:
- goroutine: Hafif eszamanli calisma birimi.
- channel: Goroutine'ler arasi veri iletim kanali.
- waitgroup: Birden fazla goroutine'in bitisini bekleme araci.
Web/API:
- HTTP handler: Gelen HTTP istegini isleyen fonksiyon.
- JSON: Veri alisverisi icin metin formati.
- REST API: HTTP uzerinden kaynak tabanli servis yaklasimi.
- CRUD: Create, Read, Update, Delete temel veri islemleri.
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.