Temel Hata Yönetimi
Coddy'nin GO Journey'sinin Temeller bölümünün bir parçası — ders 108 / 109.
Temel Hata Yönetimi, Go'da başarısız olabilecek işlemlerden sonra hataları kontrol ettiğiniz temel bir kalıptır.
Sıfıra bölerken hata döndüren basit bir bölme fonksiyonu oluşturarak Go'da hataların nasıl ele alınacağını öğrenelim:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}Bu fonksiyon iki değer döndürür: bölme işleminin sonucu ve bir hata. Eğer bölen sıfır ise, bölme işlemini denemek yerine bir hata mesajı döndürür.
Şimdi, bu fonksiyonun nasıl kullanılacağını ve olası hataların nasıl ele alınacağını görelim:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // Yürütmeyi durdurun veya hatayı ele alın
}
fmt.Println("Result:", result)Bu kodu çalıştırdıktan sonra, if err != nil koşulunu kullanarak bir hata oluşup oluşmadığını kontrol ederiz. Sıfıra bölmeye çalıştığımız için fonksiyon bir hata döndürür ve ekranda aşağıdakiler görünecektir:
Error occurred: division by zeroBir hatayı son dönüş değeri olarak döndürme ve hemen kontrol etme kalıbı Go'da çok yaygındır. Programınızın çökmek yerine hataları kontrollü bir şekilde ele almasını sağlar.
Görev
KolayBu meydan okumada, Go'da temel hata yönetimini pratik edeceksiniz. İki sayıyı bölen bir fonksiyonunuz var, ancak sıfıra bölme bir çalışma zamanı hatasına (runtime error) neden olur. Göreviniz, bu çökmeyi önlemek için hata yönetimi eklemektir.
Kodda zaten hem bir sonuç hem de bir hata döndüren bir fonksiyon bulunmaktadır. Sonucu kullanmadan önce bir hata olup olmadığını kontrol etmeniz gerekir.
Kopya kağıdı
Go'da, hata verebilecek fonksiyonlar son dönüş değeri olarak bir hata döndürür:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}if err != nil kullanarak hataları kontrol edin:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // Çalışmayı durdurun veya hatayı ele alın
}
fmt.Println("Result:", result)Bu desen, programların çökmek yerine hataları kontrollü bir şekilde ele almasını sağlar.
Kendin dene
package main
import (
"errors"
"fmt"
)
// Bu fonksiyon x'i y'ye böler ve y sıfır ise bir hata döndürür
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
return x / y, nil
}
func main() {
// Test değerleri
numerator := 10.0
denominator := 0.0
// divide fonksiyonunu çağır
result, err := divide(numerator, denominator)
// TODO: err nil değilse (bir hata varsa) kontrol et
// Eğer bir hata varsa, fmt.Println(err) kullanarak yazdır
// Aksi takdirde, fmt.Printf("Result: %.2f\n", result) kullanarak sonucu yazdır
// Bu satırı kaldırın ve yukarıda uygun hata yönetimini uygulayın
fmt.Printf("Result: %.2f\n", result)
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Karşılaştırma ve Mantıksal Operatörler
Karşılaştırma Operatörleri - Bölüm 1Karşılaştırma Operatörleri - Bölüm 2Mantıksal VE OperatörüMantıksal VEYA OperatörüMantıksal DEĞİL OperatörüOperatör Önceliği TemelleriÖzet - Karşılaştırma Yapma7Kontrol Akışı: Döngüler
`for` Döngüsü Nedir?`for` Döngüsü - Temel`for` Döngüsü - Sadece Koşul`break` Anahtar Kelimesi`continue` Anahtar Kelimesiİç İçe DöngülerÖzet - İşlemleri Tekrarlama2Değişkenler ve Temel Veri Tipleri
Değişken nedir?`:=` ile Tür ÇıkarımıTam Sayılar (int)Ondalıklı SayılarBooleanlarStringlerSıfır DeğerlerSabitlerİsimlendirme KurallarıÖzet - Değişkenler ve Türler5Temel Giriş/Çıkış
Biçimlendirilmiş ÇıktıBiçim BelirteçleriVeri Tiplerini YazdırmaTemel Kullanıcı Girdisi AlmaÖzet - Giriş ve Çıkış8Fonksiyonlar
Fonksiyonları AnlamakFonksiyon TanımlamaFonksiyonları ÇağırmaFonksiyon ParametreleriTek Bir Değer DöndürmeBirden Fazla Değer Döndürmeİsimlendirilmiş Dönüş DeğerleriFonksiyon Kapsamı TemelleriÖzet - Yeniden Kullanılabilir Kod Oluşturma11Bileşik Tipler: Dilimler
Dilimlere GirişDilim Literallerini Tanımlama`make` ile Dilim OluşturmaDilim Uzunluğu vs KapasiteDilim Elemanlarına ErişimEleman EklemeMevcut Dilimleri/Dizileri DilimlemeDilimler Üzerinde YinelemeDilimleri KopyalamaÖzet - Dinamik Listeler14Temel Hata Yönetimi
Hata Kavramı`error` ArayüzüHata Döndüren FonksiyonlarHataları Kontrol EtmeBasit Hatalar OluşturmaFormatlanmış Hatalar OluşturmaTemel Hata YönetimiÖzet - Problemleri Ele Alma3Temel Operatörler
Aritmetik OperatörlerBölme OperatörüModulo OperatörüAtama OperatörüBileşik Atama OperatörleriArtırma ve AzaltmaÖzet - Hesaplamalar6Kontrol Akışı: Koşullu İfadeler
`if` İfadesi`else` Anahtar Kelimesi`else if` Anahtar Kelimesi`if` İçinde Değişken GölgelemeDeğişkenleri Başlatma`switch` İfadesiİfadeli `switch`İfadesiz `switch``fallthrough` Anahtar KelimesiÖzet - Karar Verme