本文主要是介绍Golang 方法的接收器 receiver 指针和值的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、如果receiver是指针类型
package mainimport "fmt"type Count struct {count int
}func main() {c := Count{count: 0}c.incr()fmt.Println(c.count)c2 := &cc2.incr()fmt.Println(c2.count)
}func (c *Count) incr() {c.count++
}//打印结果 1 2
incr 方法的 receiver 是 Count 类型的指针。因此,既可以使用 Count 类型的值,也可以使用指向 Count 类型的指针来调用 incr 方法
二、如果receiver是值传递
package mainimport "fmt"type Count struct {count int
}func main() {c := Count{count: 0}c.incr2()fmt.Println(c.count)c2 := &cc2.incr2()fmt.Println(c2.count)
}func (c Count) incr2() {c.count++
}//打印 0 0
//为什么是 0,因为这时候c.count只是在incr2函数内部进行运算,c变量只有一种Count类型的函数内部变量,改变该值就需要通过把receiver改成指针传递
在 Go 语言中,如果一个方法的 receiver 是某个类型的指针,那么该类型的值和指针都可以调用这个方法。这是因为当 receiver 是指针类型时,Go 会自动进行指针解引用,以便让你方便地对这个类型的值进行操作。
这篇关于Golang 方法的接收器 receiver 指针和值的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!