Use Named Result Parameters Sparingly
Nomlangan natija parametrlarini ehtiyotkorlik bilan ishlating
Go'da funksiya qaytaradigan qiymatlarga oldindan nom berish mumkin ("nomlangan natija"). Bu ba'zan foydali, lekin haddan tashqari ishlatilsa, kodni tushunish qiyinlashtiradi.
package main
import "fmt"
// Foydali holat: defer orqali natijani o'zgartirish kerak bo'lganda
func divide(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("qayta tiklandi: %v", r)
}
}()
result = a / b
return
}
func main() {
r, err := divide(10, 2)
fmt.Println(r, err)
r2, err2 := divide(10, 0)
fmt.Println(r2, err2)
}Bu — nomlangan natijalarning eng yaxshi ishlatilish holati: defer ichidagi funksiya errni nomi orqali "tutib olib" o'zgartira oladi — bu recover() bilan panic'ni xatoga aylantirishning standart naqshi. Lekin oddiy, qisqa funksiyalarda nomlangan natijalarni faqat "hujjat" sifatida ishlatish (masalan func Divide(a, b int) (quotient int, remainder int)) ba'zan foydali, ammo ularni majburiy emas deb bilib, faqat aniq foyda bergan joyda ishlating — aks holda ular qaysi qiymat qachon o'rnatilganini kuzatishni qiyinlashtiradi.
>_ Exercise
Panic'dan qutulish uchun nomlangan natijani ishlating.
- •safeIndex(s []int, i int) (value int, err error) yozing
- •defer+recover bilan panic bo'lsa err'ni to'ldiring
- •to'g'ri va noto'g'ri indeks uchun sinab ko'ring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Nomlangan natijalar defer+recover bilan panic'ni xatoga aylantirishda ayniqsa foydali; boshqa hollarda ularni faqat aniq foyda bo'lgandagina ishlating.
NEXT UP
Idioms Capstone
$ go run main.go
Kodingizni ishga tushiring