Oop 将一种类型的其他pkg嵌入到我的pkg中,并通过literal初始化它
我读了如何初始化,和一个相关的 我的问题是在编译此代码时,我得到: [Error]类型为dala02的结构文字中的未知字段“feature.DefaultSshHelper”Oop 将一种类型的其他pkg嵌入到我的pkg中,并通过literal初始化它,oop,go,struct,embedding,composite-literals,Oop,Go,Struct,Embedding,Composite Literals,我读了如何初始化,和一个相关的 我的问题是在编译此代码时,我得到: [Error]类型为dala02的结构文字中的未知字段“feature.DefaultSshHelper” type FDH 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
失败,因为此类型声明创建了一个具有零方法的新类型:typeFDH
不会“继承”feature.DefaultSshHelper的方法。因此,任何嵌入FDH
的类型也将缺少功能的方法。DefaultSshHelper
谢谢您的回答。