如何修改未知类型的结构中的字段?

我有多个具有一个公共字段的结构;让我们common在这里称呼它


type Struct1 struct {

    foo string

    bar string


    common string

}


type Struct2 struct {

    baz int

    qux string


    common string

}

我想创建一个将 anInterface作为输入并使 无效的函数common。编译时不知道可用的结构类型,因此我无法为每种类型创建单独的函数,也无法使用 switch 语句。


PS:在我的用例中,我想取消,common因为它保存了每个结构的创建时间,我想跟踪结构的历史,所以我会知道它是否发生变化。将创建时间放在结构中会搞砸,因为每次生成新结构时创建时间都会不同,即使其实际数据可能相同。


神不在的星期二
浏览 92回答 1
1回答

侃侃尔雅

定义一个具有公共字段的结构,并使其实现一个接口,该接口表明它能够使公共字段无效。然后将此结构嵌入到应该能够使字段无效的其他结构类型中。// CommonNullifier is able to nullify its common field(s)type CommonNullifier interface {        NullifyCommon()}// StructCommon contains the common struct fieldstype StructCommon struct {        Common string}func (sc *StructCommon) NullifyCommon() {        sc.Common = ""}// Struct1 embeds common fields, thus implements CommonNullifiertype Struct1 struct {        StructCommon        Foo string}// Struct2 also embeds common fields, thus also implements CommonNullifiertype Struct2 struct {        StructCommon        Bar string}// NullifyCommon nullfies the 'common' fields in the argumentfunc NullifyCommon(s CommonNullifier) {        s.NullifyCommon()}您也可以使用反射,但使用接口通常更具可读性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go