code: func renderer(w http.ResponseWriter, r *http.Request, v Renderer) error {
  	rv := reflect.ValueOf(v)
  	if rv.Kind() == reflect.Ptr {
  		rv = rv.Elem()
  	}
  
  	// We call it top-down.
  	if err := v.Render(w, r); err != nil {
  		return err
  	}
  
  	// We're done if the Renderer isn't a struct object
  	if rv.Kind() != reflect.Struct {
  		return nil
  	}
  
  	// For structs, we call Render on each field that implements Renderer
  	for i := 0; i < rv.NumField(); i++ {
  		f := rv.Field(i)
  		if f.Type().Implements(rendererType) {
  
  			if isNil(f) {
  				continue
  			}
  
  			fv := f.Interface().(Renderer)
  			if err := renderer(w, r, fv); err != nil {
  				return err
  			}
  
  		}
  	}
  
  	return nil
  }
docs: // Executed top-down