Menu
Coddy logo textTech

`goto` İfadesi

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 4 / 68.

Go'daki goto ifadesi, kontrolü aynı fonksiyon içindeki etiketlenmiş bir ifadeye doğrudan aktarmanıza olanak tanır. Go bu özelliği içerse de, döngüler ve if ifadeleri gibi daha net kontrol yapıları tercih edildiğinden modern Go programlamasında nadiren kullanılır.

goto kullanmak için, önce bir tanımlayıcı ve ardından iki nokta üst üste yazarak bir etiket tanımlarsınız. Daha sonra, goto ve ardından etiket adını kullanarak o etikete atlayabilirsiniz.

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

Bu örnekte program, koşul artık sağlanmayana kadar start etiketine geri döner. Ancak, bu aynı mantık bir for döngüsü kullanılarak çok daha net olurdu. goto ifadesi kodun okunmasını ve bakımını zorlaştırabilir, bu yüzden yapılandırılmış kontrol akışı lehine genellikle önerilmez.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Bu challenge'da, basit bir yeniden deneme (retry) mekanizması oluşturmak için goto ifadesini kullanma pratiği yapacaksınız. Bir bağlantı kurmaya çalışan ve başarısız olursa belirli bir sayıda yeniden deneyen bir bağlantı sistemi oluşturuyorsunuz.

İki girdi alacaksınız:

  • Maksimum yeniden deneme sayısını temsil eden bir dize (örneğin, "3")
  • Başarılı olacak deneme numarasını temsil eden bir dize (örneğin, "2")

Göreviniz şunları yapmaktır:

  1. İlk girdiden maksimum yeniden deneme sayısını ayrıştırın (parse)
  2. İkinci girdiden başarılı deneme numarasını ayrıştırın (parse)
  3. Yeniden deneme mantığını uygulamak için bir etiket (label) ile birlikte goto ifadesini kullanın
  4. 1 numaralı deneme ile başlayın ve her başarısız denemeden sonra sayıyı artırın
  5. Başarısız olan her deneme için "Attempt [attempt_number] failed" yazdırın
  6. Deneme numarası başarılı deneme numarasıyla eşleştiğinde, "Attempt [attempt_number] succeeded" yazdırın ve çıkış yapın
  7. Başarıya ulaşmadan maksimum yeniden deneme sayısını aşarsanız, "All attempts failed" yazdırın ve çıkış yapın

Bir deneme başarısız olduğunda ve maksimum deneme sayısını aşmadığınızda yeniden deneme etiketine geri dönmek için goto ifadesini kullanın. Deneme numaraları 1'den başlamalıdır.

Kopya kağıdı

goto ifadesi, kontrolü doğrudan aynı fonksiyon içindeki etiketli bir ifadeye aktarır. Bir tanımlayıcı ve ardından iki nokta üst üste ile bir etiket tanımlayın, ardından goto kullanarak ona atlayın:

func main() {
    i := 0
start:
    fmt.Println("Count:", i)
    i++
    if i < 3 {
        goto start
    }
    fmt.Println("Done!")
}

goto Go'da mevcut olsa da, döngüler ve if ifadeleri gibi yapılandırılmış kontrol akışları daha net ve bakımı daha kolay olduğu için modern Go programlamasında nadiren kullanılır.

Kendin dene

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Girdiyi oku
    var maxRetriesStr string
    var successAttemptStr string
    fmt.Scanln(&maxRetriesStr)
    fmt.Scanln(&successAttemptStr)
    
    // Girdileri tam sayılara dönüştür
    maxRetries, _ := strconv.Atoi(maxRetriesStr)
    successAttempt, _ := strconv.Atoi(successAttemptStr)
    
    // Deneme sayacını başlat
    attempt := 1
    
    // YAPILACAK: Kodunuzu aşağıya yazın
    // Yeniden deneme mantığını uygulamak için bir etiketle goto ifadesini kullanın
    
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler