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
小李

 

總結:

效率高的話還是使用結構體指針,直接修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM