Pacific73 / gorm-cache

gorm v2的即插即用、无需修改代码的旁路缓存。An easy-to-use look-aside cache solution for gorm v2 users.
Apache License 2.0
111 stars 29 forks source link

Json tag冲突的问题 #6

Open FourLeafTec opened 1 year ago

FourLeafTec commented 1 year ago

I believe that you can read Chinese without barriers, if you have any difficulty in understanding the following, please let me know

通常golang的习惯,json tag和gorm tag都会写在同一个struct里

我希望给用户交付的Json需要忽略某些字段的时候就会在struct里设置json:"-"的tag来忽略这个字段,但是同时这个字段又是要参与逻辑的,比如password,salt之类的

同时这个struct也是gorm要返回的,这时由于cache的序列化是基于encoding/json的,就会同时忽略json:"-"的字段,也就是逻辑判断字段会少内容

解决方案:我目前的做法是引入jsoniter来替换掉encoding/json,因为jsoniter允许指定tagkey,并且jsoniter号称性能也比encoding/json要快,询问一下这个变更是否适合合并入主线

Pacific73 commented 1 year ago

你说的这种case下,确实需要一个额外的tagkey。一个建议,gorm-cache是针对model层的存取,是属于底层的模型。如果要设置json:"-",代表你传递出去的json本身不完全代表一个model,而是更上一层的业务逻辑。这种情况下,我更建议你额外写一个struct,字段基本与model相同,去掉json:"-"的部分,然后将model各字段对应的值赋在这个新struct中,然后再encode成json传递出去。jsoniter这个,很抱歉我这边暂时没有时间支持,如果你有时间跟进的话我会review代码的,感谢支持!

a67793581 commented 10 months ago

这个库不维护了吗

FourLeafTec commented 10 months ago

@a67793581 4个月前还有提交bug修复,我这个问题也算比较特殊了,如果你需要这个特性可以在go.mod里添加

replace github.com/Pacific73/gorm-cache => github.com/FourLeafTec/gorm-cache v0.0.0-20220923024629-57146cb89040

PR合并前或者无法合并的话我这边的fork都会一直存在