func (v *Value) BinaryData(path string) ([]byte, error) {
	if !strings.HasPrefix(path, v.Path) {
		return nil, fmt.Errorf("gui: bad path")  
	}
	path = path[len(v.Path)+1:]
	return binData(path, reflect.ValueOf(v.Current))
}
BinaryData returns the string or byte slice addressed by path.
package gui
import (
	"bytes"
	"fmt"
	"net/url"
	"reflect"
	"strconv"
	"strings"
	"github.com/vdobler/ht/errorlist"
)
type Message struct {
	Type string
	Text string
}
type Value struct {
	Current interface{}
	Last []interface{}
	Path string
	Messages map[string][]Message
	buf *bytes.Buffer
	nextfieldinfo Fieldinfo
}
func NewValue(val interface{}, path string) *Value {
	return &Value{
		Current:  val,
		Path:     path,
		Messages: make(map[string][]Message),
		buf:      &bytes.Buffer{},
	}
}
func (v *Value) Render() ([]byte, error) {
	val := reflect.ValueOf(v.Current)
	v.buf.Reset()
	err := v.render(v.Path, 0, false, val)  
	return v.buf.Bytes(), err
}
func (v *Value) PushCurrent() {
	v.Last = append(v.Last, v.Current)
}
func (v *Value) Update(form url.Values) (string, errorlist.List) {
	val := reflect.ValueOf(v.Current)
	v.Messages = make(map[string][]Message)  
	firstErrorPath := ""
	updated, err := walk(form, v.Path, val)
	for _, e := range err {
		switch ve := e.(type) {
		case ValueError:
			if firstErrorPath == "" {
				firstErrorPath = ve.Path
			}
			v.Messages[ve.Path] = []Message{{
				Type: "error",
				Text: ve.Err.Error(),
			}}
		case addNoticeError:
			firstErrorPath = string(ve)
		}
	}
	v.Current = updated.Interface()
	return firstErrorPath, err
}