Tür Doğrulamaları ve Tür Switch'leri
Güvenli tür doğrulamaları ve switch örüntüleri
Tür Doğrulamaları ve Tür Switch'leri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Tür Doğrulamaları
Bir tür doğrulaması, somut değeri bir arayüzden çıkarır. Söz dizimi x.(T) şeklindedir:
package main
import "fmt"
func main() {
var i interface{} = "hello"
s := i.(string) // panics if wrong type
fmt.Println(s, len(s)) // hello 5
}İki Değerli Güvenli Doğrulama
Yanlış türlerde paniği önlemek için virgül-ok biçimini kullanın:
package main
import "fmt"
func main() {
var i interface{} = 42
s, ok := i.(string)
fmt.Println(s, ok) // "" false
n, ok := i.(int)
fmt.Println(n, ok) // 42 true
}Tür Seçimi
Bir tür seçimi, bir arayüz değerinin dinamik türünü birden çok türle karşılaştırır:
package main
import "fmt"
func describe(i interface{}) string {
switch v := i.(type) {
case int: return fmt.Sprintf("int: %d", v)
case string: return fmt.Sprintf("string: %q", v)
case bool: return fmt.Sprintf("bool: %v", v)
default: return fmt.Sprintf("unknown: %T", v)
}
}
func main() {
fmt.Println(describe(42))
fmt.Println(describe("hi"))
fmt.Println(describe(3.14))
}error Üzerinde Tür Seçimi
Tür seçimleri özellikle hataları kategorilere ayırmak için kullanışlıdır:
package main
import ("errors"; "fmt")
type NotFoundError struct{ Name string }
func (e *NotFoundError) Error() string { return e.Name + " not found" }
type PermError struct{}
func (e *PermError) Error() string { return "permission denied" }
func handle(err error) {
switch e := err.(type) {
case *NotFoundError: fmt.Println("missing:", e.Name)
case *PermError: fmt.Println("perm error")
default: fmt.Println("other:", e)
}
}
func main() {
handle(&NotFoundError{"user"})
handle(errors.New("generic"))
}Bir Arayüzle Doğrulama
Yalnızca somut türleri değil, başka bir arayüz türünü de doğrulayabilirsiniz. Bu, bir nesnenin isteğe bağlı bir davranışı destekleyip desteklemediğini denetlemek için kullanışlıdır:
package main
import "fmt"
type Flusher interface{ Flush() }
type Writer interface{ Write(string) }
type BufferedWriter struct{ buf string }
func (b *BufferedWriter) Write(s string) { b.buf += s }
func (b *BufferedWriter) Flush() { fmt.Println(b.buf); b.buf = "" }
func maybeFlush(w Writer) {
if f, ok := w.(Flusher); ok { f.Flush() }
}
func main() {
bw := &BufferedWriter{}
bw.Write("hello")
maybeFlush(bw)
}Nil Arayüz Doğrulaması
Nil bir arayüz üzerinde doğrulama yapmak paniğe neden olur. Doğrulamadan önce arayüzün nil olmadığından her zaman emin olun:
package main
import "fmt"
func safePrint(i interface{}) {
if i == nil {
fmt.Println("nil")
return
}
fmt.Printf("%T: %v\n", i, i)
}
func main() {
safePrint(nil)
safePrint(42)
}reflect.TypeOf Alternatifi
Doğrulama yapmadan türü yazdırmak için fmt.Sprintf("%T", v) veya reflect.TypeOf(v) kullanın:
package main
import ("fmt"; "reflect")
func main() {
v := []int{1, 2, 3}
fmt.Printf("%T\n", v) // []int
fmt.Println(reflect.TypeOf(v)) // []int
}Tür Doğrulaması ve Dönüştürme Karşılaştırması
Tür doğrulaması: somut türü bir arayüzden çıkarır. Tür dönüştürme: bir somut türü, uyumlu başka bir somut türe dönüştürür. Bunlar farklı işlemlerdir:
package main
import "fmt"
func main() {
var i interface{} = int32(5)
n := i.(int32) // assertion — OK
big := int64(n) // conversion — OK
fmt.Println(n, big)
}select İçinde Virgül-ok Kalıbı
Virgül-ok kalıbı, kapatılmış bir kanalı algılamak için kanal alımlarında da kullanılabilir. Aynı kısa deyim Go'da tutarlı biçimde kullanılır.
Tür Seçimleri Ne Zaman Kullanılmalı
Yaygın kullanım alanları:
interface{}alanlarıyla JSON çözümleme- Hataları kategorilere ayırma
- Protokol iletilerini yönlendirme
- İsteğe bağlı arayüzleri denetleme (Flusher, Closer vb.)
Hızlı Kontrol
Güvenli olmayan bir tür doğrulaması başarısız olduğunda sonuç ne olur?
Özet
Temel çıkarımlar:
x.(T)yanlış türde paniğe neden olur;x, ok := x.(T)güvenlidir- Tür seçimleri birden çok türü düzenli biçimde ele alır
- İsteğe bağlı yetenekleri denetlemek için arayüz doğrulaması yapın
- Asla nil bir arayüz üzerinde doğrulama yapmayın
Alıştırma
Tür seçimini kullanarak int, float64 ve string (dizgeyi ayrıştırın) değerlerini işleyen ve diğerlerini atlayan bir sum(values []any) float64 işlevi yazın.
Sıkça Sorulan Sorular
“Tür Doğrulamaları ve Tür Switch'leri” dersi ücretsiz mi?
Evet — “Tür Doğrulamaları ve Tür Switch'leri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Tür Doğrulamaları ve Tür Switch'leri” dersinde ne öğreneceğim?
Güvenli tür doğrulamaları ve switch örüntüleri Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Tür Doğrulamaları ve Tür Switch'leri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Arayüz Tanımlama ve Uygulama
- Temel Standart Kitaplık Arayüzleri
- Tür Doğrulamaları ve Tür Switch'leri
- Arayüz Birleştirme ve En İyi Uygulamalar