0Pricing
Go Academy · Pelajaran

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 MustCompile dan gunakan kembali; ini aman untuk penggunaan bersamaan.
  • Utamakan strings untuk substring tetap; beri jangkar pada pola; batasi jumlah kecocokan.
  • Lepaskan karakter khusus dari masukan dinamis dengan QuoteMeta dan 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.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar regexp
  2. Menemukan dan Mengekstrak
  3. Mengganti Teks
  4. Tips Performa
← Kembali ke Go Academy