mirror of https://github.com/golang/go.git
reflect: document reflect.TypeOf((*Foo)(nil)).Elem() idiom
See also golang-dev discussion: https://groups.google.com/d/msg/golang-dev/Nk9gnTINlTg/SV8rBt-2__kJ Change-Id: I49edd98d73400c1757b6085dec86752de569c01a Reviewed-on: https://go-review.googlesource.com/8923 Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
eba38fd780
commit
eced964c2d
|
|
@ -6,6 +6,8 @@ package reflect_test
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
|
|
@ -64,3 +66,16 @@ func ExampleStructTag() {
|
|||
// Output:
|
||||
// blue gopher
|
||||
}
|
||||
|
||||
func ExampleTypeOf() {
|
||||
// As interface types are only used for static typing, a
|
||||
// common idiom to find the reflection Type for an interface
|
||||
// type Foo is to use a *Foo value.
|
||||
writerType := reflect.TypeOf((*io.Writer)(nil)).Elem()
|
||||
|
||||
fileType := reflect.TypeOf((*os.File)(nil))
|
||||
fmt.Println(fileType.Implements(writerType))
|
||||
|
||||
// Output:
|
||||
// true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1009,8 +1009,8 @@ func (t *structType) FieldByName(name string) (f StructField, present bool) {
|
|||
return t.FieldByNameFunc(func(s string) bool { return s == name })
|
||||
}
|
||||
|
||||
// TypeOf returns the reflection Type of the value in the interface{}.
|
||||
// TypeOf(nil) returns nil.
|
||||
// TypeOf returns the reflection Type that represents the dynamic type of i.
|
||||
// If i is a nil interface value, TypeOf returns nil.
|
||||
func TypeOf(i interface{}) Type {
|
||||
eface := *(*emptyInterface)(unsafe.Pointer(&i))
|
||||
return toType(eface.typ)
|
||||
|
|
|
|||
Loading…
Reference in New Issue