示例
var r io.Reader = os.Stdin // os.Stdin is of type *os.File which implements io.Reader
v := reflect.ValueOf(r) // r is interface wrapping *os.File value
fmt.Println(v.Type()) // *os.File
v2 := reflect.ValueOf(&r) // pointer passed, will be wrapped in interface{}
fmt.Println(v2.Type()) // *io.Reader
fmt.Println(v2.Elem().Type()) // navigate to pointed: io.Reader (interface type)
fmt.Println(v2.Elem().Elem().Type()) // 2nd Elem(): get concrete value in interface: *os.File
概括:
傳入是指針的話,像一種層級遞進關係,valueof.type獲取的是變量的表面類型,第一次elem.type獲取的是此變量的接口類型,再一次就是實際值或類型 ;
非指針傳入的話,則.type就是實際類型