पॉइंटर कन्फ्यूजन [डुप्लिकेट] द्वारा मूल्य बनाम रिसीवर द्वारा रिसीवर
मैंने एक साधारण स्टैक कार्यान्वयन लिखा है। यह उम्मीद के मुताबिक काम करता है।
package main
import "fmt"
type Stack struct {
data []interface{}
}
func (s *Stack) isEmpty() bool {
return len(s.data) == 0
}
func (s *Stack) push(item interface{}) {
s.data = append(s.data, item)
//fmt.Println(s.data, item)
}
func (s *Stack) pop() interface{} {
if len(s.data) == 0 {
return nil
}
index := len(s.data) - 1
res := s.data[index]
s.data = s.data[:index]
return res
}
func main() {
var stack Stack
stack.push("this")
stack.push("is")
stack.push("sparta!!")
for len(stack.data) > 0 {
x := stack.pop()
fmt.Println(x)
}
}
हालाँकि, अगर मैंने रिसीवर के तीन तरीकों को पॉइंटर द्वारा रिसीवर से रिसीवर तक नीचे के रूप में बदल दिया। फिर मुख्य कुछ भी नहीं छापता है। ऐसा लगता है कि हर बार मुझे पुश पद्धति कहा जाता है, स्टैक को फिर से संगठित किया जाता है। ऐसा क्यों?
func (s Stack) isEmpty() bool {
func (s Stack) push(item interface{}) {
func (s Stack) pop() interface{} {
जवाब
1 LunaLovegood
मूल्य रिसीवर में, गो चर की एक प्रतिलिपि बनाता है और प्रतिलिपि में परिवर्तन करता है। केवल संदर्भ रिसीवर में वास्तविक stack
चर अद्यतन हो जाता है।
अधिक जानकारी के लिए, https://tour.golang.org/methods/4