2015-01-16 1 views
1

나는 이런 종류의 선언 건너 온 :형식 선언에 익명 필드가 있습니까?

type Handler func(*Conn) 

type Server struct { 
    Handshake func(*Config, *http.Request) error 
    Handler 
} 

(이 https://github.com/golang/net/blob/38c17adf51120973d1735785a7c02f8ce8297c5e/websocket/server.go#L55-L66

Server 구조의 두 번째 필드는 익명의 단순화 된 버전 단지가 입력되지 않고 이름입니다

.. 다음은 타입 선언을위한 문법입니다 (https://golang.org/ref/spec#Type_declarations) :

TypeDecl  = "type" (TypeSpec | "(" { TypeSpec ";" } ")") . 
TypeSpec  = identifier Type . 

그리고 분명히 식별자 이름이 필요합니다. 그러나 문법을 포함하고있는 참조 된 섹션은 익명 필드도 언급합니다.

왜이 구문이 정확하고 익명 필드가 사용되는지 이해할 수 없습니다.

답변

2

유형뿐만 아니라 구조와 관련이있는 문법 부분을보고 싶습니다. 참조 : Struct typesAnonymousField 사용. TypeSpec에 대한 생산을 보면서 잘못된 장소에 집중하고 있습니다. 대신, FieldDecl을보십시오; 문법에 따라 우리는 이름이 붙은 필드 (IdentifierList Type) 또는 익명 필드 (AnonymousField)의 두 가지 가능성이 있음을 알 수 있습니다.

익명 필드는 일반적으로 embedding에 사용됩니다. 귀하의 예에서 Server은 해당 필드가 포함되어 있기 때문에 Handler처럼 작동합니다.