Middle
Go-da işləmə zamanı dəyişənin növünü necə yoxlamaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da, icra zamanı dəyişənin tipi müxtəlif üsullarla yoxlana bilər:
-
Tip assertion istifadə edərək: Bu, interfeys dəyişənində müəyyən bir tipi yoxlamaq üçün uyğundur.
package main import "fmt" func main() { var i interface{} = "salam" s, ok := i.(string) // i-ni string tipinə çevirməyə cəhd if ok { fmt.Printf("Dəyişən i-nin tipi stringdir: %s\n", s) } else { fmt.Println("Dəyişən i-nin tipi string deyil") } } -
Tip switch istifadə edərək: Bu, interfeys dəyişənində bir neçə mümkün tipi yoxlamaq üçün uyğundur.
package main import "fmt" func main() { var t interface{} switch tt := t.(type) { // tt, konkret bir tipe sahib olacaq case int: fmt.Printf("Dəyişən int tipindədir: %d\n", tt) case string: fmt.Printf("Dəyişən string tipindədir: %s\n", tt) case bool: fmt.Printf("Dəyişən bool tipindədir: %t\n", tt) case nil: fmt.Println("Dəyişənin dəyəri nil") default: fmt.Printf("Naməlum tip: %T\n", tt) // tt, interface{} tipində olacaq } t = 123 switch tt := t.(type) { case int: fmt.Printf("Dəyişən int tipindədir: %d\n", tt) case string: fmt.Printf("Dəyişən string tipindədir: %s\n", tt) case bool: fmt.Printf("Dəyişən bool tipindədir: %t\n", tt) case nil: fmt.Println("Dəyişənin dəyəri nil") default: fmt.Printf("Naməlum tip: %T\n", tt) } } -
reflect paketindən istifadə: Bu, dəyişənin tipi və dəyəri haqqında məlumat almağa imkan verir. Bu, tiplər tərtib zamanı məlum deyilsə və ya daha mürəkkəb yoxlamalar üçün istifadə olunur.
package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) // Refleksiya dəyərini əldə et fmt.Println("Tip:", v.Type()) // "Tip: float64" göstərir fmt.Println("Kateqoriya:", v.Kind()) // "Kateqoriya: float64" göstərir y := "salam" vv := reflect.ValueOf(y) fmt.Println("Tip:", vv.Type()) // "Tip: string" göstərir fmt.Println("Kateqoriya:", vv.Kind()) // "Kateqoriya: string" göstərir z := []int{1, 2, 3} vvv := reflect.ValueOf(z) fmt.Println("Tip:", vvv.Type()) // "Tip: []int" göstərir fmt.Println("Kateqoriya:", vvv.Kind()) // "Kateqoriya: slice" göstərir }
reflect paketi daha güclüdür, amma istifadə üçün daha mürəkkəbdir. Tip assertion və tip switch, sadə interfeys dəyişənlərinin tip yoxlamaları üçün üstünlük təşkil edir, çünki onlar daha təhlükəsiz və tiplərə yönəlib.