2017-12-13 4 views
1

초기화하십시오. embed type 초기화 방법 및 관련 Q&A을 읽었습니다. 이 코드를 컴파일 할 때 내 문제가 무엇인지다른 pkg 유형을 광산에 삽입하고 문자로

, 내가 가지고 :

이 는 [오류] 알 수없는 필드 'feature.DefaultSshHelper'처음에 형 dala02

type FDH feature.DefaultSshHelper                                            

type dala02 struct {                                               
    Md5_v string                                                
    feature.DefaultSshHelper                                             
    //FDH                                                  
}                                                    

var x_01_h1_p = &dala02{                                              
    Md5_v: "",                                                
    feature.DefaultSshHelper: feature.DefaultSshHelper{                                      
     //FDH: FDH{ 
      // blabla 
    }, 
} 
// use it by a interface []feature.CmdFioHelper{x_00_h1_p}   

의 구조체 문자에, 나는 그것을 생각

내 보낸 문제 였으므로이 줄에 'FDH 형식을 추가했습니다. 기본값'이 사용되었습니다. 이제, 우리는이 오류를 가지고 :

[오류] 배열 또는 문자 조각에 입력 feature.CmdFioHelper로 (유형 *의 dala02)를 x_01_h1_p 사용할 수 없습니다 는 * dala02이 feature.CmdFioHelper (실종 Getnextchecker 방법)

를 구현하지 않습니다

그러나 feature.DefaultSshHelper의 포인터는 feature.CmdFioHelper (인터페이스)를 구현합니다. 그래서 dala02의 포인터도이를 구현해야합니다. 맞습니까? (참조 양식 효과적인 이동)

삽입이 서브 클래 싱과 다른 중요한 방법이 있습니다. 유형을 삽입 할 때 해당 유형의 메소드는 외부 유형의 메소드가되지만 호출 될 때 메소드의 수신자는 외부 유형이 아닌 내부 유형입니다.

질문이 컴파일 오류를 수정하는 방법은 무엇입니까? 나는 golang 전문가가 아니므로 조언 해 주셔서 감사합니다. :) BTW 나는 몇 가지 해결 방법을 찾는다.

답변

3

임베디드 필드를 참조 할 때 규정되지 않은 유형 이름이 필드 이름으로 사용되므로 임베디드 유형의 패키지 이름을 생략해야합니다.

Spec: Struct types:

유형하지만 명시 적 필드 이름으로 선언 된 필드가 익명 필드이며, 또한 포함 필드 나 구조체의 형식의 삽입했다. 포함 유형은 유형 이름 T 또는 비 인터페이스 유형 이름 *T에 대한 포인터로 지정해야하며 T 자체는 포인터 유형이 아닐 수도 있습니다. 정규화되지 않은 유형 이름이 필드 이름의 역할을합니다.

그래서 간단하게 쓰기 : 부족하다 type FDH feature.DefaultSshHelper

var x_01_h1_p = &dala02{ 
    Md5_v:   "", 
    DefaultSshHelper: feature.DefaultSshHelper{ 
    // blabla 
    }, 
} 

귀하의 다른 시도를이 유형 선언이 제로 방법과 새로운 유형을 만들어 같이 feature.DefaultSshHelper의 방법을 "상속"하지 않는 유형 FDH. 따라서 FDH을 포함하는 모든 유형에는 feature.DefaultSshHelper의 메소드가 부족합니다.

+0

답변 해 주셔서 감사합니다. –

관련 문제