मैं वर्तमान में गो भाषा के साथ प्रोग्राम करना सीख रहा हूं। मुझे गो पॉइंटर्स को समझने में कुछ कठिनाइयों का सामना करना पड़ रहा है (और मेरा सी/सी ++ अब बहुत दूर है ...)। जाओ # 52 (http://tour.golang.org/#52) उदाहरण के लिए की यात्रा में, मैं पढ़ें:गोलांग पॉइंटर्स
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3, 4}
fmt.Println(v.Abs())
}
लेकिन अगर बजाय
मैं ने लिखा है:
func (v Vertex) Abs() float64 {
[...]
v := Vertex{3, 4}
या भी:
func (v Vertex) Abs() float64 {
[...]
v := &Vertex{3, 4}
और इसके विपरीत:
func (v *Vertex) Abs() float64 {
[...]
v := Vertex{3, 4}
मुझे एक ही परिणाम मिला। क्या कोई अंतर है (स्मृति-वार, आदि)?
हैलो और प्रोग्रामर में आपका स्वागत है। इन जैसे प्रत्यक्ष कार्यान्वयन प्रश्न यहां ऑफ-विषय हैं लेकिन स्टैक ओवरफ़्लो पर विषय पर हैं। मैं माइग्रेट शुरू करूंगा। आप का दिन सुखद रहे। –
सभी विधियों में 'v' को म्यूट करने का प्रयास करें, और उसके बाद' fmt.Println() 'कॉल के बाद मूल, और आप अंतर देखेंगे। '(V Vertex) 'संस्करणों के साथ, आपको मूल की प्रति प्राप्त हो रही है। अगर इसे पॉइंटर पर बुलाया गया था, तो यह आपके लिए स्वचालित रूप से अस्वीकृत है। –
यह भी देखें: [विधि रिसीवर अस्पष्टता] (http://stackoverflow.com/questions/14926860/method-receivers-ambiguity) –