Golang Type方法带有*点并且没有指针差?

时间:2019-06-12 23:57:16

标签: go

我是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
}

1 个答案:

答案 0 :(得分:0)

square1使用指针接收器,这意味着您对dropna()所做的任何编辑都会更改其调用的变量。

func (c *Calc) Sum(a int, b int)使用一个值接收器。在这种情况下,您可以认为c只是被调用的变量的副本。 func (c Calc) Minus(a int, b int)在此功能中无法正常工作。

它在变量的副本上操作,而不是变量的指针