我是golang的新手。仅试图了解为Calc类型声明的两种方法之间的区别。第一个函数的和声明为(c * Calc)Sum,另一个不带*的声明为(c Calc)Minus。两者和推荐的编写方式之间有什么区别?
我看到在main下调用函数的方式有所不同。 point *类型方法需要new(Calc),而另一个可以通过执行Calc {}。Sum来直接调用。
一些行为上的解释会有所帮助。
func main() {
Calc{}.Minus(2, 2)
c :=new(Calc)
c.Sum(3, 2)
}
type Calc struct{
Result int
}
func (c *Calc) Sum(a int, b int) {
c.Result = a + b
}
func (c Calc) Minus(a int, b int) {
c.Result = a-b
}
答案 0 :(得分:0)
square1
使用指针接收器,这意味着您对dropna()
所做的任何编辑都会更改其调用的变量。
func (c *Calc) Sum(a int, b int)
使用一个值接收器。在这种情况下,您可以认为c
只是被调用的变量的副本。 func (c Calc) Minus(a int, b int)
在此功能中无法正常工作。
它在变量的副本上操作,而不是变量的指针