声明一个结构体字段的类型,通过另一个结构体字段的类型来确定。

huangapple go评论77阅读模式
英文:

Declare type of a struct field by type of another struct field

问题

这是*s3.GetObjectOutput结构体的定义:

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

我想声明一个结构体,其中一个字段的类型是GetObjectOutput结构体中Metadata字段的类型,像这样:

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

但这是不正确的。我该如何声明一个结构体,其中一个字段的类型是另一个结构体的字段类型,而不是直接写出类型:

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

Here is *s3.GetObjectOutput struct:

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

I want to declare my struct with a struct field has type of Metadata field in GetObjectOutput struct like this

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

But it was not correct. How do I declare a struct with a field has type of another struct's field instead of explicitly write down:

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

答案1

得分: 1

根据 @zerkms 的说法,你不能这样做。
最好的方法可能是在 MyObject 中创建一个相同类型的自定义字段。

你也可以将 s3.GetObjectOutput 嵌入到 MyObject 中。

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

假设 myobjMyObject 的一个实例,可以使用 myobj.Metadata

英文:

As @zerkms said, you can't.
Best idea is to probably create your own field of the same type in MyObject.

You can also embed the s3.GetObjectOutput in MyObject.

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

Given myobj is an instance of MyObject, use myobj.Metadata.

答案2

得分: 0

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

type Metadata map[string]*string

然后使用:

type MyObject struct {
    Metadata
}
英文:

@William Poussier
In that way I have to use a global variable just for use its type. As @zerkms suggested I copied Metadata type from *s3.GetObjectOutput

type Metadata map[string]*string 

and use:

type MyObject struct { 
    Metadata
}

huangapple
  • 本文由 发表于 2017年5月9日 18:38:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/43867570.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定