Tip Seçimi
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 18 / 68.
Tür onayları tek bir türü kontrol etmek için iyi çalışsa da bir arayüz değişkeni için genellikle birden çok olası türü ele almanız gerekir. İşte tür anahtarının son derece kullanışlı olduğu nokta burasıdır - somut türe göre farklı eylemler gerçekleştirmek için temiz bir yol sağlar.
Bir tür switch’i şu özel sözdizimini kullanır: switch v := i.(type). Belirli bir tür yerine (type) anahtar sözcüğünün kullanıldığına dikkat et. v değişkeni her case’te somut türüyle birlikte gerçek değeri içerecektir:
func describe(data interface{}) {
switch v := data.(type) {
case int:
fmt.Printf("Integer: %d\n", v)
case string:
fmt.Printf("String: %s\n", v)
case bool:
fmt.Printf("Boolean: %t\n", v)
default:
fmt.Printf("Unknown type: %T\n", v)
}
}Her durumda v otomatik olarak doğru türe sahip olur; ek bir tür doğrulamasına gerek yoktur. Bu, özellikle tek bir yerde birkaç farklı türü işlemeniz gerektiğinde, tür anahtarlarını birden fazla tür doğrulamasını if-else ifadeleriyle zincirlemekten çok daha anlaşılır hâle getirir.
Görev
KolayBu challenge'da, bir notification system içinde birden fazla data type'ı işlemek için type switch kullanmayı pratiğe dökeceksin. Farklı notification type'larını işleyen ve bunları concrete type'larına based uygun şekilde biçimlendiren bir function oluşturacaksın.
İki input alacaksın:
- Notification type'ını temsil eden bir string (ör.
"email","sms","push"veya"alert") - Notification content'ını veya değerini temsil eden bir string
Görevin:
processNotificationadında,interface{}parameter alan bir function oluşturmak- Notification type input'una based olarak content'ı appropriate Go type'a convert etmek ve bir
interface{}variable içinde saklamak:"email"için: content'ı string olarak kullan"sms"için: content'ı bir integer'a convert et (character count'ı temsil eder)"push"için: content'ı bir boolean'a convert et ("enabled" için true, diğer her şey için false)"alert"için: content'ı bir float64'e convert et (priority level'ı temsil eder)
- Convert edilmiş değerle
processNotificationfunction'ını çağırmak processNotificationiçinde her type'ı işlemek ve appropriate mesajı yazdırmak için bir type switch kullanmak:stringiçin:"Email notification: [value]"intiçin:"SMS notification with [value] characters"booliçin:"Push notifications: [value]"float64için:"Alert with priority: [value]"- Diğer tüm type'lar için:
"Unknown notification type"
String conversions için strconv package'ını kullan. Boolean conversion için yalnızca "enabled" değeri true sonucunu vermelidir. Bu challenge, type switch'lerin tek bir control structure içinde birden fazla type'ı işlemenin temiz bir yolunu nasıl sağladığını ve her case'te correctly typed value'yu otomatik olarak nasıl verdiğini gösterir.
float64 değerini, fmt.Println veya %v / %g verb'lerinin yaptığı gibi en kısa biçiminde yazdır: 3.5, 3.5 olarak; 1.0 ise 1 olarak yazdırılır (%f verb'i 1.000000 yazdırır).
Kendin dene
package main
import (
"fmt"
"strconv"
)
func main() {
// Girdiyi oku
var notificationType string
var content string
fmt.Scanln(¬ificationType)
fmt.Scanln(&content)
// TODO: Kodunuzu aşağıya yazın
// 1. Create processNotification function that takes interface{} parameter
// 2. Convert content to appropriate type based on notificationType
// 3. Call processNotification with the converted value
// 4. Use type switch inside processNotification to handle different types
}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