reflect.Type
- Go kursu
- İleri seviye
- Ders 2/68
- 4 dk
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 structAd 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
package main
import (
"fmt"
"reflect"
)
func main() {
// buraya yaz
}Örnek çözüm
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
t := reflect.TypeOf([]int{1, 2})
fmt.Println(t.____()) // slice
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 |