本文主要是介绍go reflect Elem() 深入学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
示例
var r io.Reader = os.Stdin // os.Stdin is of type *os.File which implements io.Readerv := reflect.ValueOf(r) // r is interface wrapping *os.File value
fmt.Println(v.Type()) // *os.Filev2 := 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就是实际类型
这篇关于go reflect Elem() 深入学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!