Menu
Coddy logo textTech

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 zero

Bir 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.

challenge icon

Görev

Kolay

Bu 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)
}
quiz iconKendini test et

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