有*点和无指针差的Golang类型方法?

有*点和无指针差的Golang类型方法?,go,Go,我是刚来戈朗的。只是想了解为Calc类型声明的两个方法之间的差异。第一个函数sum被声明为c*Calc sum,另一个不带*的函数被声明为c-Calc-Minus。这两者和推荐的写作方式有什么区别 我看到不同之处在于我们如何调用main下的函数。point*type方法需要newCalc,另一个方法可以通过执行Calc{}.Sum直接调用 一些行为解释会有所帮助 func main() { Calc{}.Minus(2, 2) c :=new(Calc) c.Su

我是刚来戈朗的。只是想了解为Calc类型声明的两个方法之间的差异。第一个函数sum被声明为c*Calc sum,另一个不带*的函数被声明为c-Calc-Minus。这两者和推荐的写作方式有什么区别

我看到不同之处在于我们如何调用main下的函数。point*type方法需要newCalc,另一个方法可以通过执行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
}
func c*Calc Suma int,b int使用指针接收器,这意味着对c所做的任何编辑都将更改调用它的变量

func c Calc minus a int,b int使用值接收器。在本例中,您可以认为c只是它所调用的变量的一个副本。c、 结果=a-b无法按此功能中的预期工作

它是在变量的副本上操作的,而不是指向变量的指针。提示:您的减号方法不会真正更新您的Calc实例。您能知道发生了什么吗?这就是他们之间的主要区别