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:\Users\Ethan\Desktop\GOStudy\test>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:\Users\Ethan\Desktop\GOStudy\test>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:\Users\Ethan\Desktop\GOStudy\test>go run test.go
小李
总结:
效率高的话还是使用结构体指针,直接修改