Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing in a type variable into function

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?

like image 994
hlin117 Avatar asked Nov 30 '16 18:11

hlin117


1 Answers

@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.

like image 83
oharlem Avatar answered Oct 12 '22 23:10

oharlem