2012-12-18 16 views
5

मैंने golang.org पर गो प्लेग्राउंड का उपयोग करके simple program लिखा था।जाएं: मानचित्र मानों के स्थान पर संपादित करें

उत्पादन स्पष्ट रूप से है:

second test 
first test 

वहाँ एक रास्ता जगह में मैप मान संपादित करने के लिए है? मुझे पता है कि मैं a.Things[key] की आग नहीं ले सकता। तो, a.Things[key] = firstTest इसे करने का एकमात्र तरीका सेट कर रहा है? शायद एक समारोह ChangeThing(key string, value string) के साथ?

उत्तर

6

आप अपने मानचित्र पॉइंटर्स के मूल्यों को अन्य संरचना में बनाकर कर सकते हैं।

http://play.golang.org/p/UouwDGuVpi

package main 

import "fmt" 

type A struct { 
    Things map[string]*str 
} 

type str struct { 
    s string 
} 

func (a A) ThingWithKey(key string) *str { 
    return a.Things[key] 
} 

func main() { 
    variable := A{} 

    variable.Things = make(map[string]*str) 
    variable.Things["first"] = &str{s:"first test"} 

    firstTest := variable.ThingWithKey("first") 
    firstTest.s = "second test" 

    fmt.Println(firstTest.s) 
    fmt.Println(variable.ThingWithKey("first").s) 
} 
+0

धन्यवाद के रूप में एक सूचक का उपयोग कर सकते हैं! इस बारे में नहीं सोचा था। आपका सुझाव मेरे लिए बहुत अच्छा काम करता है। – Donovan

3

आप मानचित्र मूल्य http://play.golang.org/p/BCsmhevGMX

+0

धन्यवाद, इससे मदद मिली। – Donovan

+0

मैंने वास्तव में कोशिश की, लेकिन संकलक मुझे स्ट्रिंग अक्षर का पता नहीं जाने देगा। मैं देखता हूं कि आप स्ट्रिंग को पहले एक वैरिएबल को आवंटित करके और फिर चर के पते को ले कर देखते हैं। मुझे आश्चर्य है कि ऐसा क्यों है कि मैं एक स्ट्रक्चर प्रारंभिकरण का पता ले सकता हूं लेकिन एक स्ट्रिंग प्रारंभिक नहीं। – Daniel