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

Golang嵌入式结构类型

闻梓
2023-03-14
问题内容

我有以下几种类型:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

我可以使用use v := NamedValue{Name: "fine", Value: 33},但是我 不能 使用e := ErrorValue{Name: "alpha", Value: 123, Error: err}

似乎可以嵌入语法,但是使用它无效吗?


问题答案:

嵌入式类型是(未命名的)字段,由不合格的类型名称引用。

规格:结构类型:

使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式
字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称T或指向非接口类型名称的指针*T,并且T本身不能为指针类型。
非限定类型名称充当字段名称。

因此,请尝试:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

如果您省略了复合文字中的字段名称,也可以使用:

e := ErrorValue{NamedValue{"fine", 33}, err}

在Go Playground上尝试示例



 类似资料:
  • 问题内容: 是否可以在不使用嵌入式结构的情况下继承类型的方法? 代码的第一个片段是将结构嵌入其中的工作代码,我可以在上调用该方法。我不喜欢的是,当我初始化时,我有(?)来初始化其中的结构。有没有解决的办法? 最终,我想做以下事情。where 是类型和初始化位置,也不需要初始化结构。以下代码不起作用,但可能清楚我的目标是什么。 我将添加更多使用的方法的结构,这就是我要问的原因。如果只拥有,我将拥有可

  • 问题内容: 假设,我运行一个API,并且当用户在用户资源上发出GET请求时,我将以JSON的形式返回相关字段 如您所见,User中的Secret字段具有。这意味着在大多数操作中,我都不想返回。在这种情况下,响应将是 忽略该字段将不会返回该字段机密。 现在,我将打开一个我想返回秘密字段的管理员专用路由。但是,这将意味着复制User结构。 我当前的解决方案如下所示: 有没有一种方法可以将User嵌入a

  • 问题内容: 我正在尝试学习Go,并且在这里找到了很好的资源。 下面给出了有关方法重载的示例: 是否可以调用“基本”结构的(人类)方法,例如。sam.Human.SayHi()向下转换不起作用(因为没有正确的类型层次结构?) 问题答案: 您可以通过使用嵌入类型名称的名称调用父级成员来访问父级结构的嵌入结构。那是一个大嘴巴,所以可能更容易证明它。 产出

  • 问题内容: 我想解组结构定义为: 使用似乎只对使用的,而忽略了场:https://play.golang.org/p/WUBfzpheMl 我有一个笨拙的解决方案,我可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。 谢谢! 问题答案: 发生这种情况是因为嵌入在中。这意味着当json库调用unmarshaler时,它最终以on调用了。 因此,在内部,参数包含整个j

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

  • 我希望在使用neo4j数据库的应用程序中使用此结构。 在这里,我将在三个不同的服务器上部署我的应用程序,每个服务器都有自己的嵌入式neo4j数据库。 我希望所有数据库都自动同步。 它适合我的大数据应用程序吗? 我正在使用SpringDataNeo4j,如何在SDN中配置此结构。 我需要企业版的neo4j为此。 有没有其他可以使用的框架/技术? 我几乎完成了这样的结构 我的Web应用程序部署在 >