![](/img/trans.png)
[英]Golang + MongoDB embedded type (embedding a struct in another struct)
[英]Golang embedded struct type
我有这些类型:
type Value interface{}
type NamedValue struct {
Name string
Value Value
}
type ErrorValue struct {
NamedValue
Error error
}
我可以使用v:= NamedValue{Name: "fine", Value: 33}
,但我不能使用e:= ErrorValue{Name: "alpha", Value: 123, Error: err}
似乎嵌入语法没问题,但使用它不起作用?
嵌入类型是(未命名的)字段,由非限定类型名称引用。
使用类型声明但没有显式字段名称的字段是匿名字段,也称为嵌入字段或该类型在结构中的嵌入。 嵌入类型必须指定为类型名称
T
或指向非接口类型名称*T
的指针,并且T
本身可能不是指针类型。 非限定类型名称用作字段名称。
所以尝试:
e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}
如果您省略复合文字中的字段名称,也可以使用:
e := ErrorValue{NamedValue{"fine", 33}, err}
试试Go Playground上的例子。
对于深度嵌套的结构,接受的答案的语法有点冗长。 例如,这个:
package main
import (
"fmt"
)
type Alternative struct {
Question
AlternativeName string
}
type Question struct {
Questionnaire
QuestionName string
}
type Questionnaire struct {
QuestionnaireName string
}
func main() {
a := Alternative{
Question: Question{
Questionnaire: Questionnaire{
QuestionnaireName: "q",
},
},
}
fmt.Printf("%v", a)
}
(去游乐场)
可以这样改写:
a := Alternative{}
a.QuestionnaireName = "q"
除了icza的精彩回答。
你可以简单地这样做:
v := NamedValue{Name: "fine", Value: 33}
e := ErrorValue{NamedValue:v, Error: err}
它工作得很好。 在这里查看示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.