3 回答

TA貢獻1829條經驗 獲得超9個贊
你可以做一個類型斷言,看看它是否失?。?/p>
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 關注
- 399 瀏覽
添加回答
舉報