【问题标题】:Golang Type method with * point and without pointer difference? [duplicate]带*点和不带指针区别的Golang Type方法? [复制]
【发布时间】:2019-10-27 12:44:32
【问题描述】:

我是 golang 的新手。只是想了解为 Calc 类型声明的两种方法之间的区别。第一个函数 sum 被声明为 (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
}

【问题讨论】:

  • 提示:您的 Minus 方法不会真的更新您的 Calc 实例。你能弄清楚发生了什么吗? (这是它们之间的主要区别)

标签: go


【解决方案1】:

func (c *Calc) Sum(a int, b int) 使用指针接收器,这意味着您对c 所做的任何编辑都会更改它所调用的变量。

func (c Calc) Minus(a int, b int) 使用值接收器。在这种情况下,您可以将c 视为只是调用它的变量的副本。 c.Result = a-b 在此函数中无法按预期工作。

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

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 2017-09-21
    • 2017-06-21
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多