reflect paketi
- Go kursu
- İleri seviye
- Ders 1/68
- 4 dk
reflect paketinin temelini öğrenirsin.
reflect paketi
reflect paketi, bir değerin türünü ve içeriğini çalışma zamanında incelemeni sağlar. Derleme anında türünü bilmediğin bir any değerinin aslında ne olduğunu sorabilirsin.
var x any = 3.14
fmt.Println(reflect.TypeOf(x)) // float64encoding/json ve fmt gibi paketler struct alanlarını bu şekilde okur.
Bedeli: hız ve tür güvenliği
Reflection güçlüdür ama iki bedeli vardır: normal koddan daha yavaştır ve hatalar derleme yerine çalışma anında panic olarak çıkar. Bu yüzden önce arayüzler ve generic'ler denenir; reflect, gerçekten genel bir araç (serileştirici, ORM, doğrulayıcı) yazarken kullanılır.
Uygulama Türü yazdır
var x any = 42 tanımla ve reflect.TypeOf(x) sonucunu fmt.Println ile yazdır.
Başlangıç kodu
package main
import (
"fmt"
"reflect"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"reflect"
)
func main() {
var x any = 42
fmt.Println(reflect.TypeOf(x))
}Beklenen çıktı
int
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 reflect paketi en çok ne zaman gerekir?
- Dosya okumak için
- Türü derleme anında bilinmeyen değerleri incelerken Doğru cevap
- Döngüleri hızlandırmak için
- Goroutine başlatmak için
Açıklama: reflect, any olarak gelen değerin gerçek türünü ve alanlarını çalışma zamanında okur; JSON kodlayıcılar bunu kullanır.
2 Türü sorgula
var x any = "Go"
fmt.Println(reflect.____(x))
var x any = "Go"
fmt.Println(reflect.TypeOf(x))
Açıklama: reflect.TypeOf bir değerin türünü (string) döndürür.
3 reflect kavramları
| Kavram | Anlamı |
|---|---|
reflect.TypeOf |
Türü verir |
reflect.ValueOf |
Değeri sarmalar |
any |
Her türü taşıyabilir |
panic |
Hatalı reflect kullanımında oluşur |