Sfoglia il codice sorgente

unmarshal failed return non-pointer error

chendonghai 8 anni fa
parent
commit
0f5379494a
1 ha cambiato i file con 10 aggiunte e 2 eliminazioni
  1. 10 2
      feature_adapter.go

+ 10 - 2
feature_adapter.go

@@ -1,8 +1,10 @@
 package jsoniter
 
 import (
-	"io"
 	"bytes"
+	"errors"
+	"io"
+	"reflect"
 )
 
 // Unmarshal adapts to json/encoding Unmarshal API
@@ -12,6 +14,12 @@ import (
 func Unmarshal(data []byte, v interface{}) error {
 	data = data[:lastNotSpacePos(data)]
 	iter := ParseBytes(data)
+	typ := reflect.TypeOf(v)
+	if typ.Kind() != reflect.Ptr {
+		// return non-pointer error
+		err = errors.New("the second param must be ptr type")
+		return
+	}
 	iter.ReadVal(v)
 	if iter.head == iter.tail {
 		iter.loadMore()
@@ -157,4 +165,4 @@ func (adapter *AdaptedEncoder) Encode(val interface{}) error {
 
 func (adapter *AdaptedEncoder) SetIndent(prefix, indent string) {
 	// not implemented yet
-}
+}