Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[*] 如何保证新增和删除多个表的数据时的顺序 #758

Open
zuzuviewer opened this issue Sep 14, 2024 · 7 comments
Open

[*] 如何保证新增和删除多个表的数据时的顺序 #758

zuzuviewer opened this issue Sep 14, 2024 · 7 comments

Comments

@zuzuviewer
Copy link

zuzuviewer commented Sep 14, 2024

Description

如何保证新增和删除多个表时的顺序
比如在一个删除请求中删除主表和其子表数据,如何保证子表的数据会先被删除,java中可以维持map的顺序,但是golang中无法保证map的访问顺序

@zuzuviewer zuzuviewer changed the title [*] 如何保证删除多个表的数据时的顺序 [*] 如何保证新增和删除多个表的数据时的顺序 Sep 14, 2024
@TommyLemon
Copy link
Collaborator

按 JSON 传参上下顺序。
go 可以用第三方的有序 map,例如
https://github.com/elliotchance/orderedmap

另外 APIJSON 后端 Golang 版也有几个,可以点亮 🌟 Star 支持下热心的作者哦~
https://github.com/search?q=apijson+language%3AGo&type=repositories&l=Go&s=stars&o=desc

@zuzuviewer
Copy link
Author

有序map是不得已的选择,我更想知道的是有没有不依靠上下顺序,而是依靠规范来决定先后执行顺序的方案

@TommyLemon
Copy link
Collaborator

TommyLemon commented Sep 19, 2024

可以新增关键词 "@sort": "key1,key5,key3..." 来指定每层的顺序,但这样前端等调用房用起来就麻烦不少,不推荐。
还是直接在后端支持有序 map 解析、前端支持有序 map 穿参更好,一次性的工作比每个请求每层都加字段工作量少很多。

@zuzuviewer
Copy link
Author

zuzuviewer commented Sep 20, 2024

好的,那就是当前没有已有的规范支持这个场景。因为对我们来说更理想的情况是符合当前语言(golang)的特性,而不是通过增加第三方库来解决,所以我会在我的服务中考虑使用“@sort”关键词来支持该场景,以下考虑看是否合适:

  1. @sort关键词不是必须的,没有则按照当前map顺序操作,有则按照sort顺序操作,这样可以保持兼容性
  2. @sort不用包含当前层级所有key,没有包含的key会排在sort包含的key后面按照当前map顺序执行

@TommyLemon
Copy link
Collaborator

go map 随机乱序,凡是要保证顺序的 key 都必须写在 @sort 里,不需要保证顺序的可省略确实更好

@TommyLemon
Copy link
Collaborator

你的目的是实现 APIJSON 的 Go 版后端 ORM 库
#38

还是做 客户端 调用 APIJSON 请求?

@zuzuviewer
Copy link
Author

都有

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants