1 回答

TA貢獻1815條經驗 獲得超6個贊
很多事情,但基本上“它不是那樣工作的”。類型斷言中括號內的內容必須是類型,即類型名稱或類型文字。reflect.TypeOf(i)
不是其中之一,它是一個方法調用表達式。因此這是一個語法錯誤。reflect.TypeOf不“返回類型”(這在 Go 中實際上不是你可以做的事情),它返回一個reflect.Type,它是一個普通的 go 結構,包含有關類型的信息(即某種元類型)。
但它不起作用的更根本原因是因為它不能...... Go 需要知道變量在聲明時的類型是什么。它的類型要么在聲明中明確給出,要么從聲明或短賦值var
中的初始化值類型推斷出來。在編譯時類型是未知的是不可能的。Go 不允許您編寫產生未確定類型的表達式。var x = value
x := value
類型斷言的真正目的是獲取接口類型的值(它是一種“盒子”,可以保存多種類型的值,或者 for interface{}
,任何類型的值)并檢索特定具體類型的值. 斷言產生的值將具有斷言命名的類型,沒有其他類型。(在,ok
賦值的情況下,如果斷言失敗,變量將保持零值但仍然是正確的類型)。如果您可以將斷言寫入僅在運行時才知道的類型,那么整個事情就會崩潰,所以您不能編寫它——這是一個錯誤。
簡而言之,您不能使用反射來做到這一點。您可以使用反射來了解類型i
是什么,您可以了解該類型的名稱,您可以了解它的底層Kind是 Struct,您可以枚舉結構的字段并從中獲取值等等......所有這些是反射的合法用途。但它不能給你一個類型的變量MyStruct
——這樣做的方法是i.(MyStruct)
.
- 1 回答
- 0 關注
- 197 瀏覽
添加回答
舉報