嵌套自身的 Struct 该如何实例化?

2020-11-17 11:50:10 +08:00
 miencun

有个

type A struct { B struct { Count int json:"count" Status int json:"status" } json:"b" }

用 A{B{Count: 112,Status: 112}}报我没有定义 B 请教请教,查了一天资料还没搞定。

1716 次点击
所在节点    Go 编程语言
10 条回复
miencun
2020-11-17 12:05:12 +08:00
对了,我不想用
var a A
a.B.Count = 1
a.B.Status = 2
这种直接赋值的方法
yrj
2020-11-17 12:09:45 +08:00
那就 type 一个 b 呗。
type b struct……
gy0624ww
2020-11-17 12:09:52 +08:00
type B struct {
Count int `json:"count"`
Status int `json:"status"`
}
type A struct {
B `json:"B"`
}

func main() {
a := A{B{
Count: 11,
Status: 10,
}}
fmt.Println(a)
}
miencun
2020-11-17 12:14:55 +08:00
两位老哥。 @yrj @gy0624ww

我要嵌套自身 Struct,因为需要输出的 json 很复杂,嵌套自身这样看起来很爽
zealic
2020-11-17 12:35:05 +08:00
```go
type A struct {
B struct {
Count int `json:"count"`
Status int `json:"status"`
} `json:"b"`
}

_ := A{
B: struct {
Count int `json:"count"`
Status int `json:"status"`
} {Count: 1, Status: 2},
}
```

这个玩法并不好,反而更繁琐,如要保持类型的反射匿名可以用 type def


```go
type X = struct {
Count int `json:"count"`
Status int `json:"status"`
}
```
keepeye
2020-11-17 12:42:09 +08:00
只能拆出来定义
airplayxcom
2020-11-17 13:23:21 +08:00
我杀我自己?
index90
2020-11-17 19:18:22 +08:00
A{B: struct {
Count int `json:"count"`
Status int `json:"status"`
}{Count: 1, Status: 2}}

B 不是类型名,是字段名
type A 里面的 struct 是一个匿名类型
实例化的时候,需要签名一致,tag 部分也要一样
miencun
2020-11-17 20:28:08 +08:00
@index90 这就很繁琐了啊,相当于“重新定义”一次,如果这样的话,我直接用设置 B 为匿名就行了。
sunshinev
2020-11-27 18:01:31 +08:00
为啥总是有些奇奇怪怪的用法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX