wln32

Results 43 comments of wln32

> @wln32 1、对于整体结构不使用接口来实现序列化和反序列化确实能省不少性能,因为大多是entity的整体结构的字段都是基本数据类型,但是对于某字段使用自定义类型的时候,用接口来实现会更合适,使用RegisterDatabaseConvertFunc和 RegisterGoTypeConvertFunc 来注册的话,自定义结构体的声明和(正/反)序列化逻辑会比较分散,如果不分散的话就需要搞一个初始化来做统一注入,相对来说比较麻烦。 2、没看太明白,我估计应该就是我说的自定义结构体实现正反序列化接口的方式,目前几个主流的orm都是使用的这种方式来实现自定义类型的正反序列化 3、All,One可以保留,方面开发者拿到数据在不同场景输入不同类型的查询结果。但是对于Scan方法的对基本数据类型和基本数据类型切片的支持,这个确实很实用 4、我目前没有场景使用With,暂时做不了建议 > 1. 对于整体结构不使用接口来实现序列化和反序列化确实能省不少性能,因为大多是entity的整体结构的字段都是基本数据类型,但是对于某字段使用自定义类型的时候,用接口来实现会更合适,使用RegisterDatabaseConvertFunc和 RegisterGoTypeConvertFunc 来注册的话,自定义结构体的声明和(正/反)序列化逻辑会比较分散,如果不分散的话就需要搞一个初始化来做统一注入,相对来说比较麻烦。 如果类型全部是由你自己定义的,当然可以实现为接口,但是有些场景下,类型是第三方库的,那么你就不能为其实现接口了,除非你基于这个类型新定义个类型,然后实现接口,不过这样的话,如果用户升级框架,会造成一些工作量,如果使用RegisterGoTypeConvertFunc则完全没有负担,原来的类型什么的都不用改 > 2. 没看太明白,我估计应该就是我说的自定义结构体实现正反序列化接口的方式,目前几个主流的orm都是使用的这种方式来实现自定义类型的正反序列化 如果要实现接口的话,我建议还是跟标准库走,实现sql.Scanner和sql.Valuer即可,不需要再定义一套新的接口 且本次更新是支持sql.Scanner接口的,由于这次更新只涉及到查询相关的,插入相关的我没看源码,不知道有没有对sql.Valuer做支持 > 3. All,One可以保留,方面开发者拿到数据在不同场景输入不同类型的查询结果。但是对于Scan方法的对基本数据类型和基本数据类型切片的支持,这个确实很实用 Scan支持基础类型和基本类型切片,这个我也比较支持

> > @gqcn 因为已经使用了标准库 AST 来做语法分析,所以这个测试用例不应该属于框架职责范畴。 Because GoFrame have used AST for parsing,the testing unit case should not be the responsibility of GoFrame. > > 用 AST 能保证解析正确,但不能保证生成正确。测的不是 AST,测的是生成逻辑。 The...

> 涉及较核心逻辑代码调整,需要花点时间`review`。 ======== 其实设置default 和in tag 那里可以直接用反射赋值了,不需要再去判断data里有没有同名的,这样实现也很直观,如果data中设置了值,那后面再走gocnv.Struct这里赋值就好了

> @wln32 这块代码看起来有点花时间,能否描述下你的改动思路? @gqcn 先放放吧,后面在更新, 其实这块的代码,可以先做请求校验,然后在用gconv做赋值,还有defaut和header那里也可以再优化优化

> @wln32 这个改进思路非常不错!但是有些小瑕疵,我和你一起协作改进一下,需要花一点点时间。 哪些问题呢?

> @wln32 Hello handsome, any updates? 应该没了,再更新就是valid那块的缓存起来,gvalid的代码看起来有点麻烦

对于默认值的设置,目前没有递归的检查结构体,可以把HelloOption改成匿名的结构体试试

@zcyc 可以试试给字段实现一个json.Unmarshaler接口

@fainc @gqcn 当这样定义验证的规则的时候,由于没有Xx参数,所以required-if验证规则会不通过,返回"The Xx field is required" Xx int json:"xx" v:"required-if:method,level|min:0" 但是如果反过来,验证min规则其实是没有通过的,返回了错误 但是由于不是required系列的规则,直接跳出了循环 没有设置errorMaps变量 函数的路径:gogf\gf\[email protected]\util\gvalid\gvalid_validator_check_struct.go ![1](https://github.com/gogf/gf/assets/49137144/35e1f42d-f67d-4bdb-a6e2-b09f6b0cbc6c)

> @wln32 搞一下? @fainc 搞不了,验证那块的代码一堆if判断,你可以尝试在我分析出来的那块代码加个if判断试试,看看能不能满足你想要的结果