這是簡短的測試: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。去反射
1 回答

慕的地10843
TA貢獻1785條經驗 獲得超8個贊
來自reflect.TypeOf文檔:
TypeOf 返回表示 i 的動態類型的反射類型。如果 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
- 1 回答
- 0 關注
- 149 瀏覽
添加回答
舉報
0/150
提交
取消