func EncodeToString(dst interface{}) (string, error) {
	return EncodeToStringWith(dst, defaultDelimiter, defaultEscape, defaultKeepZeros)
}
EncodeToString encodes dst as a form and returns it as a string.
package form
import (
	"encoding"
	"errors"
	"fmt"
	"io"
	"net/url"
	"reflect"
	"strconv"
	"strings"
	"time"
)
func NewEncoder(w io.Writer) *Encoder {
	return &Encoder{w, defaultDelimiter, defaultEscape, false}
}
type Encoder struct {
	w io.Writer
	d rune
	e rune
	z bool
}
func (e *Encoder) DelimitWith(r rune) *Encoder {
	e.d = r
	return e
}
func (e *Encoder) EscapeWith(r rune) *Encoder {
	e.e = r
	return e
}
func (e *Encoder) KeepZeros(z bool) *Encoder {
	e.z = z
	return e
}
func (e Encoder) Encode(dst interface{}) error {
	v := reflect.ValueOf(dst)
	n, err := encodeToNode(v, e.z)
	if err != nil {
		return err
	}
	s := n.values(e.d, e.e).Encode()
	l, err := io.WriteString(e.w, s)
	switch {
	case err != nil:
		return err
	case l != len(s):
		return errors.New("could not write data completely")
	}
	return nil
}