当前位置: 首页 > 网络应用技术

GIN框架中请求参数的零值

时间:2023-03-05 22:05:52 网络应用技术

  当框架处理前端请求时,将绑定参数/数据用于结构是一个常用数据,但在某些情况下可能会发生问题

  例如,现在有一个接口用于更新用户总和,即接收两个字段:,这两个字段不要求它们必须同时传递。请求,更新哪个字段哪个字段获取哪些字段

  两个字段都可以通过,但是如果仅通过一个字段并且后端用于将数据绑定到结构,则可能存在问题。

  如果前端只有一个字段,则没有字段,则该值为零值,也就是说,它不会判断这是零还是前端确实通过。

  这个问题很容易解决,两种方法

  首先,将结构中的字段更改为指针类型

  指针的零值,之后,字段值自然没有值

  但是,将结构的所有字段定义为指针的类型有点不一致,并且操作指针不方便,并且更有可能存在错误(例如,空指针的问题)

  第二个是使用帮助的方法

  如果您有任何疑问,我不需要使用它,只需将参数()/data()映射到

  但这将导致另一个问题。一个重要的好处是,可以根据结构中定义的规则进行验证。如果您直接阅读它,则必须自己实现字段验证逻辑。不幸的是,如果您有更多内容,则必须编写一个大字符串或仅仅以实现乏味的通用 - 借口检查方法。

  因此,请考虑被用于验证,然后使用它来区分零值,即对请求要求的数据进行两次阅读

  以请求为例:

  截至目前,仅验证并获得了请求数据。下一步是更新数据库操作。例如

  因为它仅用于检查数据请求是否合法,所以无法确定零值,因此您不能基于基础直接操作数据库

  您可以告诉携带请求的哪些参数/数据,但是可能有一些不必要的数据。例如,当您要更新用户和属性时,数据表仍然是列以确定用户是否已取消,因此,如果更新方法如下,则会出现问题:

  如果中间存在属性,则数据表中的字段也将更新,这不是预期的结果,因此您需要删除不需要的属性。您可以复制仅包含所需更新属性的部分。您也可以直接删除它。其他属性仅保留所需的属性。前一个是一个例子

  这里只有两个字段,所以还可以,但是如果您需要更新大多数条件,则需要编写最有条件的语句。

  完整代码:

  例子:

  可以看出,由于有更多的计算过程,请求的零值的条件将带来更高的资源消耗,因此您应该尽可能避免这种情况的出现。携带完整必需参数的客户端是更好的解决方案。