後期答えを、これは細かい
package main
import (
"fmt"
"reflect"
)
type SomeStruct1 struct{}
type SomeStruct2 struct{}
func IsInstanceOf(objectPtr, typePtr interface{}) bool {
return reflect.TypeOf(objectPtr) == reflect.TypeOf(typePtr)
}
func main() {
//sample variables
someString := "Some String"
someFloat := float32(2.4)
someStruct1 := SomeStruct1{}
someStruct2 := SomeStruct2{}
someStruct1Ptr := &SomeStruct1{}
// primitive string
fmt.Println("string <-> *string \t\t", IsInstanceOf(someString, (*string)(nil))) //false
fmt.Println("*string <-> *string \t\t", IsInstanceOf(&someString, (*string)(nil))) //true
// primitive float32
fmt.Println("float32 <-> *float32 \t\t", IsInstanceOf(someFloat, (*float32)(nil))) //false
fmt.Println("*float32 <-> *float32 \t\t", IsInstanceOf(&someFloat, (*float32)(nil))) //true
// structure
fmt.Println("SomeStruct1 <-> *SomeStruct1 \t", IsInstanceOf(someStruct1, (*SomeStruct1)(nil))) //false
fmt.Println("*SomeStruct1 <-> *SomeStruct1 \t", IsInstanceOf(&someStruct1, (*SomeStruct1)(nil))) //true
fmt.Println("*SomeStruct2 <-> *SomeStruct1 \t", IsInstanceOf(&someStruct2, (*SomeStruct1)(nil))) //false
fmt.Println("*SomeStruct1 <-> *SomeStruct1 \t", IsInstanceOf(someStruct1Ptr, (*SomeStruct1)(nil))) //true
}
遊び場が(オンラインそれを実行)作品:https://play.golang.org/p/tcQqdzUGMlL
はですこれを抽象化する方法はありますか?関数型のように "型"を渡すことは可能ですか?私はいくつかのint型の入力を与えて、いくつかの型でそれをテストしたいと思います。 –
@bigdestroyerには、このようにしたい理由がありますか?タイプチェックにその場所がないと言っているわけではありませんが、あなたが実際にここでやりたいことのようには思えません。あなたがしたいことは、インターフェイスに関連するゲッターを持つ型を示す、構造体上に非記入済みの属性を持つことだと思われます。 –
さて、値0から 'Like'のインスタンスが作成されたことをテストしたいと思います。値1から、「後続」のインスタンスが作成され、以下同様である。それぞれは 'Event'インタフェースを実装する別の型です。私はそのタイプを示すフィールドを必要とせず、単に "ファクトリ"機能をテストします。どう思いますか?あなたは私の元の質問を解決したので、私はBTWを受け入れます。 –