我很好奇IsValid
函數,因爲在我使用這個函數的時候,它永遠不會返回false
。那麼它何時會返回一個負面結果?什麼時候reflect.IsValid返回false?
3
A
回答
6
由於DOC reflect.IsValid()
說:
如果v是零值返回FALSE。 [...] 大多數函數和方法永遠不會返回無效值。如果有的話,其文件明確說明條件。
Value.IsValid()
應該報告reflect.Value
本身是否有效,而不是其包裝的值(如果有的話)。
下面的所有例子打印false
。你可以在Go Playground上試試。
最簡單的例子是在主叫IsValid()
的reflect.Value
的zero value(這是一個struct
):
fmt.Println(reflect.Value{}.IsValid())
的第二簡單的例子是通過當nil
到reflect.ValueOf()
:
fmt.Println(reflect.ValueOf(nil).IsValid())
又如:以指針nil
開始,在這種情況下不存在「指向」值,指針指向任何地方。試圖獲取使用Value.Elem()
結果的尖銳值的reflect.Value
在零reflect.Value
其IsValid()
方法將返回false
:
var i *int
v := reflect.ValueOf(i)
v2 := v.Elem()
fmt.Println(v2.IsValid())
或者在同一行:
fmt.Println(reflect.ValueOf((*int)(nil)).Elem().IsValid())
同樣的事情,如果你在打電話Value.Indirect()
以上reflect.Value()
:
fmt.Println(reflect.Indirect(v).IsValid())
或嘗試使用Value.FieldByName()
度日名不存在的結構域:
s := struct{}{}
fmt.Println(reflect.ValueOf(s).FieldByName("").IsValid())
或試圖使用Value.MethodByName()
度日名不存在的方法:
fmt.Println(reflect.ValueOf(s).MethodByName("").IsValid())
或者試圖獲得價值使用Value.MapIndex()
地圖通過不存在的關鍵:
m := map[int]int{}
fmt.Println(reflect.ValueOf(m).MapIndex(reflect.ValueOf(3)).IsValid())
這樣的例子不勝枚舉...
相關問題
- 1. 什麼時候php json_decode返回false?
- 2. HttpServletRequest.getSession(false):它什麼時候返回null?
- 3. 什麼時候可以ManualResetEvent.Set()返回false?
- 4. 什麼時候instanceof返回FALSE?
- 5. 返回True/False - 什麼時候使用它只是返回
- 6. 什麼時候empty()返回false並且$ var ==''返回true?
- 7. 什麼時候和爲什麼List remove(Object object)返回false
- 8. 什麼時候返回null?
- 9. 什麼時候ssh2_scp_send()返回?
- 10. 什麼時候可以BlockingCollection <T> TryTake()返回false?
- 11. 在PHP中,什麼時候變量賦值返回false?
- 12. 什麼時候你返回一個類,你什麼時候返回一個HttpResponseMessage?
- 13. 什麼時候返回空集合,什麼時候不是?
- 14. QTreeWidget :: currentItem什麼時候沒有選擇什麼時候返回?
- 15. 什麼時候ref($ variable)返回'IO'?
- 16. 什麼時候WASAPI GetNextPacketSize返回0
- 17. 什麼時候Angular4 HttpClient.get()返回undefined?
- 18. 什麼時候ServletRequest.getRemoteAddr返回IPv6
- 19. 什麼時候ItemContainerGenerator.Status枚舉返回GeneratorStatus.Error?
- 20. 什麼時候EndResumeBookmark會返回BookmarkResumptionResult.NotReady?
- 21. 什麼時候findViewById()返回null?
- 22. 什麼時候的getInputStream()返回null?
- 23. 什麼時候socket.recv(recv_size)返回?
- 24. 什麼時候send()會返回EWOULDBLOCK?
- 25. 什麼時候getClass()。getName()返回void?
- 26. 什麼時候ShowDialog()返回null?
- 27. EndReceive什麼時候返回零字節
- 28. 什麼時候可以mktime返回-1?
- 29. 保留什麼時候返回?
- 30. API在什麼時候返回ERROR_MUI_FILE_NOT_LOADED?