英文:
Unsupported Scan, storing driver.Value type []uint8 into type *guid.GUID
问题
我使用Golang和SQL Server进行工作。
我的Golang结构体如下:
type Role struct {
Id guid.GUID `gorm:"primaryKey;column:Id;type:uniqueidentifier" json:"id"`
RoleName string `gorm:"column:RoleName;not null;unique" json:"roleName"`
IsEnable bool `gorm:"column:IsEnable" json:"isEnable"`
Permissions []RolePermission
}
我使用gorm查询数据时遇到了错误:
不支持的Scan操作,将driver.Value类型的[]uint8存储到类型为*guid.GUID的字段中。
我之前使用过uuid,但在查询时id数据出错(从guid转换为uuid)。
是否有任何方法可以在Golang和SQL Server中存储和处理Guid?
英文:
I work with Golang and SQL Server.
My struct in Golang:
type Role struct {
Id guid.GUID `gorm:"primaryKey;column:Id;type:uniqueidentifier" json:"id"`
RoleName string `gorm:"column:RoleName;not null;unique" json:"roleName"`
IsEnable bool `gorm:"column:IsEnable" json:"isEnable"`
Permissions []RolePermission }
I use gorm to query data but receive error:
> unsupported Scan, storing driver.Value type []uint8 into type *guid.GUID.
I used uuid before but the id data is wrong when query (guid to uuid).
Is any way to store and work with Guid using Golang and SQL server
答案1
得分: 0
go-gorm的早期版本(v0.2)包含了对SQLTag的UUID/GUID支持,其中isUUID()
函数用于测试类型名称("uuid"或"guid")。
但是,在当前的go-gorm v2.0中,该代码已经不存在。
你可能需要实现一个自定义的数据类型扫描器/值转换器,或者使用像google/uuid
这样的库:
import (
"github.com/google/uuid"
"github.com/lib/pq"
)
type Post struct {
ID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
Title string
Tags pq.StringArray `gorm:"type:text[]"`
}
英文:
Early versions of go-gorm (v0.2) were including UUID/GUID support for SQLTag, with isUUID()
a test on the type name ("uuid" or "guid").
But that code is no longer present in current go-gorm v2.0.
You might need to implement a custom Data Type Scanner / Valuer, or use one like google/uuid
:
import (
"github.com/google/uuid"
"github.com/lib/pq"
)
type Post struct {
ID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
Title string
Tags pq.StringArray `gorm:"type:text[]"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论