Commit 97f3a80d authored by Rob Pike's avatar Rob Pike

reflect: add InterfaceValue.Get to enable setting of an interface

value (through unsafe means) without having a reflect.Type
of type *interface{} (pointer to interface).  This is needed to make
gob able to handle interface values by a method analogous to
the way it handles maps.

R=rsc
CC=golang-dev
https://golang.org/cl/2597041
parent 321f0c7f
...@@ -843,11 +843,17 @@ type InterfaceValue struct { ...@@ -843,11 +843,17 @@ type InterfaceValue struct {
value "interface" value "interface"
} }
// No Get because v.Interface() is available.
// IsNil returns whether v is a nil interface value. // IsNil returns whether v is a nil interface value.
func (v *InterfaceValue) IsNil() bool { return v.Interface() == nil } func (v *InterfaceValue) IsNil() bool { return v.Interface() == nil }
// No single uinptr Get because v.Interface() is available.
// Get returns the two words that represent an interface in the runtime.
// Those words are useful only when playing unsafe games.
func (v *InterfaceValue) Get() [2]uintptr {
return *(*[2]uintptr)(v.addr)
}
// Elem returns the concrete value stored in the interface value v. // Elem returns the concrete value stored in the interface value v.
func (v *InterfaceValue) Elem() Value { return NewValue(v.Interface()) } func (v *InterfaceValue) Elem() Value { return NewValue(v.Interface()) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment