Golang指针接收器技术混乱

时间:2019-07-12 03:40:05

标签: c pointers go struct

我最近开始为工作项目学习Golang。我来自“ c”背景,对指针接收器在功能方面的技术有些困惑。我是否假设接收器是广义的,并且不在乎该对象实际上是指针还是文字,它将把它转换为任何接收器类型。

我知道我的问题措辞可能令人困惑,因此这里是一些代码,例如:

        application.MyViewModel.SomeProperty = "A value!";

我希望带有指针接收器的功能只能在指针上工作,反之亦然。我只是以此为前提,假设接收者是一个笼统的声明,并且不在乎它的指针是文字吗?

编辑: 抱歉,我可能还没有澄清我的问题,我知道指针接收器用于修改对象,但是我对语法更加困惑,为什么指针接收器既可用于文字又可用于指针,因为它接收到一个指针,难道它不应该只在一个指针上工作吗?

2 个答案:

答案 0 :(得分:1)

指针接收器意味着,如果您在方法上更改对象,它将更改基础结构。

调用它并没有什么不同。

const test = new mongoose.Schema({
   values:[Number]
})

或在此处查看代码https://play.golang.org/p/jwOUwsso3PZ

tl; dr;只要接收者是对的,对象或参考就不会有任何区别。

如果您的目标是变异,通常只希望拥有指针接收器。否则,只需发送一份副本即可。

答案 1 :(得分:0)

在golang中,这些方法称为具有接收者功能的方法。 接收器参数可以通过值或指针传递。

您可以编写如下所示的纯函数。

 type Client struct{}

//A pointer to Client    
func makePtr(c *Client){
    //do something with c
}

//A copy of client is made.
func makeLit(cs Client){
    //do something with c
}

相反,如果您编写方法,则它将与struct关联。

type Client struct{}

func (c *Client) makePtr(){
    //do something with c
}

//A copy of client is made.
func (c Client)makeLit(){
    //do something with c
}

我在golang中看到的方法的主要目的是用于接口实现 它借助于结构实现(或满足)接口的方法。