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))
}

Playground


And, more simplified:

_, isTest := v.(Test)

Playground


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.

Share:
15,019
ollien
Author by

ollien

Updated on July 29, 2022

Comments

  • ollien
    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{}))
    }