XORM框架标签怎么用?拆解column、type与null属性

浅丽酱_3153

浅丽酱_3153

2026-11-04

535人浏览

原创

XORM框架标签需用column(单引号包裹)、type(内置关键词)与null/notnull显式声明:xorm:"varchar(20) 'user_name' notnull"精确控制字段名、类型及非空约束。

xorm框架标签怎么用?拆解column、type与null属性 - php中文网

XORM框架标签怎么用?拆解column、type与null属性

要在Go结构体中精确控制数据库字段名、类型和空值约束,必须正确使用xorm结构体字段上的Tag——它不是可选装饰,而是映射逻辑的核心开关。写错一个关键字或漏掉引号,可能导致建表失败、字段名被自动蛇形转换、甚至null约束失效。

定义字段名:用name或单引号包裹的column

方法一:直接指定数据库列名
在字段Tag中写 xorm:"name(user_name)" 或 xorm:"'user_name'",两者等效。前者显式声明name关键字,后者用单引号包裹即默认视为列名。【单引号不可省略于含下划线、数字开头或与关键字冲突的列名】

方法二:混用列名与类型声明
写成 xorm:"varchar(50) 'usr_name'" 是合法的,xorm会把单引号内内容识别为列名,其余部分解析为类型和约束。但若写成 xorm:"varchar(50) usr_name"(无引号),xorm会尝试按SnakeMapper规则转换usr_name → usr_name,实际仍可能生效,但属于隐式行为,不推荐。

注意:如果结构体字段名本身是 UserName,而你希望数据库列名为 user_name,仅靠 xorm:"varchar(50)" 不够——xorm默认启用 SnakeMapper,会自动转,但这种依赖映射器的行为不稳定;显式写 'user_name' 才真正锁定列名。

声明数据类型:用xorm内置类型关键词

第一步:选择兼容型关键词
xorm不强制要求写标准SQL类型(如VARCHAR),而是提供了一组跨数据库适配的关键词:text、tinytext、mediumtext、longtext、blob、tinyblob、mediumblob、longblob、char、varchar、tinyint、smallint、mediumint、int、bigint、float、double、decimal、bool、date、datetime、time、timestamp、binary、varbinary、enum、set。

第二步:带长度或精度时加括号
xorm:"varchar(32)" 合法;xorm:"decimal(10,2)" 合法;xorm:"int(11)" 在MySQL中有效,但PostgreSQL会忽略括号内容,所以更稳妥的是只写 xorm:"int" 并依赖驱动自动适配。

第三步:避免混用原生SQL类型
不要写 xorm:"VARCHAR(32) NOT NULL"(全大写+空格+SQL关键字)。xorm解析Tag时区分大小写不敏感,但NOT NULL会被当作字段名的一部分而非约束,导致建表语句出错。正确写法是 xorm:"varchar(32) notnull"。

XORM框架 1.3.10
XORM框架 1.3.10

XORM框架 1.3.10版本源码包下载,包含 PostgreSQL 字段同步、GBase8s 与 libSQL 驱动、Oracle 日期和 MSSQL 分页修复。

下载

控制NULL约束:notnull与null必须显式声明

方法1:禁止为空 → 加 notnull
Name string `xorm:"varchar(20) notnull"` 生成的SQL字段定义为 name VARCHAR(20) NOT NULL。这是最常用也最安全的写法。

方法2:允许为空 → 显式加 null 或不加任何约束
默认情况下,未声明 notnull 的字段即为可空。但强烈建议显式写 null,例如 Remark string `xorm:"text null"`,因为某些版本xorm在字段类型为text/blob时会默认加notnull,显式声明可消除歧义。

方法3:禁用隐式NOT NULL陷阱
如果字段是int64且未赋初值,在Go中默认为0,但数据库里你可能希望它是NULL。此时必须同时写 xorm:"int null" 并确保该字段在Insert前设为指针类型(*int64)或使用 -> 标签控制写入逻辑,否则0会被写入而非NULL。

组合实战:一个字段标签的完整拆解

看这个真实字段:CreatedAt time.Time `xorm:"datetime created notnull 'created_at'"`
→ datetime 是xorm认可的跨库时间类型关键词;
→ created 是xorm内置行为标签,表示插入时自动填当前时间;
→ notnull 强制该字段非空;
→ 'created_at' 用单引号锁定列名为下划线风格,覆盖默认映射器行为。【四个组件缺一不可,顺序可变,但单引号必须存在】

如果去掉单引号,写成 xorm:"datetime created notnull created_at",xorm会把 created_at 当作另一个约束关键词处理,报错“unknown tag created_at”。

这一步操作起来很简单,直接把字段Tag按上述规则拼好就行。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

xorm xorm框架

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

2026.11.03

0

11

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

2026.11.03

0

11

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

20

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

40

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XORM框架事务处理手册
XORM框架事务处理手册

共0课时 | 0人学习

XORM框架官方中文文档
XORM框架官方中文文档

共0课时 | 0人学习

Go-zero与XORM网盘项目实战
Go-zero与XORM网盘项目实战

共0课时 | 0人学习