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

部分嵌入结构

部分嵌入结构

Go
慕桂英4014372 2023-03-15 14:42:08
我可以将类型 A 嵌入到 B 中。type A struct {  R int64  S int64}type B struct {  A}但是我如何只嵌入一个字段呢?type B struct {  A.R // does not work}
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

假设您的两种结构数据类型A和B.


如果你想要A并且B都有一个名为Ftype 的字段T,你可以这样做


type (

    A struct {

        F T

    }


    B struct {

        F T

    }

)

如果您只想更改T源代码中一个位置的类型,您可以像这样抽象它


type (

    T = someType


    A struct {

        F T

    }


    B struct {

        F T

    }

)

F如果您只想更改源代码中一个位置的名称,您可以像这样抽象它


type (

    myField struct {

        F T

    }


    A struct {

        myField

    }


    B struct {

        myField

    }

)

如果您有多个要抽象的可提取字段,则必须像这样单独抽象它们


type (

    myField1 struct {

        F1 T1

    }

    myField2 struct {

        F2 T2

    }

    

    A struct {

        myField1

        myField2

    }

    

    B struct {

        myField1

    }

)


查看完整回答
反对 回复 2023-03-15
?
白板的微信

TA贡献1883条经验 获得超3个赞

您不能嵌入单个字段。您只能嵌入整个类型。


如果要嵌入单个字段,则需要创建一个仅包含该字段的新类型,然后嵌入该类型:


type R struct {

  R int64

}


type B struct {

  R

}


查看完整回答
反对 回复 2023-03-15
?
Helenr

TA贡献1780条经验 获得超4个赞

这是我现在最好的解决方案......


type A struct {

  R int64

  S int64

}


type B struct {

  R A

}

然后在实施过程中...


&B{

 R: &A{

   R,

   // S, - ideally we would not be able to pass in `S`

 }

}

我不喜欢这个解决方案,因为我们仍然可以传入S...


更新:基于@HymnsForDisco 的回答,这可以编码为...


// A type definition could be used `type AR int64`,

//   instead of a type alias (below), but that would

//   require us to create and pass the `&AR{}` object,

//   to `&A{}` or `&B{}` for the `R` field.

type AR = int64


type A struct {

  R AR

  S int64

}


type B struct {

  R AR

}

并实施为...


&B{

  R,

}


查看完整回答
反对 回复 2023-03-15
  • 3 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

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