数组格式
package mainimport ("database/sql/driver""encoding/json""fmt""log""gorm.io/driver/mysql""gorm.io/gorm")// 定义 Profile 结构体type Profile struct {Age int `json:"age"`City string `json:"city"`}// 定义 JSONBArray 类型,封装 JSON 数组数据type JSONBArray []Profile// 实现 Scanner 接口,用于将数据库中的 JSON 数据转换为结构体func (j *JSONBArray) Scan(value interface{}) error {bytes, ok := value.([]byte)if !ok {return fmt.Errorf("type assertion to []byte failed")}return json.Unmarshal(bytes, j)}// 实现 Valuer 接口,用于将结构体转换为 JSON 数据存储到数据库中func (j JSONBArray) Value() (driver.Value, error) {return json.Marshal(j)}// 定义 User 结构体type User struct {ID uint `gorm:"primaryKey"`Name string `gorm:"size:100"`Profiles JSONBArray `gorm:"type:json"` // JSON 数组字段}func main() {// 连接数据库dsn := "sun:95302870@tcp(127.0.0.1:3306)/gorm_json?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic("failed to connect database")}// 自动迁移模式if err := db.AutoMigrate(&User{}); err != nil {log.Fatalf("failed to migrate database: %v", err)}// 创建记录profiles := JSONBArray{{Age: 30, City: "Beijing"},{Age: 25, City: "Shanghai"},}user := User{Name: "John Doe", Profiles: profiles}if err := db.Create(&user).Error; err != nil {log.Fatalf("failed to create user: %v", err)}// 读取记录var retrievedUser Userif err := db.First(&retrievedUser, 1).Error; err != nil {log.Fatalf("failed to retrieve user: %v", err)}fmt.Printf("Retrieved User: %v, Profiles: %+v\n", retrievedUser.Name, retrievedUser.Profiles)}
纯结构体json模式
package mainimport ("database/sql/driver""encoding/json""fmt""log""gorm.io/driver/mysql""gorm.io/gorm")// 定义 Profile 结构体type Profile struct {Age int `json:"age"`City string `json:"city"`}// 实现 Scanner 接口,用于将数据库中的 JSON 数据转换为结构体func (p *Profile) Scan(value interface{}) error {bytes, ok := value.([]byte)if !ok {return fmt.Errorf("type assertion to []byte failed")}return json.Unmarshal(bytes, p)}// 实现 Valuer 接口,用于将结构体转换为 JSON 数据存储到数据库中func (p Profile) Value() (driver.Value, error) {return json.Marshal(p)}// 定义 User 结构体type User struct {ID uint `gorm:"primaryKey"`Name string `gorm:"size:100"`Profile Profile `gorm:"type:text"` // JSON 字段}func main() {// 连接数据库dsn := "sun:95302870@tcp(127.0.0.1:3306)/gorm_json?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic("failed to connect database")}// 自动迁移模式if err := db.AutoMigrate(&User{}); err != nil {log.Fatalf("failed to migrate database: %v", err)}// 创建记录profile := Profile{Age: 30, City: "Beijing"}user := User{Name: "John Doe", Profile: profile}if err := db.Create(&user).Error; err != nil {log.Fatalf("failed to create user: %v", err)}// 读取记录var retrievedUser Userif err := db.Order("id DESC").First(&retrievedUser).Error; err != nil {log.Fatalf("failed to retrieve user: %v", err)}fmt.Printf("Retrieved User: %v, Profile: %+v\n", retrievedUser.Name, retrievedUser.Profile)}
            正在学习Go语言的PHP程序员。