0Pricing
Go Academy · Ders

Kancalar ve Kapsamlar

Sorguları özelleştirin

Kancalar ve Kapsamlar, 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.

Kancalar ve Kapsamlar

GORM iki özelleştirme aracı sunar: kancalar yaşam döngüsü olaylarının öncesinde veya sonrasında otomatik olarak kod çalıştırır, kapsamlar ise yeniden kullanılabilir sorgu mantığını paketler. Birlikte, veri erişiminizi temiz ve tutarlı tutarlar.

Kancalar Nedir

Kancalar, GORM'un bir işlemden önce veya sonra çağırdığı model yöntemleridir: BeforeCreate, AfterCreate, BeforeUpdate, BeforeDelete ve daha fazlası.

BeforeCreate Kancası

Model üzerinde doğru imzaya sahip bir yöntem tanımlayın. Burada kayıt eklenmeden önce bir UUID ayarlıyoruz.

func (u *User) BeforeCreate(tx *gorm.DB) error {
    u.UUID = uuid.NewString()
    return nil
}

Kancalarda Doğrulama

İşlemi iptal etmek için bir kancadan hata döndürün. GORM, çevreleyen işlemi geri alır; böylece geçersiz veriler veritabanına ulaşmaz.

func (u *User) BeforeSave(tx *gorm.DB) error {
    if u.Age < 0 {
        return errors.New("age cannot be negative")
    }
    return nil
}

Kancalar Bir İşlem İçinde Çalışır

tx *gorm.DB bağımsız değişkeni, GORM'un kullandığı işlemdir. Bir kancanın içinde ilişkili veriler yazarsanız, ana işlemle atomik olarak Commit edilmesi veya Rollback yapılması için bu tx değerini kullanın.

Kapsamlar nedir

Kapsam, bir *gorm.DB alıp döndüren ve bir sorgu parçasını kapsülleyen bir işlevdir. Kapsamı db.Scopes(...) ile uygular ve birçok sorguda yeniden kullanırsınız.

func ActiveUsers(db *gorm.DB) *gorm.DB {
    return db.Where("active = ?", true)
}

Kapsamları uygulama

Scopes işlevine bir veya daha fazla kapsam aktarın. Kapsamlar birleştirilebilir; böylece filtreleri bildirime dayalı olarak birleştirip son sorguyu oluşturabilirsiniz.

db.Scopes(ActiveUsers, Recent).Find(&users)

Çalıştırılabilir Kanca ve Kapsam Benzetimi

GORM için bir veritabanı gerektiğinden, bu çalıştırılabilir örnek bir BeforeCreate kancasını ve yeniden kullanılabilir kapsam benzeri bir filtreyi yalın işlevlerle benzetir.

package main

import (
    "errors"
    "fmt"
)

type User struct {
    Name   string
    Age    int
    Active bool
}

func beforeCreate(u *User) error {
    if u.Age < 0 {
        return errors.New("age cannot be negative")
    }
    if u.Name == "" {
        u.Name = "anonymous"
    }
    return nil
}

func activeOnly(users []User) []User {
    var out []User
    for _, u := range users {
        if u.Active {
            out = append(out, u)
        }
    }
    return out
}

func main() {
    u := User{Age: 30, Active: true}
    if err := beforeCreate(&u); err != nil {
        fmt.Println("error:", err)
        return
    }
    fmt.Println("created:", u.Name)
    all := []User{u, {Name: "Lin", Active: false}}
    fmt.Println("active count:", len(activeOnly(all)))
}

Sayfalama için Kapsamlar

Yaygın bir kapsam, sayfa numarasından sayfalama oluşturur ve Offset ile Limit işlemlerini kapsülleyerek her liste uç noktasının aynı şekilde sayfalamasını sağlar.

func Paginate(page, size int) func(*gorm.DB) *gorm.DB {
    return func(db *gorm.DB) *gorm.DB {
        return db.Offset((page - 1) * size).Limit(size)
    }
}

Kancalar ve Uygulama Mantığı

Kancalar; zaman damgaları, kısa adlar ve denetim alanları gibi farklı bölümleri ilgilendiren konuları merkezileştirir. Davranışın öngörülebilir ve sınanabilir kalması için ağır iş mantığını kancalarda değil, hizmetlerde tutun.

Kancaları Atlamak

Toplu işlemler için db.Session(&gorm.Session{SkipHooks: true}) ile kancaları devre dışı bırakabilirsiniz. Bu, büyük içe aktarmaları hızlandırır ancak doğrulamalarınızı atlar; bu nedenle dikkatli kullanın.

Hızlı Kontrol

Kancalar ve kapsamlar konusundaki bilginizi sınayın.

Özet

Kancaları ve kapsamları öğrendiniz:

  • Kancalar yaşam döngüsü olaylarının çevresinde çalışır; bir hata döndürmek işlemi iptal eder ve geri alır
  • Kancalar, tx bağımsız değişkeni aracılığıyla işlem içinde çalışır
  • Kapsamlar, *gorm.DB türünde yeniden kullanılabilir işlevlerdir ve Scopes ile uygulanır
  • Filtreler ve sayfalama için kapsamları kullanın
  • SkipHooks, toplu çalışmalar için kancaları devre dışı bırakır

Sıkça Sorulan Sorular

“Kancalar ve Kapsamlar” dersi ücretsiz mi?

Evet — “Kancalar ve Kapsamlar” 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.

“Kancalar ve Kapsamlar” dersinde ne öğreneceğim?

Sorguları özelleştirin 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.

“Kancalar ve Kapsamlar” 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

  1. Modeller ve AutoMigrate
  2. CRUD İşlemleri
  3. İlişkilendirmeler
  4. Kancalar ve Kapsamlar
← Go Academy Sayfasına Dön