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

Golang中的空字段或不需要的struct字段

关胜
2023-03-14
问题内容

我对Go之类的打字语言还是陌生的,并且正在尝试学习实现事物的最佳方法。

我有两个表示将插入到mongodb数据库中的模型的结构。一个结构(投资)具有另一个结构(组)作为其字段之一。

type Group struct {
    Base
    Name string `json:"name" bson"name"`
}

type Investment struct {
    Base
    Symbol string `json:"symbol" bson:"symbol" binding:"required"`
    Group  Group  `json:"group" bson:"group"`
    Fields bson.M `json:"fields" bson:"fields"`
}

我遇到的问题是在投资模型中,不需要组。如果没有组,我认为最好不要将其插入数据库。在Go中处理这种数据库模型的最佳方法是什么?


问题答案:

tl; dr
:使用,omitempty,如果您需要担心零值和null
/未指定之间的差异,请执行GitHub API的操作并使用一个指针。

无论jsonbson支持,omitempty标签。对于json,“空值为false,0, 任何nil指针
或接口值以及任何长度为零的数组,切片,映射 或字符串 ”(json
docs)。对于bson,,omitempty表示“如果未将类型的值设置为零或将空切片或映射设置为空,则仅包括该字段”,并且零值包括空字符串和nil指针(bson
docs)。

因此,如果您确实需要一个Group结构,则可以放一个*Groupin,当指针为nil时,它不会被存储。如果Investment只需要保留组
,那就更简单了:""因为组名可以防止存储组密钥。

bson默认情况下已经使用小写的字段名称,因此您可以在匹配时从struct标记中忽略它。json将默认为大写名称,因此如果需要小写,请在标签中指定小写名称。

因此,最好的情况是,也许您可​​以使用:

type Investment struct {
    Base
    Symbol string `json:"symbol" binding:"required"`
    Group string  `json:"group,omitempty" bson:",omitempty"`
    Fields bson.M `json:"fields"`
}

如果您遇到过类型(“”,0,假等)的零值不同于“未指定”的字段,则可以执行GitHub
API的操作并将指针放在结构中
-本质上是*Group技巧的延伸。



 类似资料:
  • 但我们只对其中一些答案感兴趣。 注意:以上只是展示结构的示例。每个映射都有几十个元素。 我们真正需要的是:https://github.com/pact-foundation/pact-specification/issues/38,但它是计划在V.4中使用的。与此同时,我们正在尝试一种不同的方法。我现在尝试做的是指定列表的每个元素都是一个非空映射。另一种方法是指定列表的每个元素都不为空。这些都可

  • 问题内容: 我在寻找一个struct的字符串字段遍历,所以我可以做一些清理/验证(与,等)。 现在,我有一个混乱的开关盒,它并没有真正的可扩展性,而且由于这并不是我的应用程序(Web表单)的热点,因此在这里利用杠杆作用似乎是一个不错的选择。 我对于如何实现此功能有点障碍,反射文档对我来说有点困惑(我一直在研究其他一些验证包,但是它们太笨重了,我正在使用大猩猩/模式已用于解组部分): 遍历该结构 对

  • 我是一名spring boot学习者,所以我一直在尝试创建一些基本的spring boot应用程序。我试图运行开发的应用程序时出错。 我的错误是[[https://i.stack.imgur.com/oyQDi.png][1]][1] java: ItemDetails.java:[软件包名称:io.ajithan.springbootstarter.model] ItemResponse.jav

  • 结构没有问题。spring boot可以扫描UserMapper,但不能扫描UserService。我试着给我的UserService@Mapper组件,然后它就可以被扫描了。但我不知道如何使用其他方法进行扫描。我尝试了@服务,但不起作用。

  • 我使用Symfony 5.3。我有一个表单,有3个字段没有映射到任何实体: "原因"-文本, use_predefined复选框 "predefined_reason"-下拉列表。 我构建的表单如下(一个片段): “原因”字段应根据需要显示在UI中,但其他两个字段不应显示。但是,在验证过程中,如果选中了复选框“预定义的原因”,则第一个字段不应为必填字段,而“预定义的原因”应为必填字段。

  • 问题内容: 我正在尝试按照AngularJS示例对所需字段进行内联验证。但是,当使用a时,它似乎对我不起作用。 JSFiddle 知道我做错了什么或我可以做些什么来解决吗? 问题答案: 不幸的是,您不能那样做。输入元素不喜欢动态生成名称。您将需要使用ng- form作为子表单并包装重复的元素。这是您的小提琴的叉子:http : //jsfiddle.net/p26VQ/