草庐IT

inheritence

全部标签

inheritance - 转到 : How to reference a field in an inherited struct

我有2个结构,其中一个继承了由typeCommonstruct{...}表示的所有结构中共有的值typeCommonstruct{IdintCreatedAttime.TimeUpdatedAttime.TimeCreatorIdint}typePoststruct{typePoststruct{CommonStatusTitlestringShortDescriptionstringContentstringCategoryIds[]intTagIds[]intUrlstringMainImageIdintKeywords[]string}但是,当我尝试创建Post结构的新实例时,如

inheritance - 如何在golang中扩展没有主体的功能

我想使用ippy04/messengerbot用于为FacebookMessenger构建机器人的库。为了接收新消息,图书馆使用了一种我无法理解的结构。在相关的librarysourcefile中定义了以下函数类型(但没有主体):typeMessageReceivedHandlerfunc(*MessengerBot,Event,MessageOpts,ReceivedMessage)这个类型然后getsattached到实际的机器人:typeMessengerBotstruct{MessageReceivedMessageReceivedHandler}稍后在代码中itgetscal

inheritance - golang中定义接口(interface)时如何思考?

我注意到放弃过去10年左右在Java和PHP中使用的OOP风格编程是多么困难。几周以来,我开始尝试golang(双关语),但我试图对golang的继承原则的组合感到自然。我将如何定义一个有用的接口(interface)来确保所有这些结构都能实现它?我试图想出一个有用的例子,它不涉及狗、人或奇怪的车辆结构......packagemaintypeStorestruct{namestringphonestring}typeHardwareStorestruct{Store}typeFoodStorestruct{Store}typeOnlineStorestruct{Storeurlstr

inheritance - 我如何组织这段从嵌入式类型重新定义方法的 Go 代码,以减少冗余并提高可维护性?

我有someexamplecode我在其中声明一个类型foo使用一些相互调用的方法(例如:foo.get,由foo.double和foo.toString调用)。我有另一种类型,bar,其中嵌入了foo并重新定义get.我被迫重新定义double和toString在bar,所以他们可以看到bar.get(而不仅仅是foo.get),但这些函数的主体与原始函数基本相同。有没有更好的方法来组织此代码,以避免冗余,同时仍然有bar实现与foo相同的接口(interface)?注意事项:上面组织的代码工作很好;它很难维护,因为当我重新定义最初在foo上声明的方法时在嵌入foo的类型上我必须仔细

inheritance - 继承是 Go 中嵌入式结构的特例吗?

在Go中,typeTxtstring只是typeTxtstruct{string}的快捷方式吗? 最佳答案 您所有问题的答案都是响亮的“不!”。将string嵌入到结构中基本上是一个无用的嵌入示例,因为string没有可以提升为嵌入类型的方法。构造typeTxtstring定义了一个名为Txt的新类型,底层类型是一个字符串。Txt具有不同的方法集,因为它是不同的类型。但由于它的底层类型是string,您可以自由地类型转换它们。typeTstring不是typeSstruct{string}的快捷方式,例如你做不到t:=T{"foo"

inheritance - 以另一个形式实现一个接口(interface)

我希望实现fmt.Stringer接口(interface)的String方法。然而,对于从Node派生的一组类型,它们的String实现将是它们必须提供的Print接口(interface)方法的包装器。如何为所有实现Node的类型自动提供String?如果我在某些基类上提供默认的String,我将失去对派生类型的访问权限(因此无法访问接口(interface)方法Print)。typeNodeinterface{fmt.StringerPrint(NodePrinter)}typeNodeBasestruct{}func(NodeBase)String()string{np:=Ne

inheritance - 如何任意扩展一个 "object"

我希望我的问题能说清楚。我已尽力使本文简洁明了,但如果有必要,请要求澄清。在JavaScript中,通常的做法是让“插件”通过创建新方法来修改现有对象。jQueryplugins例如,这样做。我需要在Go中做类似的事情,并且正在寻找最好的方法。最简单的实现方式就是将函数存储在map[string]func类型的数据结构中,然后用类似的方式调用这些新的“方法”:func(f*Foo)Call(namestring){fn:=f.FuncMap[name]fn()}如果我使用接口(interface)嵌入,我还可以获得更友好的API,例如:packagethingietypeThingie

inheritance - 在结构中嵌入两个同名的结构

如何在一个结构中嵌入两种同名的类型?例如:typedatastore{*sql.Store*file.Store}导致duplicatefieldStore。我知道这是有道理的,因为您将无法引用嵌入字段ds.Store但是您如何完成此操作?澄清一下,我想用datastore实现一个接口(interface)。为此,需要两个结构,因为它们的方法相互补充以创建接口(interface)。我有什么选择? 最佳答案 使用typealias,例子:typesqlStore=sql.Store//thisisatypealiastypedata

inheritance - Golang 方法覆盖

我有以下内容:typeBasestruct{}func(base*Base)Get()string{return"base"}func(base*Base)GetName()string{returnbase.Get()}我想用Get()的新实现定义一个新类型,这样我就可以使用新类型代替Base并且在调用GetName()的地方调用新的Get()执行。如果我使用Java,我会继承Base并覆盖Get()。我应该如何在Go中实现这一点?我想尽可能避免破坏性更改,因此不需要更改Base的现有使用者。我第一次尝试这个看起来像..typeSubstruct{Base}func(sub*Sub)

inheritance - golang 的继承方式,解决方法

我知道golang不支持继承,但是在goforthefollowing中正确的做法是什么?typeCommonStructstruct{IDstring}typeStructAstruct{CommonStructFieldAstring}typeStructBstruct{CommonStructFieldBstring}func(s*CommonStruct)enrich(){s.ID=IDGenerator()}如果具有以下功能,我如何重用代码以丰富所有其他“子结构”?funcdoSomthing(s*CommoStruct){s.enrich()}