package main
import "fmt"
type Person struct {
name string
age int
}
func (v *Person) modifyName(name string) {
p := v
p.name = name
}
func main() {
xiaoMing := Person{name: "xiaoming", age: 20}
xiaoMing.modifyName("小李")
fmt.Println(xiaoMing.name)
}
输出结果如下:
C:UsersEthanDesktopGOStudy est>go run test.go
小李
将上面代码的改成接受结构体的修改名称方法
package main
import "fmt"
type Person struct {
name string
age int
}
func (v Person) modifyName(name string) {
p := v
p.name = name
}
func main() {
xiaoMing := Person{name: "xiaoming", age: 20}
xiaoMing.modifyName("小李")
fmt.Println(xiaoMing.name)
}
输出结果如下:
C:UsersEthanDesktopGOStudy est>go run test.go
xiaoming
结论:
接受为结构体指针的方法对原先定义的结构体能够改变名称
接受为结构体的方法改变不了原先的结构体的值,需要重新定义个变量来传递新的值
下面修改的代码可以实现同样的效果:
package main
import "fmt"
type Person struct {
name string
age int
}
func (v Person) modifyName(name string) Person {
p := v
p.name = name
return p
}
func main() {
xiaoMing := Person{name: "xiaoming", age: 20}
p:=xiaoMing.modifyName("小李")
fmt.Println(p.name)
}
输出结果:
C:UsersEthanDesktopGOStudy est>go run test.go
小李
总结:
效率高的话还是使用结构体指针,直接修改