reflect
पैकेज का उपयोग करते हुए संरचना क्षेत्रों के साथ काम करने का एक कठिन समय है । विशेष रूप से, यह नहीं पता लगाया है कि फ़ील्ड मान कैसे सेट करें।
टाइप टी स्ट्रक्चर {फाई इंट; fs स्ट्रिंग} var rt = t {123, "jblow"} var i64 int64 = 456
क्षेत्र का नाम प्राप्त करना - यह काम करने लगता है
var field = reflect.TypeOf(r).Field(i).Name
फ़ील्ड का मान प्राप्त करना एक) इंटरफ़ेस {}, बी) इंट - यह काम करने लगता है
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
फ़ील्ड i का मान सेट करना - एक प्रयास करें - आतंक
reflect.ValueOf(r).Field(i).SetInt( i64 )
घबराहट : चिंतन.वैलू · सेटिफ़ाइड का उपयोग करते हुए प्राप्त किए गए मान का उपयोग करें
यह मानते हुए कि यह "नाम" और "नाम" फ़ील्ड नामों को पसंद नहीं करता था, इसलिए इसका नाम बदलकर "आईडी" और "नाम" रखा गया।
a) क्या यह धारणा सही है?
ख) यदि सही है, तो उसी फ़ाइल / पैकेज में आवश्यक नहीं है
फ़ील्ड i का मान सेट करना - दो को आज़माएं (फ़ील्ड के नाम बड़े अक्षरों में) - घबराहट
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
घबराहट : चिंतन.वैलू · अनअपेक्षित मान का उपयोग कर सेट करें
@PeterSO द्वारा नीचे दिए गए निर्देश पूरी तरह से और उच्च गुणवत्ता वाले हैं
चार। यह काम:
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
उन्होंने दस्तावेजों के साथ ही कहा कि क्षेत्र के नाम निर्यात योग्य होने चाहिए (पूंजी पत्र के साथ शुरू)
reflect
सेट डेटा के लिए गया था comments.gmane.org/gmane.comp.lang.go.general/35045 , लेकिन फिर भी वहाँ वह इस्तेमाल कियाjson.Unmarshal
वास्तविक गंदा काम करने के लिए