0Pricing
Go Academy · Ders

Yapı Alanlarını ve Etiketlerini İnceleme

Alanlar üzerinde yineleme ve yapı etiketlerini okuma

Yapı Alanlarını ve Etiketlerini İnceleme, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. 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.

StructField türü

reflect.StructField, bir yapının tek bir alanını açıklar: Name, Type, Tag, Index, Offset, Anonymous ve IsExported.

Alanlar üzerinde yineleme

Bir yapı türünün tüm alanları üzerinde döngü kurun:

t := reflect.TypeOf(struct{ ID int; Name string }{})
for i := 0; i < t.NumField(); i++ {
    f := t.Field(i)
    fmt.Println(f.Name, f.Type, f.IsExported())
}

Yapı etiketlerini okuma

Etiketlere StructField.Tag.Get("key") aracılığıyla erişilir:

type User struct {
    ID   int    `json:"id" db:"user_id"`
    Name string `json:"name,omitempty"`
}

f, _ := reflect.TypeOf(User{}).FieldByName("Name")
fmt.Println(f.Tag.Get("json")) // "name,omitempty"

Etiket seçeneklerini ayrıştırma

Etiketler virgülle ayrılmış seçenekler içerebilir. Bunları strings.Split ile ayrıştırın:

tag := f.Tag.Get("json") // "name,omitempty"
parts := strings.Split(tag, ",")
name := parts[0] // "name"
omitempty := len(parts) > 1 && parts[1] == "omitempty"

FieldByName ve FieldByIndex

Bir alanı adına veya dizinine göre arayın. FieldByName, yapıdaki ve gömülü yapılardaki dışa aktarılan alanları arar:

f, ok := reflect.TypeOf(User{}).FieldByName("Name")
if ok { fmt.Println(f.Tag.Get("json")) }

Gömülü yapı alanları

Gömülü yapılarda Anonymous true değerindedir. İç içe alanlara erişmek için Type.FieldByIndex([]int{0,1}) kullanın.

Dışa aktarılmamış alanlar

Dışa aktarılmamış (küçük harfle başlayan) alanlar türleri ve etiketleri için incelenebilir ancak değerleri yansıtma yoluyla okunamaz veya ayarlanamaz; bunun sonucunda bir panik oluşur.

Alan önbelleği oluşturma

Yapı etiketlerini her çağrıda ayrıştırmak maliyetlidir. Sonucu reflect.Type anahtarıyla bir sync.Map içinde önbelleğe alın:

var fieldCache sync.Map
func getFields(t reflect.Type) []fieldInfo {
    if v, ok := fieldCache.Load(t); ok { return v.([]fieldInfo) }
    fields := parseFields(t)
    fieldCache.Store(t, fields)
    return fields
}

Kullanım alanı: basit ORM

Bir INSERT sütun listesini dinamik olarak oluşturmak için "db" etiketine sahip tüm alanlar üzerinde dolaşın:

t := reflect.TypeOf(u)
v := reflect.ValueOf(u)
for i := 0; i < t.NumField(); i++ {
    col := t.Field(i).Tag.Get("db")
    val := v.Field(i).Interface()
    // build query...
}

Kullanım alanı: yapılandırma yükleyicisi

"env" etiketine sahip yapı alanları üzerinde dolaşın ve bunları ortam değişkenlerinden doldurun:

if env := f.Tag.Get("env"); env != "" {
    if val := os.Getenv(env); val != "" {
        v.Field(i).SetString(val)
    }
}

StructTag.Lookup

Tag.Lookup("key"), etiket değerini ve anahtarın mevcut olup olmadığını belirten bir boole değeri döndürür (mevcut olmayan anahtarlar için "" döndüren Get'in aksine).

val, ok := f.Tag.Lookup("json")
if !ok { /* no json tag */ }

Hızlı kontrol

Bir reflect.StructField değerinden "json" yapı etiketinin değerini nasıl okursunuz?

Özet: Yapı alanları ve etiketler

Ana noktalar:

  • Alan meta verileri için reflect.TypeOf → .NumField(), .Field(i)
  • Etiket değerlerini okumak için StructField.Tag.Get("key")
  • Tekrarlanan ayrıştırmayı önlemek için alan meta verilerini sync.Map içinde önbelleğe alın
  • Eksik etiket ile boş dize arasındaki fark önemli olduğunda Tag.Lookup kullanın

Sıkça Sorulan Sorular

“Yapı Alanlarını ve Etiketlerini İnceleme” dersi ücretsiz mi?

Evet — “Yapı Alanlarını ve Etiketlerini İnceleme” 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.

“Yapı Alanlarını ve Etiketlerini İnceleme” dersinde ne öğreneceğim?

Alanlar üzerinde yineleme ve yapı etiketlerini okuma 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 2. dersidir.

“Yapı Alanlarını ve Etiketlerini İnceleme” 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

  1. reflect.Type ve reflect.Value
  2. Yapı Alanlarını ve Etiketlerini İnceleme
  3. Dinamik İşlev Çağrıları
  4. Uygulamalı Yansıma: Serileştiriciler
← Go Academy Sayfasına Dön