CodeBlanks Logo Icon CodeBlanks

reflect.Type

Type ile tür bilgisi almayı öğrenirsin.

reflect.Type

reflect.TypeOf(v) bir reflect.Type döndürür. Name() türün adını, Kind() ise temel çeşidini verir.

type Kullanici struct{ Ad string }
t := reflect.TypeOf(Kullanici{})
fmt.Println(t.Name(), t.Kind())  // Kullanici struct

Ad senin verdiğin isimdir; Kind ise struct, int, slice, map gibi sabit bir listeden gelir.

Kind ile dallanma

Genel bir fonksiyon, gelen değerin çeşidine göre farklı davranabilir:

switch reflect.TypeOf(v).Kind() {
case reflect.Int:
    fmt.Println("tamsayı")
case reflect.Slice:
    fmt.Println("dilim")
}

Kind sabitleri reflect.Int, reflect.String, reflect.Struct gibi adlarla paket içinde tanımlıdır.

Uygulama Ad ve çeşit

type Urun struct{ Fiyat int } tanımla. main içinde t := reflect.TypeOf(Urun{}) al ve t.Name() ile t.Kind() değerlerini tek fmt.Println ile yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "reflect"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "reflect"
)

type Urun struct{ Fiyat int }

func main() {
    t := reflect.TypeOf(Urun{})
    fmt.Println(t.Name(), t.Kind())
}

Beklenen çıktı

Urun struct

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>type Yas int</code> için <code>reflect.TypeOf(Yas(5)).Kind()</code> ne döndürür?

  • int Doğru cevap
  • Yas
  • struct
  • main.Yas

Açıklama: Kind temel çeşidi verir; Yas tanımlı bir tür olsa da altında int vardır. Name() ise "Yas" döndürürdü.

2 Çeşidi al

Soru
t := reflect.TypeOf([]int{1, 2})
fmt.Println(t.____())  // slice
Cevap
t := reflect.TypeOf([]int{1, 2})
fmt.Println(t.Kind())  // slice

Açıklama: Kind() türün temel çeşidini verir; []int için slice.

3 Değer ve çeşidi

Kavram Anlamı
42 int
"Go" string
[]int{1} slice
map[string]int{} map

İleri seviye bölümündeki tüm dersler