gen icon indicating copy to clipboard operation
gen copied to clipboard

推荐实现自定义类型 tag的实现

Open hinego opened this issue 2 years ago • 5 comments

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 avatar Sep 16 '22 09:09 hinego

@hinego 是想自定义tag?还是要自定义类型? FieldType/FieldNewTag

qqxhb avatar Sep 16 '22 09:09 qqxhb

主要是自定义类型 当然也有需要tag修改的需求

我想说的是 如果按上述的写法 不需要每个人都手动去写gen代码了

而不是每写完一个struct 还需要去另外一个地方添加FieldType/FieldNewTag

且此时也不需要自己自定义gen的 main.go了 直接用默认提供的就行

我现在这样爽飞。。。。

hinego avatar Sep 16 '22 09:09 hinego

就是想加个这样的自定义tag呗?

type User struct{
    Age int `gen:"xxx"`
}

tr1v3r avatar Sep 16 '22 09:09 tr1v3r

有所不同 因为如果是在 comment 里面的话会进数据库 可以直接从数据库读取

但是 类似 gen:"xxx" 这样的 只能直接传入 struct 才行了 因为它没法进数据库

hinego avatar Sep 16 '22 10:09 hinego

还有一点现在这种用法 有一定的学习成本 按我说的这种的话 非常清晰明白..........(个人认为是。。)

hinego avatar Sep 16 '22 10:09 hinego

@hinego 嗯,是个不错的想法。不过comment有他自己的含义,按照这种方式,就要求用户要严格按照新的模式来写comment了,不太符合用户习惯,不容易接受且容易出错;同时要迁移不好做,会发现这套定义迁移到其他框架跑不起来,数据库表的定义不应该和客户端语言/orm框架/或者是代码生成工具等耦合,当然如果这套规则成了大家都认可的规范可以。不知道我说清楚没

qqxhb avatar Mar 23 '23 06:03 qqxhb