Özel İşleyiciler
Kendi günlük çıktınızı oluşturun
Ö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) boolHandle(ctx, record) errorWithAttrs(attrs) HandlerWithGroup(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,WithGroupyöntemlerini uygulayın- Performans için düzey denetimlerini
Enablediçinde yapın r.Attrsile öznitelikler üzerinde yineleyin- Çoğu zaman mevcut bir işleyiciyi sarmalamak, sıfırdan oluşturmaktan daha kolaydır
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
- Yapılandırılmış Günlükler Neden Kullanılır
- slog İşleyicileri
- Günlük Düzeyleri ve Öznitelikler
- Özel İşleyiciler