请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问为什么结构绑定的方法的接收者改成指针接收者以后,用结构声明的变量也别成了指针类型?

老师,请问为什么结构绑定的方法的接收者改成指针接收者以后,用结构声明的变量也别成了指针类型?如下,Retriever的Get和Post方法的接收者定义为指针类型,为什么 mock.Retriever{Contents: “This is a fake imooc.com”} 声明的变量 retriever 也变成了指针类型??如果一个结构里面,有的方法用指针接收者绑定,有的用值接收者绑定,用这个结构声明变量的时候,得到的变量是指针类型还是值类型??
/////////////////////////////////////////////////////////////////////////////
// mock.Retriver
/////////////////////////////////////////////////////////////////////////////
//Retriever …
type Retriever struct {
Contents string
}

//Get …
func (r *Retriever) Get(url string) string {
return r.Contents
}

//Post …
func (r *Retriever) Post(url string, form map[string]string) string {
r.Contents = form[“contents”]
return “ok”
}
/////////////////////////////////////////////////////////////////////////////
// main.go
/////////////////////////////////////////////////////////////////////////////

var r RetrievePoster
retriever := mock.Retriever{Contents: “This is a fake imooc.com”}
r = &retriever

正在回答

1回答

首先接受者是指针和非指针的时候,声明出来的方法是不同的。所以真正实现了接口的类型是指向mock.Retriever结构体的指针。因此,声明了retriever后,如果要赋值给组合接口变量r,那么应该使用取地址符&,也就是要赋一个指针值,因为前面提到,真正实现了接口的是一个指针类型。

2 回复 有任何疑惑可以回复我~
  • 提问者 慕粉329807310 #1
    似乎明白了
    回复 有任何疑惑可以回复我~ 2020-10-09 12:10:24
  • 提问者 慕粉329807310 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-10-09 16:36:08
  • 对的 实现接口方法是啥类型 就把这个类型 赋值给 接口变量
    回复 有任何疑惑可以回复我~ 2021-07-16 06:44:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信