गो में, मैं ऐसा कुछ करना चाहता हूं। मेरे पास कई structs के साथ एक बड़ी वस्तु है (Google के protobuf
का उपयोग करके)। यहां एक संक्षिप्त उदाहरण है:गोलांग गतिशील चर संदर्भ
person.name = "testing"
person.address.street = "123 test st"
person.address.city = "tester"
person.address.zip = 90210
person.billing.address.same = true
मैं गतिशील रूप से चीजों का संदर्भ देने में सक्षम होना चाहता हूं। उदाहरण के लिए:
key := "person.address.zip"
fmt.Println("the value of key: " + key) // would like to get 90210
key := "person.address.city"
fmt.Println("the value of key: " + key) // would like to get "tester"
क्या यह संभव है? यदि हां, तो मैं यह कैसे कर सकता हूं? अनिवार्य रूप से, मैं एक रिपोर्ट बना रहा हूं जिसमें केवल ऑब्जेक्ट का उप-समूह शामिल है और मैं एक मैपिंग फ़ाइल बनाने में सक्षम होना चाहता हूं जहां उपयोगकर्ता एक साथ कुंजी/मान मैप कर सकता है और मेरा प्रोग्राम मूल्य को आउटपुट करेगा। मैं अजगर में इस काम की है, लेकिन आप reflect
पैकेज से func (v Value) FieldByName(name string) Value
उपयोग कर सकते हैं जाओ का उपयोग कर :)
हां, यह संभव है। यह आपको पैकेज प्रतिबिंब प्रदान करता है। प्रतिबिंब का नुकसान आम तौर पर काम की बड़ी मात्रा है। दूसरी ओर - प्रतिबिंबित किए बिना ऐसे परिपूर्ण पैकेज जैसे HTML/टेम्पलेट या टेक्स्ट/टेम्पलेट नहीं लिखा जा सकता है, जहां लेखन की शैली व्याख्या की गई भाषा (जैसे पायथन) की तरह है, हालांकि संकलित किया गया है। – lofcek
और प्रतिबिंब धीमा है, अंतिम उपाय होना चाहिए। – OneOfOne
यदि आपको वास्तव में इस तरह की कुछ ज़रूरत है, तो आपको (नेस्टेड) मानचित्रों का उपयोग करना चाहिए, न कि संरचना मूल्यों के पदानुक्रम। – kostix