Go的方法接收: 值接收与指针接收
2023-03-04 19:09:57 439
package main
import "fmt"
type Circle struct {
r uint
}
func (c *Circle) add() uint {
c.r++
return c.r
}
func (c Circle) show() uint {
c.r++
return c.r
}
func main() {
c := Circle{1}
fmt.Printf("result: %d\n", c.show())
fmt.Printf("result: %d\n", c.add())
}
output
result: 2 result: 2
package main
import "fmt"
type Circle struct {
r uint
}
func add(c *Circle) uint {
c.r++
return c.r
}
func show(c Circle) uint {
c.r++
return c.r
}
func main() {
c := Circle{1}
fmt.Printf("result: %d\n", show(c))
fmt.Printf("result: %d\n", add(&c))
}
output
result: 2result: 2
在Go或C++等很多面向对象的编程语言中, 对象方法的第一个参数的类型就是当前对象指针
在Go中, 参数是值传递的, 指针的值传递只是地址的拷贝, 而对象则要拷贝内部的所有属性, 存在一定的性能消耗, 且由于方法内部操作的是拷贝对象, 对原对象不会有任何影响