Dynamic Type Casting in Go
In Go, assigning the value of an interface to a typed variable requires knowledge of the variable's type. However, what if the type is unknown beforehand?
The conventional casting method involves a hard-coded type cast, such as:
var intAge = interfaceAge.(int)
To address the scenario where the type is unknown, some developers may propose the following:
var x = getType() var someTypeAge = interfaceAge.(x)
However, this is not feasible in Go. The language is statically typed, meaning variable types are determined at compile time.
Alternative Approach: Type Switching
To dynamically determine the type of an interface{}, type switching can be employed:
var t interface{} t = functionOfSomeType() switch t := t.(type) { default: fmt.Printf("unexpected type %T", t) // %T prints the type of t case bool: fmt.Printf("boolean %t\n", t) // t has type bool case int: fmt.Printf("integer %d\n", t) // t has type int case *bool: fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool case *int: fmt.Printf("pointer to integer %d\n", *t) // t has type *int }
This approach allows for the dynamic identification of the type of an interface{} and subsequent type-specific handling.
The above is the detailed content of How Can I Perform Dynamic Type Casting in Go with Unknown Types?. For more information, please follow other related articles on the PHP Chinese website!