2013-07-28 2 views
14
type A struct { 
    B struct { 
     Some string 
     Len int 
    } 
} 

간단한 질문입니다. 이 구조체를 초기화하는 방법? 나는 같은 것을 할 싶습니다 :누락 된 복합 리터럴 형식

missing type in composite literal 

물론, 내가 분리 된 구조체 B를 만들고 이런 식으로 초기화 할 수 있습니다 :

type Btype struct { 
    Some string 
    Len int 
} 

type A struct { 
    B Btype 
} 

a := &A{B:Btype{Some: "xxx", Len: 3}} 

a := &A{B:{Some: "xxx", Len: 3}} 

예상대로 내가 오류를 받고 있어요

그러나 첫 번째 방법보다 유용하지는 않습니다. 익명 구조를 초기화하는 지름길이 있습니까?

답변

11

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

Playground


출력을

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