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 görevde, Go'da hatalarla çalışmayı pratik edeceksin. İki sayıyı bölen ve sıfıra bölme denenirse bir hata döndüren bir fonksiyon oluşturacaksın.
Görevin:
- İki tamsayı alan ve bölümü ile bir hata döndüren
dividefonksiyonunu tamamlamak. - Bölen sıfırsa, 0 ve "division by zero" mesajını içeren bir hata döndürmek.
- Bölme geçerliyse, sonucu ve hata için
nildöndürmek. mainfonksiyonunda, sağlanan değerlerledividefonksiyonunu çağırmak ve oluşan hataları uygun şekilde ele almak.
Bu alıştırma, Go fonksiyonlarının genellikle bir sonuç ve bir hata döndürme biçimini ve bu hataların nasıl kontrol edilip ele alınacağını gösterir.
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 VermeKendi başına pratik yap: Online Go derleyicisi