Passing in a type variable into function

hlin117 picture hlin117 · Nov 30, 2016 · Viewed 14.1k times · Source

I'm trying to achieve a type assertion by passing in a type into a function. In other words, I'm trying to achieve something like this:

// Note that this is pseudocode, because Type isn't the valid thing to use here
func myfunction(mystring string, mytype Type) {
    ...

    someInterface := translate(mystring)
    object, ok := someInterface.(mytype)

    ...  // Do other stuff
}

func main() {
    // What I want the function to be like
    myfunction("hello world", map[string]string)
}

What's the proper function declaration I need to use in myfunction, to successfully perform the type assertion in myfunction?

Answer

oharlem picture oharlem · Nov 30, 2016

@hlin117,

Hey, if I understood your question correctly and you need to compare the types, here's what you can do:

package main

import (
    "fmt"
    "reflect"
)

func myfunction(v interface{}, mytype interface{}) bool {
    return reflect.TypeOf(v) == reflect.TypeOf(mytype)
}

func main() {

    assertNoMatch := myfunction("hello world", map[string]string{})

    fmt.Printf("%+v\n", assertNoMatch)

    assertMatch := myfunction("hello world", "stringSample")

    fmt.Printf("%+v\n", assertMatch)

}

The approach is to use a sample of the type you'd like to match.