36 lines
513 B
Go
36 lines
513 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type demo struct {
|
|
Val int
|
|
}
|
|
|
|
func (d *demo) change() {
|
|
d = nil // Assignment to the method receiver propagates only to callees but not to callers
|
|
d.myVal()
|
|
}
|
|
|
|
func (d *demo) myVal() {
|
|
fmt.Printf("my val: %#v\n", d)
|
|
}
|
|
|
|
func (d demo) change2() {
|
|
d = demo{} // Assignment to the method receiver doesn't propagate to other calls
|
|
d.myVal()
|
|
}
|
|
|
|
func (d *demo) change3() {
|
|
d.Val = 3
|
|
d.myVal()
|
|
}
|
|
|
|
func main() {
|
|
d := &demo{}
|
|
d.myVal()
|
|
d.change()
|
|
d.myVal()
|
|
d.Val = 2
|
|
d.change2()
|
|
}
|