为了账号安全,请及时绑定邮箱和手机立即绑定

指向结构体满足接口的指针

指向结构体满足接口的指针

Go
波斯汪 2021-06-30 13:00:22
我扫描了 Revel 框架的 Go 代码,似乎指针满足接口要求。请参阅下面的片段。type Result interface {    Apply(req *Request, resp *Response)}type RenderTextResult struct {    text string}func (r RenderTextResult) Apply(req *Request, resp *Response) {    resp.WriteHeader(http.StatusOK, "text/plain; charset=utf-8")    resp.Out.Write([]byte(r.text))}func (c *Controller) RenderText(text string, objs ...interface{}) Result {    finalText := text    if len(objs) > 0 {        finalText = fmt.Sprintf(text, objs...)    }    return &RenderTextResult{finalText}}这背后的原因是什么?该框架返回一个结构体值而不是一个结构体指针来渲染 JSON,但是:type RenderJsonResult struct {    obj      interface{}    callback string}// Uses encoding/xml.Marshal to return XML to the client.func (c *Controller) RenderXml(o interface{}) Result {    return RenderXmlResult{o}}我似乎无法掌握细微的(?)差异。
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

与类型关联的方法也可用于指向该类型的指针。所以如果r是一个*RenderTextResult变量,那么r.Apply(...)就等价于(*r).Apply()

在大多数方面,该Apply方法将像任何*RenderTextResult直接关联的方法一样工作,尽管它不能修改结构的内容,因为它接收结构的副本而不是指向原始结构的指针。

这意味着RenderTextResult可以使用on 方法来*RenderTextResult满足Result接口。


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信