basic
types and interfaces
interface 的底層結(jié)構(gòu):
- 具體的類型value(the concrete value):地址指向值信息
- 類型的描述( type descriptor/iTable):包含類型信息與方法集
- 所有的類型都實現(xiàn)了interface{}空接口,所有的賦值都可以被interface{}接受
圖示

image.png

image.png
三大法則
概念說明:
- interface value:變量
- reflection object: reflect.Type,reflect.Value
- 轉(zhuǎn)換關系: reflect.Value.Type() --> reflect.Type
三大法則:
- 反射可以從interface value 獲取 reflection object。白話:未知類型變量 --> reflection.Type/reflection.Value。相關表現(xiàn)形式
reflect.TypeOf(varFloat64)reflect.ValueOf(varFloat64)reflect.ValueOf(varFloat64).Kind() == reflect.Float64
- 反射可以從 reflection object 獲取 interface value。白話: reflection.Value --> interface{} --> type assertion(varInterface.(float64)) --> 想要的類型。相關例子:
- 獲取原值:
v.Interface().(float64)
- 獲取原值:
- 要修改一個reflection object,該類型必須能被改變(settable):
-
reflect.ValueOf(&varFloat64).Elem():只能原值為interface和指針類型,因為如果不是這兩種類型,傳遞的都是復制的值。 -
reflect.Type.Elem() 得到 reflect.Type: 獲取復雜類型(Array, Chan, Map, Ptr, or Slice)的元素的類型。不是Array, Chan, Map, Ptr, or Slice,會panic。
-