golang的匿名struct

CodingCode · 2019-12-28 05:32:40

我是这样理解的,引用文章中的代码

func main() {
    v := struct {
        A int
        B string
        C struct {
            C1 int
            C2 string
        }
    } {
        10,
        "bb",
        struct {
             C1 int
             C2 string
        } {
             100,
             "ccc"
        },
    }

    fmt.Printf("%+v\n", v)
}

C 的类型为下面这一坨

struct {
    C1 int
    C2 string
}

这一坨整体是C的类型,就像 var name string ="aaa" string 是name的类型,如果像文章中下面这样写的话

func main() {
      v := struct {
                 A int
                 B string
                 C struct {
                      C1 int
                      C2 string
                 }
               } {
                  10,
                  "bb",
                  {100, "ccc"},
           }

          fmt.Printf("%+v\n", v)
}

给 C 赋值的时候是不知道 C 的类型,不知道类型就导致没法分配内存,所以编译错误,编译器提示也是丢失类型

$ go build test.go
# command-line-arguments
./test.go:16:9: missing type in composite literal
#1