Missing type in composite literal

go, struct

Solution

The assignability rules are forgiving for anonymous types which leads to another possibility where you can retain the original definition of `A` while allowing short composite literals of that type to be written. If you really insist on an anonymous type for the `B` field, I would probably write something like:

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)
}

Playground

Output

&main.A{B:struct { Some string; Len int }{Some:"xxx", Len:3}}

Problem

``` type A struct { B struct { Some string Len int } } ``` Simple question. How to initialize this struct? I would like to do something like this: ``` a := &A{B:{Some: "xxx", Len: 3}} ``` Expectedly I'm getting an error: ``` missing type in composite literal ``` Sure, I can create a separated struct B and initialize it this way: ``` type Btype struct { Some string Len int } type A struct { B Btype } a := &A{B:Btype{Some: "xxx", Len: 3}} ``` But it not so useful than the first way. Is there a shortcut to initialize anonymous structure?

Original source