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 (interfaces) davranış sözleşmelerini nasıl tanımladığını ve özel hataların (custom errors) doğrulama başarısız olduğunda nasıl anlamlı geri bildirimler sağladığını gösteren bir sayı doğrulama sistemi oluşturun. Bu meydan okuma, arayüzler oluşturma, bunları özel türlerle uygulama ve doğrulama hatalarını uygun şekilde yönetme yeteneğinizi test edecektir.
İki girdi alacaksınız:
- Doğrulanacak sayıları içeren, virgülle ayrılmış bir dize (örneğin,
"45,150,25,200,75") "min:max"formatında doğrulama aralığını içeren bir dize (örneğin,"1:100")
Göreviniz şunları yapmaktır:
- Tek bir metoda sahip bir
Validatorarayüzü tanımlayın:Validate() error Value(int) veMessage(string) olmak üzere iki alana sahipValidationErroradında özel bir hata yapısı (struct) oluşturunValidationErroriçin, mesajı şu formatta döndürenError() stringmetodunu uygulayın:"Validation failed: [message] (value: [value])"Number(int),Min(int) veMax(int) olmak üzere üç alana sahip birNumberValidatoryapısı oluşturunNumberValidatoriçin şu işlemleri yapanValidate() errormetodunu uygulayın:- Sayı geçerli aralıktaysa (sınırlar dahil)
nildöndürür - Sayı minimum değerden küçükse
"number below minimum range"mesajıyla birValidationErrordöndürür - Sayı maksimum değerden büyükse
"number above maximum range"mesajıyla birValidationErrordöndürür
- Sayı geçerli aralıktaysa (sınırlar dahil)
- Bireysel sayı dizelerini elde etmek için ilk girdiyi virgüllerden ayırarak ayrıştırın
- Minimum ve maksimum değerleri çıkarmak için ikinci girdiyi iki nokta üst üste işaretinden ayırarak ayrıştırın
strconvpaketini kullanarak tüm dize değerlerini tam sayılara (integer) dönüştürün- Doğrulama başlığını görüntüleyin:
"=== NUMBER VALIDATION SYSTEM ===" - Doğrulama parametrelerini görüntüleyin:
"Validating numbers in range [min] to [max]" - Her sayı için:
- Sayı ve aralık değerleriyle bir
NumberValidatorörneği oluşturun - Doğrulayıcı üzerinde
Validate()metodunu çağırın - Doğrulama geçerse (hata
nilise), şunu görüntüleyin:"✓ [number] is valid" - Doğrulama başarısız olursa (hata
nildeğilse), şunu görüntüleyin:"✗ [error_message]"
- Sayı ve aralık değerleriyle bir
- Doğrulama özetini görüntüleyin:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- Tamamlanma mesajını görüntüleyin:
"Number validation completed successfully"
Girdi dizelerini bölmek için strings paketini, dizeleri tam sayılara dönüştürmek için strconv paketini ve formatlı çıktı için fmt paketini kullanın. Bu meydan okuma, özel hata türleri aracılığıyla ayrıntılı hata bilgisi sağlarken arayüzleri kullanarak nasıl esnek doğrulama sistemleri 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ışlar