`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.
Görev
KolayBu meydan okumada, basit bir yeniden deneme mekanizması oluşturmak için goto ifadesini kullanma pratiği yapacaksınız. Bir bağlantı kurmaya çalışan ve başarısız olması durumunda belirli sayıda yeniden deneme yapan bir bağlantı sistemi oluşturuyorsunuz.
İki girdi alacaksınız:
- Maksimum yeniden deneme sayısını temsil eden bir dize (ör.
"3") - Başarılı olacak deneme numarasını temsil eden bir dize (ör.
"2")
Göreviniz:
- İlk girdiden maksimum yeniden deneme sayısını ayrıştırmak
- İkinci girdiden başarılı deneme numarasını ayrıştırmak
- Yeniden deneme mantığını uygulamak için etiketle birlikte bir
gotoifadesi kullanmak - Deneme numarasını 1'den başlatmak ve her başarısız denemeden sonra artırmak
- Başarısız olan her deneme için
"Attempt [attempt_number] failed"yazdırmak - Deneme numarası başarılı deneme numarasıyla eşleştiğinde
"Attempt [attempt_number] succeeded"yazdırmak ve çıkmak - Başarılı olmadan maksimum yeniden deneme sayısını aşarsanız
"All attempts failed"yazdırmak ve çıkmak
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.
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ışlarKendi başına pratik yap: Online Go derleyicisi