Basit Sayı Doğrulayıcı
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 67 / 68.
Görev
KolayArayüzlerin davranış sözleşmelerini nasıl tanımladığını ve özel hataların doğrulama başarısız olduğunda anlamlı geri bildirimleri nasıl sağladığını gösteren bir sayı doğrulama sistemi oluştur. Bu görev, arayüzler oluşturma, bunları özel türlerle uygulama ve doğrulama hatalarını uygun şekilde ele alma becerini test edecek.
İki girdi alacaksın:
- Virgüllerle ayrılmış, doğrulanacak sayıları içeren bir dize (ör.
"45,150,25,200,75") "min:max"biçiminde doğrulama aralığını içeren bir dize (ör."1:100")
Görevin:
- Tek bir yönteme sahip bir
Validatorarayüzü tanımla:Validate() error - İki alana sahip
ValidationErroradlı özel bir hata türü yapısı oluştur:Value(int) veMessage(string) Error() stringiçin, mesajı şu biçimde döndürenValidationErroryöntemini uygula:"Validation failed: [message] (value: [value])"- Üç alana sahip bir
NumberValidatoryapısı oluştur:Number(int),Min(int) veMax(int) Validate() erroriçin şu işlemleri yapanNumberValidatoryöntemini uygula:- Sayı geçerli aralık içindeyse (sınırlar dahil)
nildöndürür - Sayı minimumdan küçükse
ValidationErrormesajına sahip bir"number below minimum range"döndürür - Sayı maksimumdan büyükse
ValidationErrormesajına sahip bir"number above maximum range"döndürür
- Sayı geçerli aralık içindeyse (sınırlar dahil)
- Bireysel sayı dizelerini elde etmek için ilk girdiyi virgüllere göre böl
- Minimum ve maksimum değerleri çıkarmak için ikinci girdiyi iki nokta üst üste işaretlerine göre böl
- Tüm dize değerlerini
strconvpaketini kullanarak tamsayılara dönüştür - Doğrulama başlığını görüntüle:
"=== NUMBER VALIDATION SYSTEM ===" - Doğrulama parametrelerini görüntüle:
"Validating numbers in range [min] to [max]" - Her sayı için:
- Sayı ve aralık değerleriyle bir
NumberValidatorörneği oluştur - Doğrulayıcı üzerinde
Validate()yöntemini çağır - Doğrulama başarılı olursa (hata
nilise) şunu görüntüle:"✓ [number] is valid" - Doğrulama başarısız olursa (hata
nildeğilse) şunu görüntüle:"✗ [error_message]"
- Sayı ve aralık değerleriyle bir
- Doğrulama özetini görüntüle:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- Tamamlanma mesajını görüntüle:
"Number validation completed successfully"
Girdi dizelerini bölmek için strings paketini, dizeleri tamsayılara dönüştürmek için strconv paketini ve biçimlendirilmiş çıktı için fmt paketini kullan. Bu görev, özel hata türleri aracılığıyla ayrıntılı hata bilgileri sağlarken arayüzleri kullanarak esnek doğrulama sistemlerinin nasıl oluşturulacağını gösterir.
Kendin dene
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// Girdiyi oku
var numbersInput string
var rangeInput string
fmt.Scanln(&numbersInput)
fmt.Scanln(&rangeInput)
// Girdileri ayrıştır
numberStrings := strings.Split(numbersInput, ",")
rangeParts := strings.Split(rangeInput, ":")
// Aralık değerlerini tam sayıya dönüştür
min, _ := strconv.Atoi(rangeParts[0])
max, _ := strconv.Atoi(rangeParts[1])
// TODO: Kodunuzu aşağıya yazın
// 1. Validator arayüzünü (interface) tanımlayın
// 2. ValidationError yapısını (struct) oluşturun ve Error() metodunu uygulayın
// 3. NumberValidator yapısını oluşturun ve Validate() metodunu uygulayın
// 4. Her bir sayıyı işleyin ve doğrulayın
// 5. Sonuçları ve özeti görüntüleyin
// Doğrulama başlığını görüntüle
fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
fmt.Printf("Validating numbers in range %d to %d\n", min, max)
// Her bir sayıyı burada işleyin
// Doğrulama özetini görüntüle
fmt.Println("=== VALIDATION SUMMARY ===")
// Özet çıktısını buraya ekleyin
fmt.Println("Number validation completed successfully")
}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