package main
import (
"database/sql/driver"
"encoding/json"
"errors"
"fmt"
"gorm.io/gorm"
"strings"
)
type JSON struct {
Name string `json:"name"`
}
func (j *JSON) Scan(value interface{}) error {
bytes, ok := value.([]byte)
if !ok {
return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value))
}
return json.Unmarshal(bytes, &j)
}
func (j JSON) Value() (driver.Value, error) {
str, err := json.Marshal(j)
if err != nil {
return nil, err
}
return string(str), nil
}
type Array []string
func (a *Array) Scan(value interface{}) error {
bytes, ok := value.([]byte)
if !ok {
return errors.New(fmt.Sprint("Failed to scan Array value:", value))
}
*a = strings.Split(string(bytes), ",")
return nil
}
func (a Array) Value() (driver.Value, error) {
if len(a) > 0 {
var str string = a[0]
for _, v := range a[1:] {
str += "," + v
}
return str,nil
} else {
return "",nil
}
}
var GDB *gorm.DB
func main() {
GDB = getDB()
testArray()
}
func testJson() {
type User struct {
Name JSON
}
GDB.AutoMigrate(&User{})
user := User{
Name: JSON{
Name: "lala",
},
}
GDB.Create(&user)
var fUser User
GDB.Model(&user).Find(&fUser)
fmt.Println(fUser)
}
func testArray() {
type User struct {
Name Array
}
GDB.AutoMigrate(&User{})
user := User{
Name: []string{
"lala",
"tata",
},
}
GDB.Create(&user)
var fUser User
GDB.Model(&user).Find(&fUser)
fmt.Println(fUser)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南