我正在Go中研究结构,方法和接口,并正在编写一些代码来测试这些概念。我在创建的示例中坚持以下概念-一些放大器具有前置放大器管和功率管。我以为可以使用通用电子管结构在amp结构中定义它们,但是当然,它不能按我编写的方式工作,而且当我研究嵌套结构时,它们似乎不是适用的概念。我该如何构造它,以使“ amp”具有“ preamptubes”和“ powertubes”,并且它们分别是“ tube”类型?
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
}
**编辑:更新:**
我应该包括我在问题中遇到的错误。我今天早上重写了程序包,现在前置放大器和功率管类型可以按预期工作。我怀疑问题出在我如何在主函数中实例化它们。现在可以进行以下操作。这不是生产代码,只是练习概念的一种练习。感谢您帮助我重新审视它。
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)
}
答案 0 :(得分:2)
我可能会误会,但是您是否要求嵌套嵌套的结构?为此,只需使用[]tube
:
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)
}
https://play.golang.org/p/bPGHuEO40D0
这里只是一个黑暗的镜头,但是如果您的值存在于单独的程序包中,您可能还会遇到import
问题。将第一个字母更改为大写(即Tube
和AMP
[请参见https://github.com/golang/go/wiki/CodeReviewComments#initialisms)以访问来自不同包的结构。
答案 1 :(得分:0)
目前尚不清楚您到底要达到什么目的(这里的背景/大局是什么?),但是请考虑一下:
您可以在管中添加另一个标志以指定其类型,然后具有类型数组
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}