Here is the codeunmarshal परिलक्षित मूल्य
package main
import (
"fmt"
"encoding/json"
"reflect"
)
var (
datajson []byte
//ref mapp
)
type mapp map[string]reflect.Type
type User struct {
Name string
//Type map[string]reflect.Type
}
func MustJSONEncode(i interface{}) []byte {
result, err := json.Marshal(i)
if err != nil {
panic(err)
}
return result
}
func MustJSONDecode(b []byte, i interface{}) {
err := json.Unmarshal(b, i)
if err != nil {
panic(err)
}
}
func Store(a interface{}) {
datajson = MustJSONEncode(a)
//fmt.Println(datajson)
}
func Get(a []byte, b interface{}) {
objType := reflect.TypeOf(b).Elem()
obj := reflect.New(objType)
//fmt.Println(obj)
MustJSONDecode(a, &obj)
fmt.Printf("%s", obj)
}
func main() {
dummy := &User{}
david := User{Name: "DavidMahon"}
Store(david)
Get(datajson, dummy)
}
प्राप्त समारोह
func Get(a []byte, b interface{}) {
objType := reflect.TypeOf(b).Elem()
obj := reflect.New(objType)
//fmt.Println(obj)
MustJSONDecode(a, &obj)
fmt.Printf("%s", obj)
}
में पर मैं अंतर्निहित ऑब्जेक्ट प्रकार में json unmarshal में असमर्थ हूँ।
क्या गलत है? मैं यहाँ फंस गया हूँ। कुछ बहुत ही सरल अभी तक पता लगाना मुश्किल है।
धन्यवाद
अद्यतन :: इस समस्या का लक्ष्य प्रकार प्राप्त समारोह में पारित की एक पूरी तरह से बनाई वस्तु नहीं निकाला जा सकता है।
नीचे टिप्पणी पर निक द्वारा वर्णित दृष्टिकोण मुझे वास्तविक वस्तु नहीं मिला है जिसे मैंने पहले ही कोशिश की है। मैं वैसे भी हालांकि मैं वास्तविक वस्तु वापस बस डेटा की जरूरत नहीं है इस
func Get(a []byte) {
var f interface{}
//buf := bytes.NewBuffer(a)
//v := buf.String()
//usr := &User{}
MustJSONDecode(a, &f)
fmt.Printf("\n %v \n", f)
}
की तरह एक नक्शे में डेटा पुनः प्राप्त कर सकते हैं (यहां तक कि जब वस्तु पुनरावर्ती वस्तुओं के नीचे है)। user := &User{"SomeName"}
की तरह कुछ जहां मुझे user
Unmarshall से वापस ऑब्जेक्ट की आवश्यकता है। यह चाल कहीं प्रतिबिंब में है लेकिन यह नहीं पता कि कैसे।
प्रतिबिंब ऐसा नहीं करेगा जो आपको लगता है कि ऐसा होगा। आप इसका उपयोग करके एक मनमानी वस्तु का निर्माण नहीं कर सकते हैं। आप शायद प्रतिबिंबित और असुरक्षित का उपयोग करके कुछ एकत्र कर सकते हैं लेकिन वास्तव में आपको उस पर पुनर्विचार करना चाहिए जो आप करने की कोशिश कर रहे हैं। –
धन्यवाद मैं इस धागे को बंद कर रहा हूं। समय लेने के लिए धन्यवाद। आपके उत्तरों को +1 किया – Minty