जब हम (* structObj) का उपयोग करके संरचना का संदर्भ देते हैं, तो गोलांग मूल संरचना ओबीजे के समान पते को वापस करने के बजाय structObj की एक नई प्रति वापस लौटने लगते हैं? इस पर मेरा कुछ गलत हो सकता है, बहुत दयालु स्पष्टीकरण मांगdereference गोलांग संरचना संरचना की नई प्रति वापसी है?
package main
import (
"fmt"
)
type me struct {
color string
total int
}
func study() *me {
p := me{}
p.color = "tomato"
fmt.Printf("%p\n", &p.color)
return &p
}
func main() {
p := study()
fmt.Printf("&p.color = %p\n", &p.color)
obj := *p
fmt.Printf("&obj.color = %p\n", &obj.color)
fmt.Printf("obj = %+v\n", obj)
p.color = "purple"
fmt.Printf("p.color = %p\n", &p.color)
fmt.Printf("p = %+v\n", p)
fmt.Printf("obj = %+v\n", obj)
obj2 := *p
fmt.Printf("obj2 = %+v\n", obj2)
}
आउटपुट
0x10434120
&p.color = 0x10434120
&obj.color = 0x10434140 //different than &p.color!
obj = {color:tomato total:0}
p.color = 0x10434120
p = &{color:purple total:0}
obj = {color:tomato total:0}
obj2 = {color:purple total:0} // we get purple now when dereference again
क्या एक ही dereferenced सूचक को पी करने के लिए एक तरीका है? जैसा कि मुख्य() func में है, अगर हम एक स्लाइस के रूप में संरचना को जोड़ रहे हैं, तो हमें हमेशा इसे जोड़ने के अंदर इसे अव्यवस्थित करना होगा, यानी res = append (res, * p)। – ken
यह सिर्फ एक नया चर बनाने "बनाने" के बारे में नहीं है, एक मौजूदा चर के लिए असाइनमेंट एक dereference प्रतियों के माध्यम से मूल्य, उदाहरण के लिए '* ए = * बी' ने अभी भी प्रतियां * * बी' को' * ए' में प्रतिलिपि बनाई है। – JimB
@jimB याप, दोहराई गई प्रतिलिपि से बचने का कोई तरीका है? मूल रूप से ऑपरेशन को केवल उसी पी संरचना से निपटने की आवश्यकता होती है। – ken