0Pricing
Go Academy · Ders

Performans İpuçları

Derlenmiş regexps nesnelerini yeniden kullanın

Performans İpuç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.

Derlemenin Bir Maliyeti Vardır

Bir kalıp dizesini kullanılabilir bir düzenli ifadeye dönüştürmek emek gerektirir. Bunu her çağrıda yapmak, özellikle döngülerde veya sık çalıştırılan kod yollarında zaman kaybettirir.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.MatchString("x9"))
}

Bir Kez Derleyin, Sık Sık Yeniden Kullanın

Temel kural şudur: Bir kalıbı bir kez derleyin ve *regexp.Regexp değerini yeniden kullanın. Paket düzeyindeki bir değişken bu değer için genellikle uygun yerdir.

package main

import (
    "fmt"
    "regexp"
)

var numRe = regexp.MustCompile("[0-9]+")

func hasNumber(s string) bool {
    return numRe.MatchString(s)
}

func main() {
    fmt.Println(hasNumber("a1"))
    fmt.Println(hasNumber("abc"))
}

Döngülerde Derlemeden Kaçının

MustCompile işlevini bir döngünün içinde asla çağırmayın. Döngüden önce derleyin ve her yinelemede aynı değeri kullanın.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    inputs := []string{"go", "123", "rust"}
    for _, s := range inputs {
        fmt.Println(s, re.MatchString(s))
    }
}

Regexp Paylaşmak Güvenlidir

Derlenmiş bir *regexp.Regexp, birden çok goroutine tarafından eşzamanlı olarak güvenle kullanılabilir. Tek bir global örnek hepsine hizmet edebilir.

package main

import (
    "fmt"
    "regexp"
)

var re = regexp.MustCompile("go")

func main() {
    fmt.Println(re.MatchString("golang"))
}

Bazen strings Daha Hızlıdır

Sabit bir düz metin alt dizesi için strings.Contains, düzenli ifadeden daha hızlıdır. Düzenli ifadeleri yalnızca gerçek kalıp yeteneklerine ihtiyaç duyduğunuzda kullanın.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Contains("hello world", "world"))
}

Başlangıçla Sınırlandırılmış Kalıpları Tercih Edin

^ ile sınırlandırma, başlangıç eşleşmediğinde tüm dizeyi taramak yerine motorun hızlıca başarısız olmasını sağlar.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^https?://")
    fmt.Println(re.MatchString("http://site"))
    fmt.Println(re.MatchString("see http://x"))
}

Eşleşme Sayısını Sınırlayın

Yalnızca birkaç eşleşmeye ihtiyacınız olduğunda, erken durmak için -1 yerine tüm eşleşmeleri bulma yöntemlerine küçük bir n değeri geçirin.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("1 2 3 4 5", 2))
}

Geri İzleme Kalıplarına Dikkat Edin

Go'nun RE2 motoru felaket düzeyindeki geri izlemeyi önler; ancak .* gibi aşırı geniş kalıplar yine de gerekenden fazlasını tarayabilir. Belirli olun.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    broad := regexp.MustCompile(".*=.*")
    precise := regexp.MustCompile("[a-z]+=[0-9]+")
    fmt.Println(broad.MatchString("x=1"), precise.MatchString("x=1"))
}

Dinamik Girdiyi Kaçışlayın

Bir kalıp kullanıcı metni içeriyorsa, özel karakterlerin düz metin olarak ele alınması için regexp.QuoteMeta ile kaçışlayın.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    user := "a.b"
    re := regexp.MustCompile(regexp.QuoteMeta(user))
    fmt.Println(re.MatchString("a.b"))
    fmt.Println(re.MatchString("axb"))
}

Derlenmiş Kalıpları Önbelleğe Alın

Kalıplar çalışma zamanında oluşturuluyorsa, aynı kalıbı yeniden derlemekten kaçınmak için derlenmiş kalıpları kalıp dizesinin anahtar olduğu bir eşlemede saklayın.

package main

import (
    "fmt"
    "regexp"
)

var cache = map[string]*regexp.Regexp{}

func get(p string) *regexp.Regexp {
    if re, ok := cache[p]; ok {
        return re
    }
    re := regexp.MustCompile(p)
    cache[p] = re
    return re
}

func main() {
    fmt.Println(get("[0-9]+").MatchString("7"))
}

Hepsini Bir Araya Getirme

İyi ayarlanmış bir doğrulayıcı bir kez derlenir, kalıbı başlangıçla sınırlandırılır ve tüm çağrılar arasında paylaşılır.

package main

import (
    "fmt"
    "regexp"
)

var emailRe = regexp.MustCompile("^[a-z0-9]+@[a-z]+\\.[a-z]+$")

func main() {
    fmt.Println(emailRe.MatchString("me@site.com"))
}

Kısa Kontrol

En önemli tek düzenli ifade performansı ipucu nedir?

Özet: Performans İpuçları

Düzenli ifadeleri verimli kullanmayı öğrendiniz:

  • MustCompile ile bir kez derleyip yeniden kullanın; eşzamanlı kullanıma güvenlidir.
  • Sabit alt dizeler için strings kullanmayı tercih edin; kalıpları başlangıçla sınırlandırın ve eşleşme sayılarını sınırlayın.
  • Dinamik girdiyi QuoteMeta ile kaçışlayın ve çalışma zamanındaki kalıpları önbelleğe alın.
package main

import (
    "fmt"
    "regexp"
)

var re = regexp.MustCompile("^\\d{4}$")

func main() {
    for _, s := range []string{"1234", "12"} {
        fmt.Println(s, re.MatchString(s))
    }
}

Sıkça Sorulan Sorular

“Performans İpuçları” dersi ücretsiz mi?

Evet — “Performans İpuç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.

“Performans İpuçları” dersinde ne öğreneceğim?

Derlenmiş regexps nesnelerini yeniden kullanın 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.

“Performans İpuç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

  1. regexp Temelleri
  2. Bulma ve Çıkarma
  3. Metni Değiştirme
  4. Performans İpuçları
← Go Academy Sayfasına Dön