package main import ( "context" "database/sql" "fmt" "gorm.io/datatypes" "gorm.io/driver/mysql" "gorm.io/gorm" ) type ( User struct { Name string `json:"name"` Age int `json:"age"` } TestTable struct { ID uint64 Data datatypes.JSONType[*User] } ) func (*TestTable) TableName() string { return "user" } func main() { var ctx = context.Background() var db = prepareDB() var err error db = db.WithContext(ctx) db.AutoMigrate(&TestTable{}) db.Create(&TestTable{Data: datatypes.JSONType[*User]{Data: &User{Name: "name", Age: 18}}}) // ok row := &TestTable{} db.Limit(1).Order("id DESC").Find(row) // find all row &{name 18} fmt.Println("find all row ", row.Data.Data) // ok var field datatypes.JSONType[*User] err = db.Model(&TestTable{}).Limit(1).Order("id DESC").Pluck("data", &field).Error // find field &{name 18} fmt.Println("find field ", field.Data, err) // ok var fullRow TestTable err = db.Model(&TestTable{}).Limit(1).Order("id DESC").Pluck("data", &fullRow.Data).Error // find field in row &{name 18} fmt.Println("find field in row ", err, fullRow.Data.Data) } func prepareDB() *gorm.DB { var err error pool, err := sql.Open("mysql", "root:@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=true&loc=Local") if err != nil { panic(err) } db, err := gorm.Open(mysql.New(mysql.Config{Conn: pool}), &gorm.Config{}) if err != nil { panic(err) } return db }