如何在Go中嵌套结构
我正在研究Go中的结构、方法和接口,并且正在编写一些代码来测试这些概念。在我正在创建的一个示例中,我坚持以下概念-一些放大器有前置放大器管和功率管。我想我可以在amp结构中使用一个通用的管状结构来定义它们,但它当然不能像我写的那样工作,而且当我研究嵌套结构时,它们似乎不是适用的概念。我如何构造它,使“amp”有“preampubes”和“powertube”,而这两种类型都是“tube” **编辑:更新:** 我应该在问题中包括我所犯的错误。今天早上我重写了这个包,Premptube和PowerTube类型现在可以正常工作了。我怀疑问题在于我如何在主函数中实例化它们。下面的代码现在起作用了。这不是生产代码,只是实践概念的练习。谢谢你帮我重新审视它。如何在Go中嵌套结构,go,data-structures,struct,Go,Data Structures,Struct,我正在研究Go中的结构、方法和接口,并且正在编写一些代码来测试这些概念。在我正在创建的一个示例中,我坚持以下概念-一些放大器有前置放大器管和功率管。我想我可以在amp结构中使用一个通用的管状结构来定义它们,但它当然不能像我写的那样工作,而且当我研究嵌套结构时,它们似乎不是适用的概念。我如何构造它,使“amp”有“preampubes”和“powertube”,而这两种类型都是“tube” **编辑:更新:** 我应该在问题中包括我所犯的错误。今天早上我重写了这个包,Premptube和Power
package main
import "fmt"
type tube struct {
model string
number int8
}
type amp struct {
name string
model string
manufacturer string
color string
knobs int8
switches int8
jacks int8
preamptubes tube
powertubes tube
ouputpower int8
fxloop bool
}
func main() {
a := amp{
name: "MegaAmp",
model: "MA9000",
manufacturer: "Amps R Us",
color: "blonde",
knobs: 9,
switches: 5,
jacks: 6,
preamptubes: tube{
model: "12AX7",
number: 3},
powertubes: tube{
model: "6V6",
number: 4},
fxloop: true}
fmt.Println(a)
fmt.Println(a.preamptubes.model)
}
我可能有点误解,但你是在要求结构的嵌套切片吗?要做到这一点,只需使用
[]管
:
package main
import "fmt"
type tube struct {
model string
number int8
}
type amp struct {
name string
model string
manufacturer string
color string
knobs int8
switches int8
jacks int8
preamptubes []tube
powertubes []tube
ouputpower int8
fxloop bool
}
func main() {
v := amp{
name: "da amp",
preamptubes: []tube{{model: "A"}},
powertubes: []tube{{model: "B"}},
}
fmt.Printf("%+v\n", v)
}
这里只是一个简单的例子,但是如果您的值存在于不同的包中,您也可能会遇到
import
问题。将第一个字母改为大写(即,<代码>管< /代码>,和<代码> AMP<代码> [C])以访问不同包中的结构。 < P>不清楚您想要实现什么(这里有上下文/大图),但请考虑:
您可以向管添加另一个标志以指定其类型,然后创建一个类型数组
type tubekind int
const (
preamptube tubekind = iota
powertube
)
type tube struct {
model string
number int8
kind tubekind
}
type amp struct {
tubes []tube
// ... other fields
}
可以通过以下方式创建管:
tube{"model", 1, powertube}
tube{"model2", 2, preamptube}
您的问题中包含的类型有什么问题?您遇到了什么问题?在我看来,
amp.premptube
和amp.powertube
都正确地声明为类型tube
“它没有按照我编写的方式工作”-怎么会这样?你所描述的似乎正是你的代码所定义的,所以不清楚问题出在哪里。当我昨晚在处理这个包时,我遇到了一个错误,我应该把它包括在问题中。我今天早上重新创建了这个包,看起来PowerTube和Premptube都正确声明了。我怀疑问题在于我如何在主函数中实例化amp类型。
tube{"model", 1, powertube}
tube{"model2", 2, preamptube}