亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 reflect.TypeOf(new(Encoder)).Elem() !

為什么 reflect.TypeOf(new(Encoder)).Elem() !

Go
三國紛爭 2023-02-28 21:14:11
這是簡短的測試: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


查看完整回答
反對 回復 2023-02-28
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號