Add examples and fix some issues with error strings
diff --git a/mapstructure.go b/mapstructure.go
index 72b6841..8729e96 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -21,7 +21,7 @@
 }
 
 func (e *Error) Error() string {
-	points := make([]string, 0, len(e.Errors))
+	points := make([]string, len(e.Errors))
 	for i, err := range e.Errors {
 		points[i] = fmt.Sprintf("* %s", err)
 	}
diff --git a/mapstructure_examples_test.go b/mapstructure_examples_test.go
new file mode 100644
index 0000000..847074a
--- /dev/null
+++ b/mapstructure_examples_test.go
@@ -0,0 +1,63 @@
+package mapstructure
+
+import (
+	"fmt"
+)
+
+type Person struct {
+	Name   string
+	Age    int
+	Emails []string
+	Extra  map[string]string
+}
+
+func ExampleDecode() {
+	// This input can come from anywhere, but typically comes from
+	// something like decoding JSON where we're not quite sure of the
+	// struct initially.
+	input := map[string]interface{}{
+		"name":   "Mitchell",
+		"age":    91,
+		"emails": []string{"one", "two", "three"},
+		"extra": map[string]string{
+			"twitter": "mitchellh",
+		},
+	}
+
+	var result Person
+	err := Decode(input, &result)
+	if err != nil {
+		panic(err)
+	}
+
+	fmt.Printf("%#v", result)
+	// Output:
+	// mapstructure.Person{Name:"Mitchell", Age:91, Emails:[]string{"one", "two", "three"}, Extra:map[string]string{"twitter":"mitchellh"}}
+}
+
+func ExampleDecode_errors() {
+	// This input can come from anywhere, but typically comes from
+	// something like decoding JSON where we're not quite sure of the
+	// struct initially.
+	input := map[string]interface{}{
+		"name":   123,
+		"age":    "bad value",
+		"emails": []int{1, 2, 3},
+	}
+
+	var result Person
+	err := Decode(input, &result)
+	if err == nil {
+		panic("should have an error")
+	}
+
+	fmt.Println(err.Error())
+	// Output:
+	// 5 error(s) decoding:
+	//
+	// * 'root.Name' expected type 'string', got 'int'
+	// * 'root.Age' expected type 'int', got 'string'
+	// * 'root.Emails[0]' expected type 'string', got 'int'
+	// * 'root.Emails[1]' expected type 'string', got 'int'
+	// * 'root.Emails[2]' expected type 'string', got 'int'
+}