3 回答
TA贡献1829条经验 获得超9个赞
你可以做一个类型断言,看看它是否失败:
event, err := New(0)
if err != nil {
t.Error(err)
}
_, ok := event.(Like)
if !ok {
t.Error("Assertion error")
}
TA贡献1863条经验 获得超2个赞
该TypeOf()
方法返回一个类型的对象,您可以使用该方法Type
以字符串形式获取该类型的名称。Name()
我没有对此进行测试,但这样的事情可能会奏效:
if reflect.TypeOf(event).Name() != "Like" {
TA贡献1827条经验 获得超8个赞
迟到的答案,但这很好用
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
- 3 回答
- 0 关注
- 348 浏览
添加回答
举报