来自文档
func (v Value) Elem() Value
Elem返回接口v包含的值或指针v指向的值。 如果v的种类不是Interface或Ptr,它会感到恐慌。如果v为零,它将返回零值。
func Indirect(v Value) Value
间接返回v指向的值。 如果v是nil指针,则Indirect返回零值。如果v不是指针,则Indirect返回v。
那么我可以安全地假设以下情况吗?
reflect.Indirect(reflect.ValueOf(someX)) === reflect.ValueOf(someX).Elem().
间接方法仅仅是上述方法的一种便捷方法吗?
如果a reflect.Value是指针,则v.Elem()等效于reflect.Indirect(v)。如果不是指针,则它们不是等效的:
reflect.Value
v.Elem()
reflect.Indirect(v)
该reflect.Indirect助手用于需要接受特定类型或指向该类型的指针的情况。一个示例是database/sql转换例程:通过使用reflect.Indirect,它可以使用相同的代码路径来处理各种类型和指向这些类型的指针。
reflect.Indirect
database/sql