web-dev-qa-db-ja.com

型変数を関数に渡す

型を関数に渡すことにより、型アサーションを実現しようとしています。言い換えれば、私はこのようなことを達成しようとしています:

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

myfunctionで型アサーションを正常に実行するために、myfunctionで使用する必要がある適切な関数宣言は何ですか?

9
hlin117

@ hlin117、

ねえ、あなたの質問を正しく理解し、タイプを比較する必要があるなら、あなたができることはここにあります:

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)

}

アプローチは、照合するタイプのサンプルを使用することです。

5
oharlem