Passing in a type variable into function

放肆的年华 提交于 2019-12-01 14:46:22

问题


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?


回答1:


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



来源:https://stackoverflow.com/questions/40895901/passing-in-a-type-variable-into-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!