code: func (finfo *fieldInfo) value(v reflect.Value) reflect.Value {
  	for i, x := range finfo.idx {
  		if i > 0 {
  			t := v.Type()
  			if t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {
  				if v.IsNil() {
  					v.Set(reflect.New(v.Type().Elem()))
  				}
  				v = v.Elem()
  			}
  		}
  		v = v.Field(x)
  	}
  	return v
  }
docs: // value returns v's field value corresponding to finfo.
  // It's equivalent to v.FieldByIndex(finfo.idx), but initializes
  // and dereferences pointers as necessary.