V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
miencun
V2EX  ›  Go 编程语言

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

  •  
  •   miencun · 2020-11-17 11:50:10 +08:00 · 1724 次点击
    这是一个创建于 1471 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个

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

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

    10 条回复    2020-11-27 18:01:31 +08:00
    miencun
        1
    miencun  
    OP
       2020-11-17 12:05:12 +08:00
    对了,我不想用
    var a A
    a.B.Count = 1
    a.B.Status = 2
    这种直接赋值的方法
    yrj
        2
    yrj  
       2020-11-17 12:09:45 +08:00 via iPad
    那就 type 一个 b 呗。
    type b struct……
    gy0624ww
        3
    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
        4
    miencun  
    OP
       2020-11-17 12:14:55 +08:00
    两位老哥。 @yrj @gy0624ww

    我要嵌套自身 Struct,因为需要输出的 json 很复杂,嵌套自身这样看起来很爽
    zealic
        5
    zealic  
       2020-11-17 12:35:05 +08:00   ❤️ 1
    ```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
        6
    keepeye  
       2020-11-17 12:42:09 +08:00
    只能拆出来定义
    airplayxcom
        7
    airplayxcom  
       2020-11-17 13:23:21 +08:00 via iPhone
    我杀我自己?
    index90
        8
    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
        9
    miencun  
    OP
       2020-11-17 20:28:08 +08:00
    @index90 这就很繁琐了啊,相当于“重新定义”一次,如果这样的话,我直接用设置 B 为匿名就行了。
    sunshinev
        10
    sunshinev  
       2020-11-27 18:01:31 +08:00
    为啥总是有些奇奇怪怪的用法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2542 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:54 · PVG 23:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.