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

由类型文字定义的类型的struct字段上的方法

由类型文字定义的类型的struct字段上的方法

Go
不负相思意 2021-05-14 06:50:01
解码JSON时,我总是为每个对象显式编写一个结构,以便可以在父结构中为单个对象实现Stringer接口,如下所示:type Data struct {    Records []Record}type Record struct {    ID int    Value string}func (r Record) String() string {    return fmt.Sprintf("{ID:%d Value:%s}", r.ID, r.Value)}我最近了解到可以对匿名结构进行嵌套。此方法对于定义要解码的数据的结构更加简洁:type Data struct {    Records []struct {        ID int        Value string    }}但是,是否可以在结构的成员(特别是匿名结构的成员)上定义方法?类似于第一个代码块中的Stringer接口实现。
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

不可以,方法只能附加到同一包中定义的命名类型。从规格:


 方法是具有接收器的功能。方法声明将标识符(方法名称)绑定到方法。它还将方法与接收者的基本类型相关联。


MethodDecl   = "func" Receiver MethodName Signature [ Body ] .

Receiver     = "(" [ identifier ] [ "*" ] BaseTypeName ")" .

BaseTypeName = identifier .

接收器类型必须采用T或* T的形式,其中T是类型名称。用T表示的类型称为接收方基本类型;它不能是指针或接口类型,并且必须在与方法相同的程序包中声明。据说该方法已绑定到基本类型,并且该方法的名称仅在该类型的选择器中可见。


Records第二个OP示例中的字段类型使用类型文字(即)来定义。不满足上述“类型名称”条件。


查看完整回答
反对 回复 2021-05-24
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

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