這是簡短的測驗:
type Encoder interface {
Encode()
}
func main() {
encoderInterface1 := reflect.TypeOf(new(Encoder)).Elem()
var en Encoder
encoderInterface2 := reflect.TypeOf(en)
fmt.Println(encoderInterface1 == encoderInterface2)
}
輸出false。
為什么呢false?我期待它是true。
uj5u.com熱心網友回復:
從reflect.TypeOf檔案:
TypeOf 回傳表示 i 的動態型別的反射 Type。如果 i 是一個 nil 介面值,TypeOf 回傳 nil。
所以:
var en Encoder // nil interface value
encoderInterface2 := reflect.TypeOf(en) // <- nil
至于:
encoderInterface1 := reflect.TypeOf(new(Encoder)).Elem()
將其分為兩部分:
pi := reflect.TypeOf(new(Encoder)) // <- this is a pointer to an interface (so not nil)
encoderInterface1 := pi.Elem()
所以:
encoderInterface1 != encoderInterface2
因為:
encoderInterface1 != nil
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514596.html
標籤:去反射
