2017-12-13 9 views
1

で初期化します。embed typeを初期化する方法と関連するQ&Aを読んでいます。他のpkgのタイプを私の中に埋め込み、リテラルで

このコードをコンパイルするときに私の問題とは何か、私が得た:

[エラー]、未知のフィールド「feature.DefaultSsh​​Helper」タイプの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型のタイプ.DefaultSsh​​Helper'を追加しました。今、私たちは、このエラーを持っている:

[エラー]は、配列またはスライスリテラルに型feature.CmdFioHelperとしてx_01_h1_p(タイプ* dala02)を使用することはできません

: * dala02はfeature.CmdFioHelper(行方不明Getnextchecker法)

を実装していません。

しかし、feature.DefaultSsh​​Helperのポインタはfeature.CmdFioHelper(インタフェース)を実装しています。したがって、dala02のポインタもそれを実装する必要があります。

埋め込みがサブクラス化と異なる重要な方法があります。型を埋め込むとき、その型のメソッドは外部型のメソッドになりますが、呼び出されるときにはメソッドの受信側が内側の型であり外側の型ではありません。

質問このコンパイルエラーをどのように修正するのですか。どの行が間違っていますか?私はgolangの専門家ではありません、あなたの助言のおかげで:)。ところで私はいくつかの回避策を見つける。

答えて

3

埋め込みフィールドを参照するときは、埋め込み型のパッケージ名を省略する必要があります。これは、非修飾型の名前がフィールド名として機能するためです。

Spec: Struct types:

タイプが、明示的なフィールド名で宣言フィールドが匿名フィールドあり、また埋め込みフィールドまたは構造体のタイプの埋め込みと呼ばれます。埋め込み型は、型名Tまたは非インターフェイス型の型名*Tへのポインタとして指定する必要があります。また、T自体はポインタ型ではない可能性があります。 修飾されていない型名がフィールド名として機能します。

だから、単に書く:タイプFDHfeature.DefaultSshHelperのメソッドを「継承」しません:この型の宣言がゼロのメソッドを使用して新しい型を作成して足りtype FDH feature.DefaultSshHelper

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

あなたの他の試みを。したがって、FDHを埋め込むタイプには、feature.DefaultSshHelperというメソッドもありません。

+0

あなたの答えをありがとう。 –

関連する問題