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:
MustCompileile bir kez derleyip yeniden kullanın; eşzamanlı kullanıma güvenlidir.- Sabit alt dizeler için
stringskullanmayı 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
QuoteMetaile 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
- regexp Temelleri
- Bulma ve Çıkarma
- Metni Değiştirme
- Performans İpuçları