go - golang - Elem Vs Indirect in the reflect package -



go - golang - Elem Vs Indirect in the reflect package -

from docs

func (v value) elem() value

elem returns value interface v contains or pointer v points to. panics if v's kind not interface or ptr. returns 0 value if v nil.

func indirect(v value) value

indirect returns value v points to. if v nil pointer, indirect returns 0 value. if v not pointer, indirect returns v.

so can safely assume following?

reflect.indirect(reflect.valueof(somex)) === reflect.valueof(somex).elem().

is indirect method convenience method right hand side of above?

if reflect.value pointer, v.elem() equivalent reflect.indirect(v). if not pointer, not equivalent:

if value interface reflect.indirect(v) homecoming same value, while v.elem() homecoming contained dynamic value. if value else, v.elem() panic.

the reflect.indirect helper intended cases want take either particular type, or pointer type. 1 illustration database/sql conversion routines: using reflect.indirect, can utilize same code paths handle various types , pointers types.

go

Comments

Popular posts from this blog

php - Android app custom user registration and login with cookie using facebook sdk -

c# - Create a Notification Object (Email or Page) At Run Time -- Dependency Injection or Factory -

Set Up Of Common Name Of SSL Certificate To Protect Plesk Panel -