草庐IT

inherited-constructors

全部标签

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的类型上我必须仔细

go - ([]Constructor)(nil) 是什么意思

我在阅读中间件的链接软件爱丽丝的源代码,发现表达式:funcNew(constructors...Constructor)Chain{returnChain{append(([]Constructor)(nil),constructors...)}}我对代码完全没有问题,除了我以前从未见过表达式([]Slice)(nil)。有没有人有关于这种表达的任何信息? 最佳答案 它将constructors参数复制到一个新的slice中,将其分配给Chain字面量中的一个字段,并返回新的结构。相当于funcNew(constructors..

constructor - "constructors"是否有标准的惯用 Go?

鉴于以下情况:typeAStructstruct{m_Mapmap[int]bool}在这种情况下,AStruct的实例在AStruct.m_Map初始化之前不能使用:m_Map=make(map[int]bool,100)在这种情况下,我已经开始为我的结构编写一个Init()函数:func(s*AStruct)Init(){s.m_Map=make(map[int]bool,100)}我不是特别在意这种设计,因为它要求(s*AStruct)Init()是公开的,并且要求客户端在使用AStuct的实例之前显式调用它-在此期间,AStuct的一个不可用实例在那里,等待生成panic。我可

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