Middle
Kā pārbaudīt mainīgā tipu Go valodā izpildes laikā?
sobes.tech AI
Atbilde no AI
Runas vidē ir Go izpildes laikā var pārbaudīt mainīgo vairākos veidos:
-
Izmantojot type assertion: Piemērots konkrēta tipa pārbaude interfeisa mainīgajā.
package main import "fmt" func main() { var i interface{} = "hello" s, ok := i.(string) // mēģinājums pārveidot i uz string tipu if ok { fmt.Printf("Mainīgais i ir string tips: %s\n", s) } else { fmt.Println("Mainīgais i nav string tips") } } -
Izmantojot type switch: Piemērots vairāku iespējamā tipu pārbaudei.
package main import "fmt" func main() { var t interface{} switch tt := t.(type) { // tt būs konkrēts tips case int: fmt.Printf("Mainīgais ir int tips: %d\n", tt) case string: fmt.Printf("Mainīgais ir string tips: %s\n", tt) case bool: fmt.Printf("Mainīgais ir bool tips: %t\n", tt) case nil: fmt.Println("Mainīgais ir nil vērtība") default: fmt.Printf("Nezināms tips: %T\n", tt) // tt būs interface{} tips } t = 123 switch tt := t.(type) { case int: fmt.Printf("Mainīgais ir int tips: %d\n", tt) case string: fmt.Printf("Mainīgais ir string tips: %s\n", tt) case bool: fmt.Printf("Mainīgais ir bool tips: %t\n", tt) case nil: fmt.Println("Mainīgais ir nil vērtība") default: fmt.Printf("Nezināms tips: %T\n", tt) } } -
Izmantojot
reflectpaketi: Tas ļauj iegūt informāciju par mainīgā tipu un vērtību izpildes laikā. To izmanto, ja tipi nav zināmi kompilācijas laikā vai nepieciešamas sarežģītākas pārbaudes.package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) // iegūt refleksijas vērtību fmt.Println("Tips:", v.Type()) // Izvadīs "Tips: float64" fmt.Println("Kategorija:", v.Kind()) // Izvadīs "Kategorija: float64" y := "hello" vv := reflect.ValueOf(y) fmt.Println("Tips:", vv.Type()) // Izvadīs "Tips: string" fmt.Println("Kategorija:", vv.Kind()) // Izvadīs "Kategorija: string" z := []int{1, 2, 3} vvv := reflect.ValueOf(z) fmt.Println("Tips:", vvv.Type()) // Izvadīs "Tips: []int" fmt.Println("Kategorija:", vvv.Kind()) // Izvadīs "Kategorija: slice" }
reflect pakete ir spēcīgāks, bet arī sarežģītāks lietošanā. Type assertion un type switch ir piemērotāki vienkāršām tipu pārbaudēm interfeisa mainīgajiem, jo tie ir drošāki un tipu orientēti.