Go Academy · Ders

Özel İşleyiciler

Kendi günlük çıktınızı oluşturun

4. ders / 413 adım

Özel İşleyiciler, 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.

Yerleşik İşleyiciler Yetmediğinde

Metin ve JSON işleyicileri çoğu ihtiyacı karşılar, ancak bazen özel bir çıktı isteyebilirsiniz: renkli uçbirimler, bir ölçüm sistemine gönderim veya gizli bilgilerin çıkarılması. Bunun için özel bir işleyici oluşturursunuz.

İşleyici Arayüzü

Bir işleyici dört yöntem uygular:

  • Enabled(ctx, level) bool
  • Handle(ctx, record) error
  • WithAttrs(attrs) Handler
  • WithGroup(name) Handler
type Handler interface {
    Enabled(context.Context, slog.Level) bool
    Handle(context.Context, slog.Record) error
    WithAttrs(attrs []slog.Attr) slog.Handler
    WithGroup(name string) slog.Handler
}

Enabled Süzmeyi Denetler

Enabled, bir kayıt oluşturulmadan önce çağrılır. false döndürmek, slog'un işi tamamen atlamasını sağlar; bu nedenle düzey denetimleri için bunu kullanın.

func (h *MyHandler) Enabled(_ context.Context, l slog.Level) bool {
    return l >= slog.LevelInfo
}

Handle İşi Yapar

Handle, zamanı, düzeyi, iletiyi ve öznitelikleri içeren bir slog.Record alır. Biçimlendirmeyi ve yazmayı istediğiniz şekilde yapabilirsiniz.

func (h *MyHandler) Handle(_ context.Context, r slog.Record) error {
    fmt.Printf("[%s] %s\n", r.Level, r.Message)
    return nil
}

Öznitelikler Üzerinde Yineleme

Bir Record, özniteliklerini r.Attrs aracılığıyla sunar; bu, her biri için sizin işlevinizi çağırır.

r.Attrs(func(a slog.Attr) bool {
    fmt.Printf("  %s=%v\n", a.Key, a.Value)
    return true // keep going
})

WithAttrs ve WithGroup

Bunlar, önceden belirlenmiş öznitelikleri veya bir grup ön ekini taşıyan işleyicinizin bir kopyasını döndürür. logger.With ve slog.Group desteği sağlarlar. En basit işleyici bunları saklayıp yeniden uygulayabilir veya öğrenme amacıyla kendisini döndürebilir.

Oluşturmak Yerine Sarmalama

Çoğu zaman eksiksiz bir işleyiciye ihtiyacınız olmaz; mevcut bir işleyiciyi sarıp yalnızca sabit bir öznitelik eklemek veya anahtarları gizlemek gibi davranışları değiştirmeniz yeterlidir.

type RedactHandler struct{ slog.Handler }

func (h RedactHandler) Handle(ctx context.Context, r slog.Record) error {
    // mutate r here, then delegate
    return h.Handler.Handle(ctx, r)
}

Kullanım Alanı: Gizli Bilgileri Çıkarma

Gizli bilgileri çıkaran bir işleyici, password veya token gibi hassas anahtarları bulmak için öznitelikleri tarayabilir ve JSON işleyicisine devretmeden önce değeri değiştirebilir.

Kullanım Alanı: Yönlendirme

Özel bir işleyici düzeye göre yönlendirme yapabilir: Error günlüklerini standart hata çıktısına ve bir uyarı web kancasına gönderirken Info günlüklerini standart çıktıya gönderir. Böylece yönlendirme mantığı her çağrı noktasından çıkarılmış olur.

Performans Notları

Handle yoğun kullanılan yollarda çalışabilir. Bellek ayırmaktan kaçının, düzey denetimlerini Enabled içinde yapın ve tamponları yeniden kullanın. Standart işleyiciler bu nedenle içeride havuzlanmış bir tampon kullanır.

Çalıştırılabilir: En Basit Özel İşleyici

Bu kendi içinde eksiksiz program, düzeyi, iletiyi ve öznitelikleri yazdıran küçük bir işleyici tanımlar ve ardından bunun üzerinden günlük yazar.

package main

import (
    "context"
    "fmt"
    "log/slog"
)

type Mini struct{}

func (Mini) Enabled(context.Context, slog.Level) bool { return true }
func (Mini) WithAttrs(a []slog.Attr) slog.Handler   { return Mini{} }
func (Mini) WithGroup(string) slog.Handler          { return Mini{} }
func (Mini) Handle(_ context.Context, r slog.Record) error {
    fmt.Printf("%s: %s", r.Level, r.Message)
    r.Attrs(func(a slog.Attr) bool {
        fmt.Printf(" %s=%v", a.Key, a.Value)
        return true
    })
    fmt.Println()
    return nil
}

func main() {
    l := slog.New(Mini{})
    l.Info("hello", "user", "ada", "id", 7)
}

Hızlı Kontrol

Özel işleyiciler konusundaki anlayışınızı sınayın.

Özet

Özel işleyiciler oluşturmayı öğrendiniz:

  • Enabled, Handle, WithAttrs, WithGroup yöntemlerini uygulayın
  • Performans için düzey denetimlerini Enabled içinde yapın
  • r.Attrs ile öznitelikler üzerinde yineleyin
  • Çoğu zaman mevcut bir işleyiciyi sarmalamak, sıfırdan oluşturmaktan daha kolaydır
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Özel İşleyiciler” dersi ücretsiz mi?

Evet — “Özel İşleyiciler” 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.

“Özel İşleyiciler” dersinde ne öğreneceğim?

Kendi günlük çıktınızı oluşturun 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.

“Özel İşleyiciler” 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. Yapılandırılmış Günlükler Neden Kullanılır
  2. slog İşleyicileri
  3. Günlük Düzeyleri ve Öznitelikler
  4. Özel İşleyiciler
← Go Academy Sayfasına Dön