Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 将一种类型的其他pkg嵌入到我的pkg中,并通过literal初始化它_Oop_Go_Struct_Embedding_Composite Literals - Fatal编程技术网

Oop 将一种类型的其他pkg嵌入到我的pkg中,并通过literal初始化它

Oop 将一种类型的其他pkg嵌入到我的pkg中,并通过literal初始化它,oop,go,struct,embedding,composite-literals,Oop,Go,Struct,Embedding,Composite Literals,我读了如何初始化,和一个相关的 我的问题是在编译此代码时,我得到: [Error]类型为dala02的结构文字中的未知字段“feature.DefaultSshHelper” type FDH feature.DefaultSshHelper

我读了如何初始化,和一个相关的

我的问题是在编译此代码时,我得到:

[Error]类型为dala02的结构文字中的未知字段“feature.DefaultSshHelper”

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}        
第一次,我认为这是一个导出问题,所以我添加了这一行“type FDH feature.DefaultSshHelper”。现在,我们有一个错误:

[错误]无法将x_01_h1_p(类型*dala02)用作类型特征。CmdFioHelper位于数组或切片文字中: *dala02未实现feature.CmdFioHelper(缺少Getnextchecker方法)

但是feature.DefaultSshHelper指针确实实现了feature.CmdFioHelper(接口)。所以dala02的指针也应该实现,对吗?(参考表格生效日期)

嵌入与子类化有一个重要的区别。当我们嵌入一个类型时,该类型的方法成为外部类型的方法,但是当调用它们时,方法的接收者是内部类型,而不是外部类型


问题是如何修复这个编译错误,哪一行是错误的?我不是高朗的专家,谢谢你的建议:)。顺便说一句,我确实找到了一些解决办法。

当您引用嵌入字段时,必须省略嵌入类型的包名称,因为非限定类型名称充当字段名称

用类型声明但没有显式字段名的字段是匿名字段,也称为嵌入字段或结构中类型的嵌入。嵌入类型必须指定为类型名
T
或指向非接口类型名
*T
的指针,并且
T
本身不能是指针类型非限定类型名用作字段名。

所以简单地写下:

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

您的另一次尝试
type FDH feature.DefaultSshHelper
失败,因为此类型声明创建了一个具有零方法的新类型:type
FDH
不会“继承”feature.DefaultSshHelper的方法。因此,任何嵌入
FDH
的类型也将缺少
功能的方法。DefaultSshHelper

谢谢您的回答。