Web geliştirmedeSlug, URL’deki kullanıcı dostu bir tanımlayıcıdır ve genellikle bir makalenin, kategorinin veya sayfanın yolunu belirtmek için kullanılır, örneğin:
https://example.com/blog/go-slug-generator
Go dili web projesinde, Slug üretecinin aşağıdaki gereksinimleri karşılaması gerekir:
- Çince ve İngilizce desteği : Çince pinyin’e dönüştürülür ve İngilizce değişmeden kalır.
- Özel karakterleri kaldırın : yalnızca harfleri, rakamları ve
-
(tireleri) tutun. - Benzersizliği sağlayın : Aynı slug veritabanında zaten mevcutsa, artımlı bir son ek (örneğin
example
,example-1
) otomatik olarak eklenir.
Bu makale sizi bu fonksiyona adım adım ulaştıracak! 🔥
1. Slug Generator’ın Uygulanması
(1) Kod örneği
package utils
import (
"dagicms-server/global"
"fmt"
"github.com/mozillazg/go-pinyin"
"regexp"
"strings"
)
func GenerateSlug(title string, tableName string, id uint) string {
baseSlug := ConvertToSlug(title)
reg := regexp.MustCompile(`[^a-zA-Z0-9\s-]`)
baseSlug = reg.ReplaceAllString(baseSlug, "")
baseSlug = strings.ReplaceAll(baseSlug, " ", "-")
baseSlug = cleanHyphens(baseSlug)
if baseSlug == "" {
baseSlug = "untitled"
}
finalSlug := baseSlug
counter := 1
for {
var exists bool
query := fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM %s WHERE slug = ? AND id != ?)", tableName)
global.GVA_DB.Raw(query, finalSlug, id).Scan(&exists)
if !exists {
break
}
finalSlug = fmt.Sprintf("%s-%d", baseSlug, counter)
counter++
}
return finalSlug
}
2. Kod analizi
(1) SEO dostu olduğundan emin olmak için başlığı işleyin
baseSlug := ConvertToSlug(title)
(2) Özel karakterleri filtrele
reg := regexp.MustCompile(`[^a-zA-Z0-9\s-]`)
baseSlug = reg.ReplaceAllString(baseSlug, "")
- Bu düzenli ifade yalnızca şunların korunmasını sağlar: büyük ve küçük harfler, sayılar, boşluklar ve tireler
-
.
(3) URL uyumluluğunu sağlamak için işlem alanları
baseSlug = strings.ReplaceAll(baseSlug, " ", "-")
- Bu gibi URL kodlama sorunlarından
-
kaçınmak için tüm boşlukları ile değiştirin .%20
(4) --
Tire sorunlarından kaçının
baseSlug = cleanHyphens(baseSlug)
--
Bu fonksiyon örneğin"hello--world"
oluşacak . durumunun oluşmamasını sağlar"hello-world"
.
(5) Benzersizliğin sağlanması için veritabanı kontrolü
query := fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM %s WHERE slug = ? AND id != ?)", tableName)
global.GVA_DB.Raw(query, finalSlug, id).Scan(&exists)
if exists {
finalSlug = fmt.Sprintf("%s-%d", baseSlug, counter)
}
Aynı Slug veritabanında zaten mevcutsa, benzersizliği garantilemek için otomatik olarak sayısal bir son ek eklenir:
example → example-1 → example-2
3. Kod Örnekleri
Bu Slug üretecini Go projenizde kullanın :
package main
import (
"fmt"
"your_project/utils"
)
func main() {
title1 := "Go dil programlama"
title2 := "Hello Global"
title3 := "Golang URL üreten"
slug1 := utils.GenerateSlug(title1, "articles", 1)
slug2 := utils.GenerateSlug(title2, "articles", 2)
slug3 := utils.GenerateSlug(title3, "articles", 3)
fmt.Println(slug1) // DIŞ: go-yu-yan-bian-cheng
fmt.Println(slug2) // DIŞ: hello-shi-jie
fmt.Println(slug3) // DIŞ: golang-url-sheng-cheng
}
4. Sonuç
✅Türkçe ve İngilizce desteği : Çince pinyin’e dönüştürülür ve İngilizce olduğu gibi kalır
✅Özel karakterleri kaldırın : yalnızca harfleri, sayıları ve -
✅Sorunları önleyin :--
slug standardizasyonunu sağlayın
✅Benzersizlik kontrolü : veritabanı çakışmalarını önleyin
🚀 Bununla birlikte, SEO dostu ve Django/Go web projelerine kolayca entegre edilebilen bir slug üreteci uyguladık !
👉Faydalı bulduysanız lütfen beğenin👍 veya iyileştirme önerilerinizi paylaşın! 🚀