我最近开始为工作项目学习Golang。我来自“ c”背景,对指针接收器在功能方面的技术有些困惑。我是否假设接收器是广义的,并且不在乎该对象实际上是指针还是文字,它将把它转换为任何接收器类型。
我知道我的问题措辞可能令人困惑,因此这里是一些代码,例如:
application.MyViewModel.SomeProperty = "A value!";
我希望带有指针接收器的功能只能在指针上工作,反之亦然。我只是以此为前提,假设接收者是一个笼统的声明,并且不在乎它的指针是文字吗?
编辑: 抱歉,我可能还没有澄清我的问题,我知道指针接收器用于修改对象,但是我对语法更加困惑,为什么指针接收器既可用于文字又可用于指针,因为它接收到一个指针,难道它不应该只在一个指针上工作吗?
答案 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中看到的方法的主要目的是用于接口实现 它借助于结构实现(或满足)接口的方法。