Go SQL error converting NULL to string is unsupported

查询的perms字段可能存在为空的数据情况
1
2
3
4
5
6
7
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
}

抛异常:

1
2
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
1
2
3
4
5
6
7
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
}
坚持原创技术分享,您的支持将鼓励我继续创作!