Tips Performa
Gunakan kembali regexp yang telah dikompilasi
Tips Performa adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Kompilasi Memerlukan Biaya
Mengubah string pola menjadi ekspresi reguler yang dapat digunakan memerlukan proses. Jika dilakukan pada setiap pemanggilan, waktu akan terbuang, terutama di dalam loop atau jalur yang sering dijalankan.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.MatchString("x9"))
}Kompilasi Sekali, Gunakan Berulang Kali
Aturan utamanya: kompilasikan pola sekali dan gunakan kembali *regexp.Regexp. Variabel tingkat paket biasanya menjadi tempatnya.
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"))
}Hindari Kompilasi di Dalam Loop
Jangan pernah memanggil MustCompile di dalam loop. Kompilasikan sebelum loop, lalu gunakan nilai yang sama pada setiap iterasi.
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 Aman untuk Dibagikan
*regexp.Regexp yang telah dikompilasi aman digunakan secara bersamaan oleh beberapa goroutine. Satu instans global dapat melayani semuanya.
package main
import (
"fmt"
"regexp"
)
var re = regexp.MustCompile("go")
func main() {
fmt.Println(re.MatchString("golang"))
}Terkadang strings Lebih Cepat
Untuk substring literal yang tetap, strings.Contains lebih cepat daripada ekspresi reguler. Gunakan ekspresi reguler hanya ketika Anda benar-benar memerlukan kemampuan pola.
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Contains("hello world", "world"))
}Utamakan Pola Berjangkar
Penggunaan jangkar dengan ^ memungkinkan mesin segera gagal ketika bagian awal tidak cocok, alih-alih memindai seluruh string.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^https?://")
fmt.Println(re.MatchString("http://site"))
fmt.Println(re.MatchString("see http://x"))
}Batasi Jumlah Kecocokan
Jika Anda hanya memerlukan beberapa kecocokan, berikan n kecil pada metode Find-all, bukan -1, agar proses berhenti lebih awal.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.FindAllString("1 2 3 4 5", 2))
}Waspadai Pola dengan Penelusuran Mundur
Mesin RE2 milik Go menghindari penelusuran mundur yang berlebihan, tetapi pola yang terlalu luas seperti .* tetap dapat memindai lebih banyak dari yang diperlukan. Buatlah pola yang spesifik.
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"))
}Lepaskan Karakter Khusus dari Masukan Dinamis
Jika pola menyertakan teks pengguna, lepaskan karakter khususnya dengan regexp.QuoteMeta agar karakter khusus diperlakukan secara literal.
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"))
}Simpan Pola yang Telah Dikompilasi dalam Cache
Jika pola dibuat saat program berjalan, simpan pola yang telah dikompilasi dalam map dengan kunci berupa string pola agar pola yang sama tidak perlu dikompilasi ulang.
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"))
}Menggabungkan Semuanya
Validator yang dioptimalkan dengan baik mengompilasi sekali, memberi jangkar pada pola, dan digunakan bersama oleh semua pemanggilan.
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"))
}Pemeriksaan Cepat
Apa satu kiat performa ekspresi reguler yang paling penting?
Ringkasan: Kiat Performa
Anda telah mempelajari cara menggunakan ekspresi reguler secara efisien:
- Kompilasi sekali dengan
MustCompiledan gunakan kembali; ini aman untuk penggunaan bersamaan. - Utamakan
stringsuntuk substring tetap; beri jangkar pada pola; batasi jumlah kecocokan. - Lepaskan karakter khusus dari masukan dinamis dengan
QuoteMetadan simpan pola saat berjalan dalam cache.
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))
}
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tips Performa” gratis?
Ya — teks lengkap “Tips Performa” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tips Performa”?
Gunakan kembali regexp yang telah dikompilasi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Tips Performa” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.