猿问

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

解码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接口实现。


不负相思意
浏览 176回答 1
1回答

鸿蒙传说

不可以,方法只能附加到同一包中定义的命名类型。从规格: 方法是具有接收器的功能。方法声明将标识符(方法名称)绑定到方法。它还将方法与接收者的基本类型相关联。MethodDecl   = "func" Receiver MethodName Signature [ Body ] .Receiver     = "(" [ identifier ] [ "*" ] BaseTypeName ")" .BaseTypeName = identifier .接收器类型必须采用T或* T的形式,其中T是类型名称。用T表示的类型称为接收方基本类型;它不能是指针或接口类型,并且必须在与方法相同的程序包中声明。据说该方法已绑定到基本类型,并且该方法的名称仅在该类型的选择器中可见。Records第二个OP示例中的字段类型使用类型文字(即)来定义。不满足上述“类型名称”条件。
随时随地看视频慕课网APP

相关分类

Go
我要回答