Mashq: xatolar
Xatolar bilan mashq qilamiz.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
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:
type ErrNegativeSqrt float64
va unga
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.
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.