'Check type of struct in Go
I'm trying to check the type of a struct in Go. This was the best way I could come up with. Is there a better way to do it, preferably without initializing a struct?
package main
import (
"fmt"
"reflect"
)
type Test struct{
foo int
}
func main() {
t := Test{5}
fmt.Println(reflect.TypeOf(t) == reflect.TypeOf(Test{}))
}
Solution 1:[1]
You may pass a "typed" nil
pointer value to reflect.TypeOf()
, and call Type.Elem()
to get the type of the pointed value. This does not allocate or initialize a value of the type (in question), as only a nil
pointer value is used:
fmt.Println(reflect.TypeOf(t) == reflect.TypeOf((*Test)(nil)).Elem())
Try it on the Go Playground.
P.S. This is an exact duplicate, but can't find the original.
Solution 2:[2]
You can simply assign t to an empty interface variable and check its type
and you don't need to necessarily write a function to check this out.
var i interface{} = t
v, ok := i.(Test)
//v = concrete value of Test struct
//ok = is (t) a type of the Test struct?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | icza |
Solution 2 | Seyed Mostafa SeyedAshoor |