Describe the feature

能否在 tags 里指定 scanner/valuer 或者 dataType。这样对于复杂的类型,就不需要每个都实现这些接口了。 比如

type User struct {
Interests []string `scanner:"json"`
Labels []int `scanner:"json"`
}

侵入性也比较小,调用的时候可以直接 user.Labels ...

Motivation

coding起来更方便一点算理由么

Related Issues

Comment From: ghost

https://gorm.io/zh_CN/docs/data_types.html 通过 tag 这里也需要自己实现对应的 scanvalue 方法,以便让 GORM 知道如何将该类型接收、保存到数据库,这毕竟是 自定义类型. 算下来工作量其实没有变...

Comment From: micln

@longlihale 区别主要在复用吧。 比如上面例子里两个复合类型都可以用tag实现json类型,但是 scan 和 value 其实就实现了一次。

Comment From: ghost

@longlihale 区别主要在复用吧。 比如上面例子里两个复合类型都可以用tag实现json类型,但是 scan 和 value 其实就实现了一次。

自定义类型也可以复用的啊 :stuck_out_tongue_closed_eyes:

Comment From: micln

刚刚想了一下,注册也是不错的办法 https://github.com/apache/dubbo-go-hessian2/blob/7cabe51f90162d12ad0e3095c60fedf1d170053b/serialize.go#L32

核心需求是, 我们场景用的各种JSON还挺多的,基本上每个表都会存一个 JSON 格式的 extra。

实现 scanner 接口确实是个好方法,但是有一些限制,比如这个类型不是我们定义的,就需要包一层,或者好几种类型都是差不的JSON。

如果用 tag 或 注册,应该都能比较好地解决这类场景。

Comment From: williambao

这个很好,以前用xorm时,任何类型的字段只要在tag里写上json即可。 现在换到gorm后,发现随便一个类型都要重写value/scan。简直无比麻烦...

Comment From: jinzhu

We have added its support, and it is even more powerful, refer the test: https://github.com/go-gorm/gorm/blob/master/tests/serializer_test.go

Thank you for your support.