83 / 103

Exercise: Errors

Mashq: xatolar

Xatolar bilan mashq qilamiz.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

Oldingi mashqdagi Sqrt funksiyangizni nusxalab, uni error qiymati qaytaradigan qilib o'zgartiring.

Sqrt kompleks sonlarni qo'llab-quvvatlamagani uchun manfiy son berilganda nil bo'lmagan xato qaytarishi kerak.

Yangi tip yarating:

example.go
type ErrNegativeSqrt float64

va unga

example.go
func (e ErrNegativeSqrt) Error() string

metodini berib, uni error qiling; ErrNegativeSqrt(-2).Error() "cannot Sqrt negative number: -2" qaytarsin.

Eslatma: Error metodi ichida fmt.Sprint(e) ni chaqirish dasturni cheksiz siklga tushiradi. Buning oldini olish uchun avval e ni o'zgartiring: fmt.Sprint(float64(e)). Nima uchun?

Sqrt funksiyangizni manfiy son berilganda ErrNegativeSqrt qiymatini qaytaradigan qilib o'zgartiring.

Testlar Sqrt(2) xatosiz √2 ga yaqin qiymat qaytarishini, Sqrt(-2) esa ErrNegativeSqrt tipidagi xato qaytarishini va uning matni "cannot Sqrt negative number: -2" ekanini tekshiradi.

2-topshiriq

ErrNol xato qiymati tayyor turibdi (fmt.Errorf bilan). Bolish(a, b float64) (float64, error) funksiyasini yozing: b == 0 bo'lsa aynan shu ErrNol ni (yangisini yaratmasdan) qaytarsin, aks holda a / b va nil. Chaqiruvchi err == ErrNol bilan solishtira oladi.