A Label is an entity that may be pointed to by a pointer, map, channel, 'func', slice or interface.

Labels include:

- functions
- globals
- tagged objects, representing interfaces and reflect.Values
- arrays created by conversions (e.g. []byte("foo"), []byte(s))
- stack- and heap-allocated variables (including composite literals)
- channels, maps and arrays created by make()
- intrinsic or reflective operations that allocate (e.g. append, reflect.New)
- intrinsic objects, e.g. the initial array behind os.Args.
- and their subelements, e.g. "alloc.y[*].z"

Labels are so varied that they defy good generalizations; some have no value, no callgraph node, or no position. Many objects have types that are inexpressible in Go: maps, channels, functions, tagged objects.

At most one of Value() or ReflectType() may return non-nil.