I know we can just return the modified struct and reassign the returned value.
But curious about how it works.
case5 := &Person{name: "No Change", age: 10}
fmt.Printf("Before passing Pointer to MethodPt: %+v\n", case5)
// Before passing Pointer to MethodPtR: &{name:No Change age:10}
case5 = case5.MethodPtR()
fmt.Printf("After passing Pointer to MethodPt: %+v\n", case5)
// After passing Pointer to MethodPt: &{name:MethodPt Changed! age:1000}
type Person struct {
name string
age int
}
func (p Person) MethodNoPt() {
p = Person{
name: "MethodNoPt Changed!",
age: 1000,
}
}
func (p *Person) MethodPt() {
p = &Person{
name: "MethodPt Changed!",
age: 1000,
}
}
/********************************************/
case1 := Person{name: "No Change", age: 10}
fmt.Printf("Before passing Non-Pointer to MethodNoPt: %+v\n", case1)
// Before passing Non-Pointer to MethodNoPt: {name:No Change age:10}
case1.MethodNoPt()
fmt.Printf("After passing Non-Pointer to MethodNoPt: %+v\n", case1)
// After passing Non-Pointer to MethodNoPt: {name:No Change age:10}
/********************************************/
/********************************************/
case2 := Person{name: "No Change", age: 10}
fmt.Printf("Before passing Pointer to MethodNoPt: %+v\n", case2)
// Before passing Pointer to MethodNoPt: {name:No Change age:10}
(&case2).MethodNoPt()
fmt.Printf("After passing Pointer to MethodNoPt: %+v\n", case2)
// After passing Pointer to MethodNoPt: {name:No Change age:10}
/********************************************/
/********************************************/
case3 := Person{name: "No Change", age: 10}
fmt.Printf("Before passing Non-Pointer to MethodPt: %+v\n", case3)
// Before passing Non-Pointer to MethodPt: {name:No Change age:10}
case3.MethodPt()
fmt.Printf("After passing Non-Pointer to MethodPt: %+v\n", case3)
// After passing Non-Pointer to MethodPt: {name:No Change age:10}
/********************************************/
/********************************************/
case4 := &Person{name: "No Change", age: 10}
fmt.Printf("Before passing Pointer to MethodPt: %+v\n", case4)
// Before passing Pointer to MethodPt: &{name:No Change age:10}
case4.MethodPt()
fmt.Printf("After passing Pointer to MethodPt: %+v\n", case4)
// After passing Pointer to MethodPt: &{name:No Change age:10}
/********************************************/