gen
gen copied to clipboard
推荐实现自定义类型 tag的实现
IP netip.Addr `json:"ip" gorm:"serializer:auto;comment:auto|netip.Addr|注册IP"`
抛砖引玉 先手动写struct 用comment来配置当前的类型与serializer 名称(对于自定义类型在自定义serializer里面实现就好了)
arr := strings.Split(comment, "|")
comment = arr[1]
if len(arr) == 3 {
fieldType = arr[1]
}
}
--------------------
if d, ok := c.Comment(); ok {
if strings.Contains(d, "|") {
arr := strings.Split(d, "|")
if len(arr) > 2 && arr[0] != "" {
buf.WriteString(";serializer:" + arr[0])
}
}
}
这样子就不需要在手动写类型了, 就是写struct 稍微慢点
@hinego 是想自定义tag?还是要自定义类型? FieldType/FieldNewTag
主要是自定义类型 当然也有需要tag修改的需求
我想说的是 如果按上述的写法 不需要每个人都手动去写gen代码了
而不是每写完一个struct 还需要去另外一个地方添加FieldType/FieldNewTag
且此时也不需要自己自定义gen的 main.go了 直接用默认提供的就行
我现在这样爽飞。。。。
就是想加个这样的自定义tag呗?
type User struct{
Age int `gen:"xxx"`
}
有所不同 因为如果是在 comment 里面的话会进数据库 可以直接从数据库读取
但是 类似 gen:"xxx"
这样的 只能直接传入 struct 才行了 因为它没法进数据库
还有一点现在这种用法 有一定的学习成本 按我说的这种的话 非常清晰明白..........(个人认为是。。)
@hinego 嗯,是个不错的想法。不过comment有他自己的含义,按照这种方式,就要求用户要严格按照新的模式来写comment了,不太符合用户习惯,不容易接受且容易出错;同时要迁移不好做,会发现这套定义迁移到其他框架跑不起来,数据库表的定义不应该和客户端语言/orm框架/或者是代码生成工具等耦合,当然如果这套规则成了大家都认可的规范可以。不知道我说清楚没