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

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

反映了什么。類型為(*錯誤)(無))。埃勒姆()'的意思?

反映了什么。類型為(*錯誤)(無))。埃勒姆()'的意思?

Go
慕容森 2022-09-26 15:30:45
func (s *service) registerMethods() {    s.method = make(map[string]*methodType)    for i := 0; i < s.typ.NumMethod(); i++ {        method := s.typ.Method(i)        mType := method.Type        if mType.NumIn() != 3 || mType.NumOut() != 1 {            continue        }        if mType.Out(0) != reflect.TypeOf((*error)(nil)).Elem() {            continue        }        argType, replyType := mType.In(1), mType.In(2)        if !isExportedOrBuiltinType(argType) || !isExportedOrBuiltinType(replyType) {            continue        }        s.method[method.Name] = &methodType{            method:    method,            ArgType:   argType,            ReplyType: replyType,        }        log.Printf("rpc server: register %s.%s\n", s.name, method.Name)    }}此代碼中的含義是什么?我知道正在嘗試確定該方法的返回類型是否是錯誤的而不是錯誤。但對我來說,會憑直覺做同樣的事情,但不幸的是沒有。當我嘗試編譯此代碼時,它說類型錯誤不是表達式,它在此上下文中意味著什么?不接受某種類型的參數?我發現 (*錯誤)(無) 等效于 *錯誤 = 無。我對上述上下文中的這種表達感到困惑。reflect.TypeOf((*error)(nil)).Elem()if mType.Out(0) != reflect.TypeOf((*error)(nil)).Elem()reflect.TypeOf((error)(nil))reflect.Typeof()
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

斷續器; 是用于獲取反射的表達式。接口類型的類型描述符。不能將使用用于相同目的(請閱讀下面的原因)。reflect.TypeOf((*error)(nil)).Elem()errorreflect.TypeOf(error(nil))


reflect.TypeOf((*error)(nil)).Elem()通過使用類型的類型化指針值來實現其目標,將其傳遞給 以獲取類型的描述符,并使用 獲取元素(基)類型的類型描述符,即 。nil*errorreflect.TypeOf()reflect.Type*errorType.Elem()*errorerror

反映。類型Of() 需要一個值:interface{}

func TypeOf(i interface{}) Type

基本上,無論你傳遞給什么值,如果它還不是接口值,它將被隱式地包裝在。如果傳遞的值已經是接口值,則存儲在其中的具體值將作為 傳遞為 。reflect.TypeOf()interface{}interface{}

因此,如果您嘗試將值傳遞給它,因為 是接口類型,則存儲在其中的具體值將被“重新打包”為值。接口類型錯誤將不會被保留/轉移!errorerrorinterface{}

如果傳遞一個類型的值,例如,由于接口值本身是 ,它不包含具體的值和類型,因此將傳遞一個值,這將導致返回。引用自:nilerrorerror(nil)nilnilinterface{}nilreflect.Typereflect.TypeOf()

類型Of 返回表示 i 的動態類型的反射類型,如果 i 是 nil 接口值,則類型Of 返回 nil。

如果傳遞類型的值(可能是指針),則它不是接口值,而是指針值(指向接口的指針)。因此,它將包裝在一個值中,并且存儲在其中的具體值將是類型 。使用,您可以訪問指向的類型,即 。*errornilinterface{}*errorType.Elem()error

這是使用指向接口的指針有意義的罕見情況之一,實際上是不可避免的。

查看相關問題:

獲取反射?;诨愋偷念愋?/a>

反射有什么區別。ValueOf() 和 Value.Elem() 在 go?

隱藏零值,理解為什么戈朗在這里失敗


查看完整回答
反對 回復 2022-09-26
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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