Short Code Generation
Qisqa kod yaratish
Avtomobil raqamlari nima uchun harflar VA raqamlarni birga ishlatadi? Chunki faqat raqamlar bilan ko'p noyob kombinatsiya hosil qilish uchun juda uzun raqam kerak bo'lardi, harflar qo'shilsa esa QISQAROQ raqam bilan yanada ko'proq noyob kombinatsiya olish mumkin. Qisqa havola kodlarini yaratishda ham xuddi shu g'oya — base62 kodlash (0-9, a-z, A-Z — jami 62 ta belgi) ishlatiladi.
package main
import "fmt"
const base62Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
// encodeBase62 — sonni base62 satrga aylantiradi (masalan 12345 -> "3D7")
func encodeBase62(n int64) string {
if n == 0 {
return string(base62Chars[0])
}
var result []byte
base := int64(len(base62Chars))
for n > 0 {
remainder := n % base
result = append([]byte{base62Chars[remainder]}, result...)
n /= base
}
return string(result)
}
func main() {
fmt.Println(encodeBase62(0))
fmt.Println(encodeBase62(61))
fmt.Println(encodeBase62(12345))
}Bu algoritm — "Number Systems & Bitwise" darsida ko'rgan pozitsion sanoq sistemasi g'oyasining umumiyroq ko'rinishi (o'nlik sistema 10 ta, ikkilik 2 ta belgidan foydalansa, bu yerda 62 ta belgi ishlatiladi): son 62'ga bo'linib, QOLDIQ har safar mos belgiga aylantiriladi, natija esa TESKARI tartibda (oxiridan boshigacha) qurib boriladi — shuning uchun append([]byte{...}, result...) orqali har safar belgi RO'YXAT BOSHIGA qo'shiladi.
Bizning URL Shortener'da har bir yangi havola uchun bitta O'SIB BORUVCHI hisoblagich (counter) ishlatiladi (1, 2, 3, ...), va shu son encodeBase62 orqali qisqa kodga aylantiriladi. Bu yondashuv — tasodifiy kod yaratishga (math/rand) qaraganda ODDIYROQ va TAKRORLANMAYDIGAN kodlarni AVTOMATIK kafolatlaydi (har bir son faqat bitta marta ishlatiladi), garchi production tizimlarda ko'pincha xavfsizlik uchun tasodifiylik ham qo'shilsa-da.
>_ Exercise
Hisoblagich asosida ketma-ket kod yaratuvchi generator yozing.
- •CodeGenerator struct'ini yozing: counter int64 maydoni bilan
- •Next() string metodini yozing: g.counter++ qiling, so'ng encodeBase62(g.counter) natijasini qaytaring
- •generator yaratib, Next()ni 3 marta chaqiring va har birining natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Base62 kodlash — o'sib boruvchi sonni qisqa, takrorlanmaydigan matn kodiga aylantirish orqali, uzun raqamlar o'rniga ixcham, o'qish oson havola kodlari yaratadi.
NEXT UP
Shorten Endpoint
$ go run main.go
Kodingizni ishga tushiring