`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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBu 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:
- İlk girdiden maksimum yeniden deneme sayısını ayrıştırın (parse)
- İkinci girdiden başarılı deneme numarasını ayrıştırın (parse)
- Yeniden deneme mantığını uygulamak için bir etiket (label) ile birlikte
gotoifadesini kullanın - 1 numaralı deneme ile başlayın ve her başarısız denemeden sonra sayıyı artırın
- Başarısız olan her deneme için
"Attempt [attempt_number] failed"yazdırın - Deneme numarası başarılı deneme numarasıyla eşleştiğinde,
"Attempt [attempt_number] succeeded"yazdırın ve çıkış yapın - 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
}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
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar