Hata Kavramı
Coddy'nin GO Journey'sinin Temeller bölümünün bir parçası — ders 102 / 109.
Go'da, hatalar bir şeylerin ters gittiğini belirten değerlerdir. Go, hataları istisnalar kullanmak yerine açıkça ele alır.
Sayıları bölerken hata oluşturabilecek bir fonksiyon oluşturalım:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Bu fonksiyon iki değer döndürür: bölme işleminin sonucu ve potansiyel bir hata. Eğer bölen sıfır ise, bölme işlemini denemek yerine bir hata mesajı döndürürüz.
Şimdi, fonksiyonumuzu kullanalım ve olası hataları ele alalım:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Bu kodu çalıştırdıktan sonra, sıfıra bölmeye çalıştığımız için ekranda bir hata mesajı göreceğiz:
Error: cannot divide by zeroBu, Go'nun hata işleme desenini gösterir: bir hata oluşup oluşmadığını kontrol edin (err != nil) ve ardından uygun işlemi yapın. Eğer hata oluşmadıysa, sonucu güvenle kullanabiliriz.
Görev
KolayBu meydan okumada, Go'da hatalarla çalışma pratiği yapacaksınız. İki sayıyı bölen ve sıfıra bölme denendiğinde bir hata döndüren bir fonksiyon oluşturacaksınız.
Göreviniz şunları yapmaktır:
- İki tam sayı alan ve bunların bölümünü ve bir hatayı döndüren
dividefonksiyonunu tamamlayın. - Eğer bölen sıfır ise, 0 ve "division by zero" mesajını içeren bir hata döndürün.
- Bölme işlemi geçerliyse, sonucu ve hata için
nildöndürün. mainfonksiyonunda, sağlanan değerlerledividefonksiyonunu çağırın ve tüm hataları uygun şekilde ele alın.
Bu alıştırma, Go fonksiyonlarının yaygın olarak nasıl bir sonuç ve bir hata döndürdüğünü ve bu hataların nasıl kontrol edilip ele alınacağını gösterir.
Kopya kağıdı
Go'da, hatalar (errors) bir şeylerin ters gittiğini belirten değerlerdir. Go, hataları istisnalar (exceptions) kullanmak yerine açıkça (explicitly) ele alır.
Hata verme olasılığı olan fonksiyonlar iki değer döndürür: sonuç ve potansiyel bir hata:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Hataları işlemek için, hatanın nil olup olmadığını kontrol edin:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Yeni hata mesajları oluşturmak için errors.New() kullanın ve herhangi bir hata oluşmadığında nil döndürün.
Kendin dene
package main
import (
"errors"
"fmt"
)
// divide, a'yı b'ye böler ve sonucu döndürür
// Eğer b 0 ise, bir hata döndürür
func divide(a, b int) (int, error) {
// TODO: divide fonksiyonunu uygula
// Eğer b 0 ise, 0 ve "division by zero" mesajını içeren bir hata döndürür
// Aksi takdirde, a/b sonucunu ve hata için nil döndürür
}
func main() {
// İlk test durumu
a, b := 10, 2
result, err := divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
// İkinci test durumu
a, b = 8, 0
result, err = divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\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şturma3Temel 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