type A struct {
B struct {
Some string
Len int
}
}
简单的问题。如何初始化这个结构?我想做这样的事情:
a := &A{B:{Some: "xxx", Len: 3}}
预计我会收到错误:
missing type in composite literal
当然,我可以创建一个单独的struct B并以这种方式初始化它:
type Btype struct {
Some string
Len int
}
type A struct {
B Btype
}
a := &A{B:Btype{Some: "xxx", Len: 3}}
但它没有第一种方式那么有用。是否有初始化匿名结构的快捷方式?
答案 0 :(得分:14)
assignability rules对匿名类型是宽容的,这导致另一种可能性,你可以保留A
的原始定义,同时允许写入该类型的短复合文字。如果你真的坚持B
字段的匿名类型,我可能会写一些类似的东西:
package main
import "fmt"
type (
A struct {
B struct {
Some string
Len int
}
}
b struct {
Some string
Len int
}
)
func main() {
a := &A{b{"xxx", 3}}
fmt.Printf("%#v\n", a)
}
输出
&main.A{B:struct { Some string; Len int }{Some:"xxx", Len:3}}
答案 1 :(得分:1)
这样做:
type Config struct {
Element struct {
Name string
ConfigPaths []string
}
}
config = Config{}
config.Element.Name = "foo"
config.Element.ConfigPaths = []string{"blah"}
答案 2 :(得分:0)
这更简单:
type A struct {
B struct {
Some string
Len int
}
}
a := A{
struct {
Some string
Len int
}{"xxx", 3},
}
fmt.Printf("%+v", a)