Middle
Ako skontrolovať typ premennej v Go počas behu?
sobes.tech AI
Odpoveď od AI
V prostredí behu v Go môžete overiť premennú niekoľkými spôsobmi:
-
Použitím type assertion: Vhodné na overenie konkrétneho typu u rozhrania.
package main import "fmt" func main() { var i interface{} = "hello" s, ok := i.(string) // Pokus o konverziu i na typ string if ok { fmt.Printf("Premenná i má typ string: %s\n", s) } else { fmt.Println("Premenná i nemá typ string") } } -
Použitím type switch: Vhodné na overenie viacerých možných typov.
package main import "fmt" func main() { var t interface{} switch tt := t.(type) { // tt bude mať konkrétny typ case int: fmt.Printf("Premenná má typ int: %d\n", tt) case string: fmt.Printf("Premenná má typ string: %s\n", tt) case bool: fmt.Printf("Premenná má typ bool: %t\n", tt) case nil: fmt.Println("Premenná má hodnotu nil") default: fmt.Printf("Neznámy typ: %T\n", tt) // tt bude mať typ interface{} } t = 123 switch tt := t.(type) { case int: fmt.Printf("Premenná má typ int: %d\n", tt) case string: fmt.Printf("Premenná má typ string: %s\n", tt) case bool: fmt.Printf("Premenná má typ bool: %t\n", tt) case nil: fmt.Println("Premenná má hodnotu nil") default: fmt.Printf("Neznámy typ: %T\n", tt) } } -
Použitím balíka
reflect: Umožňuje získať informácie o type a hodnote premennej za behu. Používa sa, keď typy nie sú známe pri kompilácii alebo pre zložitejšie kontroly.package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) // Získanie hodnoty reflexie fmt.Println("Typ:", v.Type()) // Vypíše "Typ: float64" fmt.Println("Kategória:", v.Kind()) // Vypíše "Kategória: float64" y := "hello" vv := reflect.ValueOf(y) fmt.Println("Typ:", vv.Type()) // Vypíše "Typ: string" fmt.Println("Kategória:", vv.Kind()) // Vypíše "Kategória: string" z := []int{1, 2, 3} vvv := reflect.ValueOf(z) fmt.Println("Typ:", vvv.Type()) // Vypíše "Typ: []int" fmt.Println("Kategória:", vvv.Kind()) // Vypíše "Kategória: slice" }
Balík reflect je mocnejší, ale aj zložitejší na použitie. Type assertion a type switch sú vhodnejšie pre jednoduché kontroly typov rozhraní, pretože sú bezpečnejšie a typovo orientované.