package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
)
func main() {
type User struct {
Uid int
Name string
}
params := g.Slice{
g.Map{
"uid": 1,
"name": "john",
},
g.Map{
"uid": 2,
"name": "smith",
},
}
var users []*User
if err := gconv.Scan(params, &users); err != nil {
panic(err)
}
g.Dump(users)
}
8 Comments
朱华 Hunk
这个不能做pbentity与entity的转换。会报错:
朱华 Hunk
郭强 我在
gconv_struct.go
中加入了以下代码(顺手写的,将就看吧,就这个意思):然后在
UnmarshalValue
调用下方加入了:这样的话,就可以进行如下的转换了,这样对于一些第三方的类型,也可以很方便地转换了,希望官方能考虑将类似的功能加入
GoFrame
中:郭强
这个思路很不错,我个人觉得很赞!👍👍 可以把这个特性提个
pr
,有些细节我们一起来完善。朱华 Hunk
之前的写法有些问题,后面又自己又调整了下,才OK。之前把转换调用放在了bindVarToReflectValueWithInterfaceCheck中,这个会导致在复杂结构中pointer为nil时得不到转换,,从而进入到doConvertWithReflectValueSet中,使得最后的gtime.Time转换成了0值。现在放到调用bindVarToReflectValueWithInterfaceCheck之前了,几个简单的测试用例看着是正常了。等我再多优化优化~ ^O^
郭强
这个特性不错的,你加我微信呢,我怕后面找不到你了。我的微信是
389961817
朱华 Hunk
以前加过。。。还在群里。。。
朱华 Hunk
发起了个PR,反射我用得不多,帮看看有没有需要改进的地方,特别是性能相关的。
coderon
Scan()相较于Map() Struct() Structs() 是不是更底层的实现?
也就是说Struct()能做到的Scan()也能做到,但是反过来则不行?