当前位置: 首页 > 面试题库 >

嵌入式方法可以访问“父”字段吗?

韩善
2023-03-14
问题内容

背景

我已经做了大量的规范阅读和代码测试,我认为答案是否定的,但是我想确保自己没有遗漏任何东西。

目标

基本上,我正在尝试为Go创建Active
Record样式的ORM,因为我喜欢它的可读性以及从后端数据存储中抽象出来的方式。我宁愿写,也user.Save()不愿data.Save(user)在用户结构上嵌入常见的CRUD方法。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := Foo{Bar: &Bar{}, Name: "name"}
    test.Test()
}

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    fmt.Println("Foo.Method()")
}

type Bar struct {
}

func (s *Bar) Test() {
    t := reflect.TypeOf(s)
    v := reflect.ValueOf(s)
    fmt.Printf("model: %+v %+v %+v\n", s, t, v)
    fmt.Println(s.Name)
    s.Method()
}

http://play.golang.org/p/cWyqqVSKGH

有没有一种方法可以使嵌入式方法(例如:s.Name或)访问顶级字段(不确定Go中正确的术语是什么)s.Method()

谢谢您将时间捐赠给新的Gopher。


问题答案:

Go不会为您提供任何支持:Test方法的接收者是一个Bar指针,并且无法判断它是否被嵌入。

如果您确实想走这条路,一种选择是将一个interface{}成员添加到其中,Bar并要求将其类型设置为包含类型。初始化此成员可能是创建值的人的责任,或者可能要求调用者将值传递给某些ORM方法进行设置。这不是特别漂亮,但是可能是您可以做的最好的事情。

有了这样的方法,将API构造为db.Save(user)而不是真的很糟糕user.Save()吗?前者提供了一种扩展到多个数据库的明显方法,而后者似乎更可能依赖于全局状态。



 类似资料:
  • 问题内容: 我想在结构上定义一个方法来验证http请求。但是我在访问结构域时遇到一些问题。 有我的代码。 运行此代码时,得到以下结果 有什么方法可以访问Validate2()方法上的Validate()方法上的结构字段? 问题答案: 您不能从内部结构访问外部结构字段。仅内部字段来自外部。您可以做的是:

  • 我正在用React和Redux构建一个前端应用程序,我正在使用axios来执行我的请求。我想访问响应标题中的所有字段。在我的浏览器中,我可以检查标头,我可以看到我需要的所有字段都存在(如令牌、uid等),但是当我调用时 我得到的只是 这里是“我的浏览器网络”选项卡,您可以看到所有其他字段都存在。 最好的。

  • 问题内容: 这是指帖子 ..无法回复或评论任何这样创建的新帖子。为什么是我的 发出警告-应该以静态方式访问静态字段MyUnits.MILLSECONDS吗?谢谢。 问题答案: 因为当您访问静态字段时,您应该在类(或本例中为枚举)上执行此操作。如 不在实例中 编辑 要解决 为什么这样 的问题:在Java中,当您将声明为时,就是说它是类的成员,而不是对象(因此为什么只有一个)。因此,在对象上访问它是没

  • 问题内容: JPA实体类是否可以包含两个嵌入式()字段?一个例子是: 在这种情况下,a 可以包含两个实例-家庭和工作。我在Hibernate的实现中使用JPA。当我使用Hibernate Tools生成架构时,它仅嵌入一个。我想要的是两个嵌入式实例,每个实例的列名都经过区分或在前面加上一些前缀(例如home和work)。我知道,但是这要求每个属性都应单独覆盖。如果嵌入的对象()变大,那么这会变得很

  • 问题内容: 我知道这不是一种能够在React组件中执行类似操作的功能方法,而且我似乎无法在React组件实例上找到任何导致父级的属性,但是我只是希望能够在需要的地方做一些自定义的事情。 在任何人浪费时间解释这不是功能性的React“方法”之前,请理解我需要这样做,因为我正在尝试实现以下目标: 为Meteor的Spacebars模板引擎构建一个Transpiler,该引擎的渲染模型确实考虑了父组件/

  • 我想让我的实体中的@Embedded字段“foo”在JPA 2.0中不可更新 如果我有另一个实体而不是@Em的可嵌入,我可以使用@列注释的updatable=false属性,但@Em天呐没有这样的属性 我发现了一个示例,即@Col的(updatable=false)注解直接用在了嵌入式数据库的字段上。 ..但是,如果我将 FooEmbedable 也用于另一个我希望它可以更新的表,会发生什么? 我