【问题标题】:Declare type of a struct field by type of another struct field通过另一个结构字段的类型声明一个结构字段的类型
【发布时间】:2017-10-07 15:10:15
【问题描述】:

这里是 *s3.GetObjectOutput 结构:

type GetObjectOutput struct {
    ...
    Metadata map[string]*string
    ...
}

我想用一个结构字段声明我的结构在 GetObjectOutput 结构中的元数据字段类型是这样的

type MyObject struct {
    Metadata *s3.GetObjectOutput.Metadata
    ...
}

但这是不正确的。如何声明具有字段的结构具有另一个结构字段的类型,而不是明确写下:

type MyObject struct {
    Metadata map[string]*string
    ...
}

【问题讨论】:

  • 你不能。它复制类型的唯一方法。

标签: go struct types field


【解决方案1】:

正如@zerkms 所说,你不能。 最好的办法是在MyObject 中创建自己的相同类型的字段。

您还可以在MyObject 中嵌入s3.GetObjectOutput

type MyObject struct {
    *s3.GetObjectOutput
    ...
}

鉴于myobjMyObject 的一个实例,请使用myobj.Metadata

【讨论】:

    【解决方案2】:

    @William Poussier 这样我就必须使用一个全局变量来使用它的类型。正如@zerkms 建议的那样,我从 *s3.GetObjectOutput 复制了元数据类型

    type Metadata map[string]*string 
    

    并使用:

    type MyObject struct { 
        Metadata
    }
    

    【讨论】:

    • 那你为什么要嵌入它呢?顺便说一句,如果不是回答我自己的答案的最佳位置,请使用 cmets。
    • @WilliamPoussier 我只想使用 *s3.GetObjectOutput 结构中的元数据类型。如果我嵌入 *s3.GetObjectOutput,它会污染我的 MyObject 结构。而且由于我想清楚地将 MyObject 结构的字段声明为元数据类型,而不是 map[string]*string 类型,因此我在 MyObject 结构中嵌入了元数据类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多