Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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
Inheritance golang继承以实现主干类集合/模型_Inheritance_Go_Data Structures_Collections_Embedding - Fatal编程技术网

Inheritance golang继承以实现主干类集合/模型

Inheritance golang继承以实现主干类集合/模型,inheritance,go,data-structures,collections,embedding,Inheritance,Go,Data Structures,Collections,Embedding,我正在研究golang作为我的web后端的新goto语言。我目前在那里使用的语言是PHP,在那里我实现了一个类似于主干集合/模型结构的数据结构 excursus集合/模型 这意味着我有一个包含多个模型的集合模型有一个属性字典,用于存储实际的“公共数据”集合有多种方便的方法在模型数组上操作(排序、getByIndex、getByMatchingParameter等)模型也有自己的便利方法 在日常生活中,90%的“事物”以同样的方式呈现。例如,我可以像存储我的用户一样存储地址。拥有一个包含我的地址的

我正在研究golang作为我的web后端的新goto语言。我目前在那里使用的语言是PHP,在那里我实现了一个类似于主干集合/模型结构的数据结构

excursus集合/模型 这意味着我有一个包含多个
模型的
集合
<代码>模型
有一个
属性
字典,用于存储实际的“公共数据”<代码>集合有多种方便的方法在
模型数组
上操作(排序、getByIndex、getByMatchingParameter等)<代码>模型也有自己的便利方法

在日常生活中,90%的“事物”以同样的方式呈现。例如,我可以像存储我的
用户一样存储
地址
。拥有一个包含我的
地址的
地址集合
,我可以简单地要求我的
地址集合
给我所有
地址模型
,其中
城市=柏林
。在我的基类中实现这个匹配,我可以在我的
UserCollection
上做逻辑上相同的事情,给我所有被
deactivated=true
停用的用户

但有时(10%)我需要一种特殊的方法<例如,
地址的code>getGeoData
。现在,在我的oop世界中,我可以简单地创建一个扩展我的
BaseModel
的新类,添加我的方法,并在使用我的基类的任何地方使用我的扩展类

我的“我就是不明白” 这在Go中是如何工作的。我读了很多关于嵌入/合成的介绍。但我就是不明白这一点

这就是我的立场,请记住,这是我学习“继承”概念的游乐场,而不是为生产准备好的集合/模型实现

我得到的是,我还没有“理解”如何编写一个“泛型”方法来接受不完全继承的类型。我觉得我必须在某个地方使用一个接口来获得这种“继承”/“扩展类”的感觉。但我现在用的是。。。嗯


但也许我在go中实现我想要的结构的想法是完全错误的?也许有一种更优雅的方式。非常感谢任何提示

你很快就要把事情做好了,但是你把很多不同的事情都搞错了

完整示例:

  • 类型嵌入
  • 因此,您有两个模型
    User
    Address
    ,它们都共享公共字段,也可能共享方法。这是为这两个模型创建公共结构的一个很好的理由:
    Model
    ,如上面的链接所示所有三个结构都是不同类型的

  • 收藏
  • 您可以拥有接口集合或已定义类型集合。那么什么时候使用哪一种呢

    如果您有一个地址集合,则定义的地址类型如下:
    键入AddrCollection[]*地址
    。然后在
    AddrCollection
    type上实现您想要的任何方法

    如果您有一个模型集合,则类似地定义
    type ModelCollection[]*Model
    ,但将
    Address
    传递给
    ModelCollection
    将需要“提取”嵌入的类型

    如果您有一个某物的集合,那么就定义一个接口集合(
    DescriberCollection
    ,在本例中),但是您不会在其上定义
    GetByAddress()
    ,它将只存在于
    AddrCollection

  • 接口

  • 它们没有字段,只定义要实现的方法签名。In-Go接口通常被接受,并且永远不会返回,这给了你一个干净的、面向目标的设计的好处。接口是一种允许其他用户(或其他包)使用您的包/库的方式,他们不需要实现您的类型,而需要实现特定的方法。他们可以重用您定义的类型,也可以插入自己的接口实现。那么什么是接口,这是一种说法:这里是一组方法签名,只要你实现了它们,你就可以使用我的软件包你很快就能把它做好,但是你把多个不同的东西混在一起了

    完整示例:

  • 类型嵌入
  • 因此,您有两个模型
    User
    Address
    ,它们都共享公共字段,也可能共享方法。这是为这两个模型创建公共结构的一个很好的理由:
    Model
    ,如上面的链接所示所有三个结构都是不同类型的

  • 收藏
  • 您可以拥有接口集合或已定义类型集合。那么什么时候使用哪一种呢

    如果您有一个地址集合,则定义的地址类型如下:
    键入AddrCollection[]*地址
    。然后在
    AddrCollection
    type上实现您想要的任何方法

    如果您有一个模型集合,则类似地定义
    type ModelCollection[]*Model
    ,但将
    Address
    传递给
    ModelCollection
    将需要“提取”嵌入的类型

    如果您有一个某物的集合,那么就定义一个接口集合(
    DescriberCollection
    ,在本例中),但是您不会在其上定义
    GetByAddress()
    ,它将只存在于
    AddrCollection

  • 接口
  • 它们没有字段,只定义要实现的方法签名。In-Go接口通常被接受,并且永远不会返回,这给了你一个干净的、面向目标的设计的好处。接口是一种允许其他用户(或其他包)使用您的包/库的方式,他们不需要实现您的类型,而需要实现特定的方法。它们可以重用您定义的类型,也可以插入