wln32
wln32
@shuqingzai 建议直接用string接收,使用json.RawMessage会做两次json转换
@gqcn 强哥怎么看呢?
关于(*gdb.HookSelectInput).Next 方法不兼容,目前我想到了以下几种解决方案 1. Next 方法的参数返回值全部不变,在Next 方法内部增加一个变量来判断用户是否调用了Next,如果是用户主动调用的,则把所有的值重新复制一份返回出去,或者使用原来的api去做底层查询 2. Next 方法的参数返回值全部不变,为gdb.Result增加一些新的api,遍历或者设置其中的一些值,全部使用新的api来做 3. 使用新的api来代替Next方法。 ----- 其实可以1和3结合一下,提供新的api,同时旧的Next方法不变,在注释上加上Deprecated标记, 然后多提倡用户使用新的api来做。
我在我的机器上试了pgsql没问题,另这个和mysql没有关系,只要数据库支持json类型的字段就可以
@qinyuguang Version 2.7.0 updates the field matching rules, please refer to the documentation for details https://goframe.org/pages/viewpage.action?pageId=1114345 
Please provide the database table structures for [dao.Blog], [pbentity.Blog], and related information to facilitate the replication of bugs
经测试,2.7.0-2.8.3的测试结果都是直接存放的值,并没有存放地址
> @gqcn 移除的 接口实现,使用中的类型匹配规则进行序列化`gtime``driver.Valuer``ConvertValueForField` 我觉得没啥必要加这个接口,用Scan和Value和标准库一样,就可以
> @wln32 这块代码有点`hack`了,能描述一下这里使用`unsafe`包以及汇编的必要性吗?值得一提的是,`unsafe`包我之前在框架中有使用过,主要是`string`到`[]byte`的转换,在某些场景下会引起一些意想不到的错误,直接进程崩溃,后面全部删除了`unsafe`的使用。 @gqcn 其实`string`到`[]byte`的转换在其他库里面也很常见,你说的意想不到的错误,可能是修改了原字符串导致的,`go`的`string`是只读的,使用`unsafe`转换为`[]byte`后,不能修改其中的内容,否则会`panic`。 关于这里使用unsafe以及汇编,算是我的一个验证吧,刚开始的时候我就一直在想能不能直接使用如下的方法签名来统一调用,以此消除反射的开销。 函数签名:`func(ctx context.Context, req unsafe.Pointer)(res unsafe.Pointer,err error)` 我尝试了一下直接使用反射来获取每个方法的空接口,然后断言,发现不行,直到前段时间,我看了下汇编,觉得汇编应该可以实现我之前的想法,试了下 发现可以,原理其实差不多算是方法转发吧,转发参数以及接受返回值,目前来看,这个汇编写的应该没毛病,可以不用合并这个
> > @wln32 这块代码有点`hack`了,能描述一下这里使用`unsafe`包以及汇编的必要性吗?值得一提的是,`unsafe`包我之前在框架中有使用过,主要是`string`到`[]byte`的转换,在某些场景下会引起一些意想不到的错误,直接进程崩溃,后面全部删除了`unsafe`的使用。 > > @gqcn 其实`string`到`[]byte`的转换在其他库里面也很常见,你说的意想不到的错误,可能是修改了原字符串导致的,`go`的`string`是只读的,使用`unsafe`转换为`[]byte`后,不能修改其中的内容,否则会`panic`。 > > 关于这里使用unsafe以及汇编,算是我的一个验证吧,刚开始的时候我就一直在想能不能直接使用如下的方法签名来统一调用,以此消除反射的开销。 函数签名:`func(ctx context.Context, req unsafe.Pointer)(res unsafe.Pointer,err error)` 我尝试了一下直接使用反射来获取每个方法的空接口,然后断言,发现不行,直到前段时间,我看了下汇编,觉得汇编应该可以实现我之前的想法,试了下 发现可以,原理其实差不多算是方法转发吧,转发参数以及接受返回值,目前来看,这个汇编写的应该没毛病,性能跟调用普通方法差了只有四五倍,可以不用合并这个pr