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

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

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

Go
神不在的星期二 2023-04-04 17:25:26
我有多个具有一个公共字段的结构;让我们common在这里称呼它type Struct1 struct {    foo string    bar string    common string}type Struct2 struct {    baz int    qux string    common string}我想创建一个将 anInterface作为输入并使 无效的函数common。编译时不知道可用的结构类型,因此我无法为每种类型创建单独的函数,也无法使用 switch 语句。PS:在我的用例中,我想取消,common因为它保存了每个结构的创建时间,我想跟踪结构的历史,所以我会知道它是否发生变化。将创建时间放在结构中会搞砸,因为每次生成新结构时创建时间都会不同,即使其实际数据可能相同。
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

定义一个具有公共字段的结构,并使其实现一个接口,该接口表明它能够使公共字段无效。然后将此结构嵌入到应该能够使字段无效的其他结构类型中。


// CommonNullifier is able to nullify its common field(s)

type CommonNullifier interface {

        NullifyCommon()

}


// StructCommon contains the common struct fields

type StructCommon struct {

        Common string

}


func (sc *StructCommon) NullifyCommon() {

        sc.Common = ""

}


// Struct1 embeds common fields, thus implements CommonNullifier

type Struct1 struct {

        StructCommon

        Foo string

}


// Struct2 also embeds common fields, thus also implements CommonNullifier

type Struct2 struct {

        StructCommon

        Bar string

}


// NullifyCommon nullfies the 'common' fields in the argument

func NullifyCommon(s CommonNullifier) {

        s.NullifyCommon()

}


您也可以使用反射,但使用接口通常更具可读性。


查看完整回答
反对 回复 2023-04-04
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

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