解码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示例中的字段类型使用类型文字(即)来定义。不满足上述“类型名称”条件。
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消