reflect.Type ve reflect.Value
TypeOf, ValueOf, Kind ve Elem
reflect.Type ve reflect.Value, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. 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.
reflect paketine genel bakış
reflect paketi, Go programlarının türleri ve değerleri çalışma zamanında incelemesine olanak tanır. Kodlama kitaplıklarının, ORM'lerin ve bağımlılık ekleme çatılarının temelini oluşturur.
reflect.TypeOf
reflect.TypeOf(x), x değerinin reflect.Type değerini döndürür:
t := reflect.TypeOf(42)
fmt.Println(t.Name()) // "int"
fmt.Println(t.Kind()) // "int"
fmt.Println(t.String()) // "int"reflect.ValueOf
reflect.ValueOf(x), x'i barındıran bir reflect.Value döndürür. Değeri Kind'a özgü yöntemlerle okuyabilirsiniz:
v := reflect.ValueOf(42)
fmt.Println(v.Kind()) // "int"
fmt.Println(v.Int()) // 42Type.Kind ve Type.Name karşılaştırması
Kind, temel Go kategorisidir (int, struct, ptr, slice, ...). Name, bildirilen tür adıdır ("MyStruct"). Arayüzlerin Kind == Interface olur ancak Name değerleri yoktur.
Yapı alanları
Yapı alanlarını Type.NumField() ve bir reflect.StructField döndüren Type.Field(i) aracılığıyla inceleyin:
t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Printf("Field: %s Type: %s Tag: %s\n", f.Name, f.Type, f.Tag.Get("json"))
}Yapı alanı değerlerini okuma
Çalışma zamanında alan değerlerini okumak için Value.FieldByName veya Value.Field(i) kullanın:
v := reflect.ValueOf(user)
nameField := v.FieldByName("Name")
fmt.Println(nameField.String()) // "Alice"Yapı alanı değerlerini ayarlama
Bir alanı ayarlamak için değerin adreslenebilir olması gerekir (işaretçi olarak geçirilmelidir):
v := reflect.ValueOf(&user).Elem()
v.FieldByName("Name").SetString("Bob")İşaretçi dolaylı erişimi
Bir değer işaretçiyse, işaret edilen değeri almak için v.Elem() çağrısını yapın. Önce v.Kind() == reflect.Ptr denetimini gerçekleştirin.
if v.Kind() == reflect.Ptr {
v = v.Elem()
}reflect.New
Bir türün yeni sıfır değerini oluşturun ve bu değere bir işaretçi alın:
t := reflect.TypeOf(User{})
ptr := reflect.New(t) // *User
user := ptr.Interface().(*User)Yöntemleri çağırma
Yansıtılan bir değer üzerinde yöntemi adına göre çağırın:
v := reflect.ValueOf(user)
m := v.MethodByName("Greet")
results := m.Call(nil)
fmt.Println(results[0].String())Başarım
Yansıtma, doğrudan koddan 5-10 kat daha yavaştır. reflect.Type ve reflect.Value aramalarını yoğun döngülerin dışında önbelleğe alın. Başarım kritik olduğunda kod üretimi kullanın.
Hızlı kontrol
reflect.Type.Kind() ile reflect.Type.Name() arasındaki fark nedir?
Özet: reflect.Type ve reflect.Value
Ana noktalar:
- Çalışma zamanında tür incelemesi için reflect.TypeOf/ValueOf
- Kind: temel kategori; Name: bildirilen ad
- Yapı alanlarını değiştirmek için Value.FieldByName + SetXxx
- Ayarlanabilir değerler için işaretçi geçirin ve Elem() çağrısını yapın
Sıkça Sorulan Sorular
“reflect.Type ve reflect.Value” dersi ücretsiz mi?
Evet — “reflect.Type ve reflect.Value” 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.
“reflect.Type ve reflect.Value” dersinde ne öğreneceğim?
TypeOf, ValueOf, Kind ve Elem 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 1. dersidir.
“reflect.Type ve reflect.Value” 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
- reflect.Type ve reflect.Value
- Yapı Alanlarını ve Etiketlerini İnceleme
- Dinamik İşlev Çağrıları
- Uygulamalı Yansıma: Serileştiriciler