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
小李
總結:
效率高的話還是使用結構體指針,直接修改