wln32

Results 11 issues of wln32

请求开始的时候,直接反射验证数据是否合法,并返回reflect.Value,后续所有操作可以不用重复反射对象 修正了测试 ghttp_z_unit_feature_request_struct_test.go:510

slow reviewing

### 本次改动只修改了Scan方法的底层的类型转换实现,会走新的逻辑,依旧是先把数据转换到map,然后在转到结构体上, 和之前的行为保持一致,不会导致不兼容。 从map到结构体的转换和之前不同的是,由于在底层转换时已经转成了具体类型,不需要调用gconv来做转换,可以直接使用循环赋值 ====更新7.5 对于本次更新增加一个开关,打开时走新的逻辑,关闭时还是走旧逻辑 新增加自定义字段转换的特性,方便用户平稳过渡 1.RegisterDatabaseConvertFunc 为某个驱动(比如mysql)的某个类型(比如decimal)注册自定义转换函数 2.RegisterGoTypeConvertFunc为go语言的类型添加自定义转换函数,且优先级比1高 --- ### 未修改之前的 ![1](https://github.com/gogf/gf/assets/49137144/4f2bdc83-fc7f-4a5c-b9f3-d96ba05cf091) ### 修改后的 ![3333](https://github.com/gogf/gf/assets/49137144/8ad4d45f-f48b-4a4b-abf1-e5fa462a0de4) --- ### 性能方面大幅提升,如果是直接一步赋值到结构体上,只需要600ms,但这样会导致有些api不兼容 ## 一些建议 1. 不建议对一整个结构体实现UnmarshalValue接口来做赋值,例如 ![3](https://github.com/gogf/gf/assets/49137144/bba77fff-79ec-45e6-acea-fe91e50a815c) 2. 和orm的转换有关的接口,应当实现Scan和Value这两个接口来做,和标准库保持一致 3. 建议废弃掉All,One之类的方法,一点都不好用,如果查询的是单个字段,或者是一个[]int,还需要再次转换才能使用,不如直接把Scan方法加强,支持 int...

enhancement
slow reviewing

如果是严格路由的情况下,缓存带有default,in,valid,这三个tag的字段,避免做不必要的解析

wip
awesome

gstructs.Type.FieldKeys() 无法识别匿名结构体的字段,导致带有With的查询时,查询的字段不符合期望 #2119

### Go version 1.22 ### GoFrame version 2.7.0 ### Can this bug be reproduced with the latest release? Option Yes ### What did you do? ```go type implJson struct {...

bug

1. 目前从Scan方法传递的pointer参数,可以使用ctx来传递到最底层来完成赋值。 2. 关于hook,改动底层的逻辑过后会对目前的`HookSelectInput.Next`方法不兼容,因为用户可能会依赖Next方法的返回值,对数据做一些处理之类的,而改动后的逻辑不在使用返回值来返回数据,可能需要增加一个新的api或者新的HookSelectInput。 3. 可以对Scan方法做些增强,如 参数支持基础类型的切片,且只支持一维类型的切片。 4. `Next`方法里面的缓存逻辑可能需要做些更改 5. 表字段类型到go语言类型的转换暂时先用gconv.Convert来做。 6. 改动过后,建议废弃掉One,All之类的api,全部使用Scan方法来做赋值,这样不用再经过中间变量来回复制 **从Scan方法一直到最低层的RowsToResult的调用链** ![调用链](https://github.com/gogf/gf/assets/49137144/e786f83d-7e5c-4e65-9d78-43eaba30c663)

enhancement
inactive

### Go version 1.22 ### GoFrame version 2.7.0 ### Can this bug be reproduced with the latest release? Option Yes ### What did you do? 1.当Scan的参数是指针的时候,也就是*Result,没有查询到数据,返回sql.ErrNoRows ```go var results Result...

bug

1. 对`gconv.Scan`, `gconv.Struct`之类的函数(只要是转换到struct类型的)增加了缓存逻辑,不需要重复解析 2. 对于常见类型的字段的转换使用`gconv.Int`, `gconv.String`之类的,无需多次判断 3. 缓存特性由`UseConvCacheExperiment`函数来控制,默认开启,如果开启后有什么bug,关闭即可,平稳过渡 4. 对于上次 #3412 的改进来说,性能方面大幅度提升,运行速度差不多有4倍,内存方面大幅度减少 5. 对于需要模糊匹配的情况,增加一个字段来记上次找到的key,大概率可以不再需要模糊匹配 6. 针对paramsMap的长度选择合适的方法来做赋值 1. 如果paramsMap的长度比结构体的字段数量少,那么以paramsMap来做循环 2. 反之用结构体字段map来做循环 这么所的原因是当paramsMap的长度和结构体字段数量差距过大时,会造成一些不必要浪费 比如 以下代码 ```go type structType2 struct { Name string...

awesome

在amd64平台用汇编代替反射调用路由

need more details