Check type of struct in Go
15,019
Solution 1
Type assertions:
package main
import "fmt"
type Test struct {
foo int
}
func isTest(t interface{}) bool {
switch t.(type) {
case Test:
return true
default:
return false
}
}
func main() {
t := Test{5}
fmt.Println(isTest(t))
}
And, more simplified:
_, isTest := v.(Test)
You can refer to the language specification for a technical explanation.
Solution 2
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.
Author by
ollien
Updated on July 29, 2022Comments
-
ollien almost 2 years
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{})) }