Özet - Interface ve hata
- Go kursu
- Başlangıç
- Ders 86/90
- 4 dk
Interface ve error'ı birleştirerek bir validasyon yazarsın.
Interface ve hata özeti
Interface = yöntem listesi; türler onu örtük karşılar. Küçük interface'ler (io.Reader, fmt.Stringer) güçlü soyutlamalardır. error da bir interface'tir: Error() string. Hatalar errors.New ve fmt.Errorf("...: %w", err) ile oluşturulur, son dönüş değeri olarak verilir, errors.Is (değer) ve errors.As (tür) ile incelenir.
Type switch
Bir interface değerinin gerçek türüne göre dallanmak için switch v := x.(type) kullanılır:
func tanimla(x any) string {
switch v := x.(type) {
case int:
return fmt.Sprintf("tam sayı %d", v)
case string:
return "metin " + v
case error:
return "hata: " + v.Error()
default:
return "bilinmeyen"
}
}Uygulama Tanımla
Yukarıdaki tanimla(x any) string fonksiyonunu type switch ile yaz. 42, "go", errors.New("x") ve 3.5 için sonuçları ayrı satırlarda yazdır.
Başlangıç kodu
package main
import (
"errors"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"errors"
"fmt"
)
func tanimla(x any) string {
switch v := x.(type) {
case int:
return fmt.Sprintf("tam sayı %d", v)
case string:
return "metin " + v
case error:
return "hata: " + v.Error()
default:
return "bilinmeyen"
}
}
func main() {
for _, x := range []any{42, "go", errors.New("x"), 3.5} {
fmt.Println(tanimla(x))
}
}Beklenen çıktı
tam sayı 42 metin go hata: x bilinmeyen
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Boş interface <code>any</code> (<code>interface{}</code>) neyi tutabilir?
- Yalnızca struct'ları
- Yalnızca nil'i
- Yalnızca sayıları
- Her türden değeri Doğru cevap
Açıklama: Yöntemi olmayan interface'i her tür karşılar; değeri kullanmak için tür iddiası ya da type switch gerekir.
2 Tür anahtarı
switch v := x.(____) {
case int:
fmt.Println("int", v)
}
switch v := x.(type) {
case int:
fmt.Println("int", v)
}
Açıklama: x.(type) yalnızca switch içinde kullanılır ve gerçek türe göre dallanır.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
interface |
Davranış sözleşmesi |
any |
Her tür |
x.(type) |
Tür dallanması |
errors.Is / As |
Hata zinciri |