问题描述:结构体中定义多个标签,用来同时满足API层和持久层的需要。
标签本身不再赘述:http://www.imooc.com/article/78936
经历:
没直接找到相关帖子,按几个类似帖子试了下,发现可以的。
我定义了结构体和“form”标签,用来在Iris路由中接收表单数据。https://studyiris.com/example/request/readForm.html
不过我用了xormplus,对数据表的映射也定义了结构体。https://www.kancloud.cn/xormplus/xorm/167137
这两个实现方法很类似,而且这两个结构体有很多字段都是一样的。所以我期望API层和ORM能共用一个结构体。
不过我不知道二者能不能识别多标签的结构体,没有搜到相同问题的帖子,不过看到了这个帖子。虽然后面的结果和这里关系不大,但至少应该明确,结构体是支持多标签的:https://ask.csdn.net/questions/1011836
然后猜测了一下写法,尝试了一下:
FileName string `xorm:varchar(300)",form:"FileName"`
func AddInfo(ctx iris.Context) {
var sfif SysFileInfo
ctx.ReadForm(&sfif)
log.Println("sfi:", sfif.FileName)
//ctx.JSON("添加文件信息")
}
然后可以了,不过后来我发现了更奇怪的事情!
就是FileName定义的结构体,不是我后来用到的SysFileInfo!
这个标签根本就不影响!(当然是有影响的,看下文结果)
于是类比,我把xorm的也删了,果然,数据也插入成功了。
经过这里的测试,得出的结果是,如果字段名和form字段一致,那么标签时不必要的。而且在未定义form标签的情况下,实际传进来的form字段名和结构体里的字段名大小写不敏感。
数据库字段还没细测,因为xorm标签里没有字段名,而是字段信息,估计标签是用来新增表结构的。