Middle
Kako proveriti tip promenljive u Go tokom izvršavanja?
sobes.tech АИ
Одговор од АИ
U okruženju za izvršavanje u Go-u, promenljivu možete proveriti na više načina:
-
Korišćenjem type assertion: Pogodno za proveru konkretnog tipa u interfejs promenljivoj.
package main import "fmt" func main() { var i interface{} = "hello" s, ok := i.(string) // Pokušaj konverzije i u tip string if ok { fmt.Printf("Promenljiva i ima tip string: %s\n", s) } else { fmt.Println("Promenljiva i nema tip string") } } -
Korišćenjem type switch: Pogodno za proveru više mogućih tipova.
package main import "fmt" func main() { var t interface{} switch tt := t.(type) { // tt će imati konkretan tip case int: fmt.Printf("Promenljiva ima tip int: %d\n", tt) case string: fmt.Printf("Promenljiva ima tip string: %s\n", tt) case bool: fmt.Printf("Promenljiva ima tip bool: %t\n", tt) case nil: fmt.Println("Promenljiva ima vrednost nil") default: fmt.Printf("Nepoznat tip: %T\n", tt) // tt će imati tip interface{} } t = 123 switch tt := t.(type) { case int: fmt.Printf("Promenljiva ima tip int: %d\n", tt) case string: fmt.Printf("Promenljiva ima tip string: %s\n", tt) case bool: fmt.Printf("Promenljiva ima tip bool: %t\n", tt) case nil: fmt.Println("Promenljiva ima vrednost nil") default: fmt.Printf("Nepoznat tip: %T\n", tt) } } -
Korišćenjem paketa
reflect: Omogućava dobijanje informacija o tipu i vrednosti promenljive u toku izvršavanja. Koristi se kada tipovi nisu poznati tokom kompilacije ili za složenije provere.package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) // Dobijanje vrednosti refleksije fmt.Println("Tip:", v.Type()) // Ispisuje "Tip: float64" fmt.Println("Kategorija:", v.Kind()) // Ispisuje "Kategorija: float64" y := "hello" vv := reflect.ValueOf(y) fmt.Println("Tip:", vv.Type()) // Ispisuje "Tip: string" fmt.Println("Kategorija:", vv.Kind()) // Ispisuje "Kategorija: string" z := []int{1, 2, 3} vvv := reflect.ValueOf(z) fmt.Println("Tip:", vvv.Type()) // Ispisuje "Tip: []int" fmt.Println("Kategorija:", vvv.Kind()) // Ispisuje "Kategorija: slice" }
Paket reflect je moćniji, ali i složeniji za korišćenje. Type assertion i type switch su preporučeni za jednostavne provere tipova interfejs promenljivih, jer su sigurniji i tip-oreijentirani.