defer, Anonim İşlevler ve Kapanışlar
Ertelenmiş çağrılar ve işlev değerleri
defer, Anonim İşlevler ve Kapanışlar, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
defer: Ertelenmiş Çalıştırma
defer, bir işlev çağrısını çevreleyen işlev döndüğünde çalışacak şekilde planlar; işlevin nasıl döndüğünden (normal, hata veya panic) bağımsızdır:
func readFile(path string) {
f, err := os.Open(path)
if err != nil { return }
defer f.Close() // runs when readFile returns
// read from f...
}defer Değerlendirme Sırası
Ertelenen çağrılar bir yığına eklenir ve LIFO sırasıyla (son giren, ilk çıkar) çalıştırılır:
func main() {
defer fmt.Println("third")
defer fmt.Println("second")
defer fmt.Println("first")
// Output: first, second, third
}Temizleme İçin defer
Kaynakların serbest bırakılmasını güvenceye almanın Go'ya özgü yolu defer kullanmaktır:
- Bir kilidi aldıktan sonra Unlock çağrısı yapınız
- Bir dosyayı açtıktan sonra Close çağrısı yapınız
- Bir veritabanı işlemini onaylayınız veya geri alınız
- WaitGroup.Add() sonrasında WaitGroup.Done() çağrısı yapınız
Bağımsız Değişkenlerle defer
Ertelenen çağrının bağımsız değişkenleri, çalıştırıldığı sırada değil, defer çağrıldığında hemen değerlendirilir:
x := 10
defer fmt.Println(x) // prints 10, not 20
x = 20
fmt.Println(x) // prints 20Anonim İşlevler
Anonim işlevler (işlev değişmezleri), ad verilmeden satır içinde tanımlanır:
double := func(n int) int {
return n * 2
}
fmt.Println(double(5)) // 10
// Immediately invoked:
result := func(a, b int) int { return a + b }(3, 4)Kapanımlar
Kapanım, çevresindeki kapsamdan değişkenleri yakalayan bir işlevdir:
func makeCounter() func() int {
count := 0
return func() int {
count++
return count
}
}
ctr := makeCounter()
fmt.Println(ctr(), ctr(), ctr()) // 1 2 3Döngülerde Kapanım Yakalamaya İlişkin Tuzak
Kapanımlar değişkenleri başvuru yoluyla yakalar; bu, eşzamanlı çalışan işlevlerde yaygın bir döngü hatasıdır:
for i := 0; i < 3; i++ {
i := i // create a new variable per iteration
go func() { fmt.Println(i) }()
}Adlandırılmış Dönüşlerle defer
Ertelenen işlevler, adlandırılmış dönüş değerlerini değiştirebilir; bu, hatalara açıklama eklemek için kullanışlıdır:
func doWork() (err error) {
defer func() {
if err != nil {
err = fmt.Errorf("doWork: %w", err)
}
}()
return riskyOp()
}Kapanımlarla İşlevsel Desenler
Kapanımlar, anımsama gibi işlevsel desenleri mümkün kılar:
func memoize(f func(int) int) func(int) int {
cache := map[int]int{}
return func(n int) int {
if v, ok := cache[n]; ok {
return v
}
v := f(n)
cache[n] = v
return v
}
}Ara Katman Yazılımı Olarak Kapanımlar
Kapanımlar, Go HTTP sunucularındaki ara katman yazılımının yapı taşıdır; bir işleyiciyi sarar ve çevresine davranış ekler:
func withLogging(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s", r.Method, r.URL)
next(w, r)
}
}Hızlı Kontrol
Ertelenen bir işlev çağrısının bağımsız değişkenleri ne zaman değerlendirilir?
Özet: defer, Kapanımlar ve Anonim İşlevler
Bu özellikler Go kodunu anlatımlı ve güvenli kılar:
defer, işlevden çıkıldığında temizlemeyi güvenceye alır; sıra LIFO'dur- defer bağımsız değişkenleri hemen değerlendirilir
- Anonim işlevler değişkenlere atanabilir veya satır içinde çağrılabilir
- Kapanımlar çevredeki değişkenleri başvuru yoluyla yakalar
- Eşzamanlı çalışan işlevlerdeki döngü değişkeni yakalama hatalarına dikkat ediniz
Sıradaki kurs: Diziler, Dilimler ve Eşlemeler.
Sıkça Sorulan Sorular
“defer, Anonim İşlevler ve Kapanışlar” dersi ücretsiz mi?
Evet — “defer, Anonim İşlevler ve Kapanışlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“defer, Anonim İşlevler ve Kapanışlar” dersinde ne öğreneceğim?
Ertelenmiş çağrılar ve işlev değerleri Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“defer, Anonim İşlevler ve Kapanışlar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İşlev Temelleri ve İmzalar
- Birden Çok Dönüş Değeri
- Değişken Sayıda Bağımsız Değer Alan İşlevler
- defer, Anonim İşlevler ve Kapanışlar