Don't attempt to set unexported struct fields
diff --git a/mapstructure.go b/mapstructure.go
index f953a8b..53d632f 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -236,6 +236,12 @@
 			panic("field is not valid")
 		}
 
+		// If we can't set the field, then it is unexported or something,
+		// and we just continue onwards.
+		if !field.CanSet() {
+			continue
+		}
+
 		// If the name is empty string, then we're at the root, and we
 		// don't dot-join the fields.
 		if name != "" {
diff --git a/mapstructure_test.go b/mapstructure_test.go
index c417762..f131397 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -7,6 +7,7 @@
 	Vint    int
 	Vbool   bool
 	Vextra  string
+	vsilent bool
 }
 
 type Map struct {
@@ -39,6 +40,7 @@
 		"vstring": "foo",
 		"vint":    42,
 		"vbool":   true,
+		"vsilent": true,
 	}
 
 	var result Basic
@@ -63,6 +65,10 @@
 	if result.Vextra != "" {
 		t.Errorf("vextra value should be empty: %#v", result.Vextra)
 	}
+
+	if result.vsilent != false {
+		t.Error("vsilent should not be set, it is unexported")
+	}
 }
 
 func TestMap(t *testing.T) {