Bir çox proqramçı üçün Go dilinə keçid edərkən ən böyük maneələrdən biri onun xəta idarəetməsi üsuludur. Java kimi dillərdə 'try/catch' blokları ilə xətaları tutmağa öyrəşən developer'lər Go dilində hər yerdə "if err != nil" yazmağı əvvəlcə yorucu hesab edirlər. Lakin bir neçə həftə öyrəşdikdən sonra bu yanaşmanın əslində məntiqli olduğu ortaya çıxır.
Go dilində xətalar sadəcə dəyər kimi qəbul edilir. Bir funksiya uğursuz ola bilərsə, o, son nəticə kimi "error" tipini qaytarır və onunla nə edəcəyinə qərar vermək çağıran tərəfə qalır. Kod hər səhvin harada baş verə biləcəyini aydın şəkildə göstərir. Məsələn, sifariş emal edən bir funksiyada üç fərqli nöqtədə xəta baş verə bilər — sifarişin alınması, yoxlanılması və ödənişin edilməsi. Bu nöqtələrin hamısı kodda ardıcıl şəkildə görünür, heç bir gizli axın yoxdur.
Go dilinin 'fmt.Errorf' funksiyasındakı '%w' verb'i orijinal səhvi qoruyub saxlamağa imkan verir. Bu, xətaya kontekst əlavə etməyin ən yaxşı yoludur. Həmçinin 'errors.Is' və 'errors.As' funksiyaları ilə xətaların daxili qatlarına baxmaq mümkündür. Məsələn, 'ErrNotFound' kimi bir sentinel xəta dəyəri təyin edərək, 'errors.Is' vasitəsilə bütün dolama yollardan keçərək bu xətanı tapa bilərsiniz.
Go dilində 'panic' və 'recover' mexanizmləri var, lakin onlar Java'dakı 'throw' və 'catch' kimi işləmir. 'panic' yalnız həqiqətən bərpa olunmaz vəziyyətlər üçün — proqramlaşdırma xətası, null pointer, davam etməyin daha pis nəticələrə gətirib çıxaracağı hallar üçün nəzərdə tutulub. Normal xəta idarəetməsi üçün həmişə "error" qaytarmaq tövsiyə olunur.
Go dilinin bu yanaşmasının üstünlüyü ondadır ki, kodun harada uğursuz ola biləcəyini dərhal görmək olur. Java'da bir istisna üç funksiya dərinliyindən atılaraq gözlənilmədiyi yerdə ortaya çıxa bilər. Go dilində isə hər bir xəta yeri kodda aydın şəkildə qeyd olunur. Bu, xüsusilə böyük layihələrdə debug prosesini çox asanlaşdırır.
Əgər siz də Java'dan Go dilinə keçid edirsinizsə, "if err != nil" yazmağın əvvəlcə sizi bezdirəcəyini bilin. Lakin zaman keçdikcə bu yanaşmanın nə qədər aydın və etibarlı olduğunu anlayacaqsınız. Yeganə çətinlik hər dəfə kifayət qədər kontekst əlavə etməyi unutmamaq və köhnə OOP vərdişlərindən qurtulmaqdır.
Mənbə: Dev.to (https://dev.to/mihirmohapatra/error-handling-learning-to-love-if-err-nil-21e9)

