查询的
perms
字段可能存在为空的数据情况
func (m *MenuModel) QueryAllPerms(userId int64) (perms []string) {
sqlStr := "SELECT m.perms FROM sys_user_role ur " +
"LEFT JOIN sys_role_menu rm ON ur.role_id = rm.role_id " +
"LEFT JOIN sys_menu m ON rm.menu_id = m.menu_id " +
"WHERE ur.user_id = ?"
m.Raw(sqlStr, userId).Find(&perms).Error
}
抛异常:
sql: Scan error on column index 0, name "perms": converting NULL to string is unsupported; sql: Scan error on column index 0, name "perms": converting
NULL to string is unsupported; sql: Scan error on column index 0, name "perms": converting NULL to string is unsupported
支持 NULL 或其他未知数的数据库表列不应将 SQL 查询值保存为基本 Go 类型,而是应将其值保存到 database.sql Null 类型。 这些包括 NullString、NullBool、NullInt64、NullFloat64 和 NullTime。
解决方案一,修改收的数据类型
perms []sql.NullString
func (m *MenuModel) QueryAllPerms(userId int64) (perms []sql.NullString) {
sqlStr := "SELECT m.perms FROM sys_user_role ur " +
"LEFT JOIN sys_role_menu rm ON ur.role_id = rm.role_id " +
"LEFT JOIN sys_menu m ON rm.menu_id = m.menu_id " +
"WHERE ur.user_id = ?"
m.Raw(sqlStr, userId).Find(&perms).Error
}
解决方案二,数据库表字段设置默认值